Malha de serviços

Origem: Wikipédia, a enciclopédia livre.

No âmbito da computação e tecnologia uma “malha de serviços” (em inglês: service mesh) é um termo relativo à infraestrutura de comunicação existente entre vários serviços que compõem uma determinada aplicação/solução.

Também, o termo “service mesh” é comumente utilizado para resumir e definir de forma abrangente o controle implantando por softwares, no que se refere ao gerenciamento com maior eficácia, nas comunicações entre microsserviços (geralmente executados em contêineres).

Visão geral[editar | editar código-fonte]

Na arquitetura de software, o uso de microsserviços distribuídos acarreta o desacoplamento de vários componentes de uma aplicação, criando assim várias novas interações (predominantemente comunicações de rede) entre os microsserviços. Conforme a aplicação aumenta seu porte, são geradas novas complexidades e isso dificulta o gerenciamento, mapeamento das transações e visibilidade de outras informações do ambiente.

As soluções de “service mesh[1]” propõe uma gestão mais eficaz das comunicações entre serviços, maior controle operacional e também o fornecimento de informações comportamentais. Entre os possíveis controles e métricas temos:

  • Segurança por encriptação (mTLS, etc);
  • Balanceamento de carga (load balancing);
  • Observabilidade (do inglês “observability”, são insumos para se determinar o comportamento e estado da aplicação);
  • Rastreabilidade (do inglês “traceability”, é capacidade de correlacionar eventos e transações em uma linha temporal);
  • Circuit breaker” (interrupção de um fluxo de comunicação para evitar outras falhas em cadeia);
  • Autenticação e autorização;

Com base na técnica de balanceamento de carga, uma solução de “service mesh” pode proporcionar maior facilidade nas estratégias de implantação (“deployment”) com “Canary Releases” e “Blue/Green deployment”. Tal mecanismo adiciona a possibilidade de reverter facilmente uma implantação em ambientes críticos e isso acarreta em maior segurança (no sentido de confiabilidade) aos operadores envolvidos.

Utilizando como referência o Istio[2], solução de “service mesh” amplamente difundida por sua compatibilidade nativa com orquestradores baseados em Kubernetes, podemos observar como uma solução de “malha de serviços” interage com os microsserviços. Em resumo, existe o acoplamento de um contêiner que atuará como proxy junto ao contêiner principal.  As comunicações entre os microsserviços passam a ser encaminhadas utilizando proxies em uma infraestrutura com mecanismos próprios de decisão. Os proxies são comumente chamados de "sidecar", pois são executados “ao lado” ou de forma paralela ao serviço principal.

Um fator de grande relevância no uso dos “sidecar” (proxy de comunicação nesse contexto) é a ausência da necessidade de adequação no código da aplicação, algo comum nas soluções pioneiras (“Netflix OSS” como o “Zuul” e “Ribbon”) que propunham o mesmo objetivo dos atuais produtos de "service mesh".

Referências

  1. «What's a service mesh?» (em inglês) 
  2. Read, 4 Minute. «What is Istio?» (em inglês). Consultado em 1 de maio de 2020