Ao desenvolver aplicações baseadas em microsserviços, nos deparamos com uma arquitetura composta por diversos serviços de menor escala que necessitam interagir entre si para que o sistema funcione como um todo.
A comunicação direta entre esses serviços, embora comum, pode se tornar ineficiente e vulnerável a falhas. É neste cenário que a malha de serviço (service mesh) se torna uma solução valiosa.
O que é uma Malha de Serviço?
O termo “malha de serviço” designa um mecanismo para gerenciar o fluxo de dados entre os diversos microsserviços que compõem uma aplicação. Em termos práticos, trata-se de um software que facilita a comunicação entre esses microsserviços, cuidando de aspectos como:
- Identificação da aplicação
- Balanceamento de carga
- Autenticação
- Criptografia
Uma malha de microsserviços interligados é estabelecida por meio de conexões paralelas, gerenciadas por seus respectivos proxies. Essa rede de microsserviços é integrada a um sistema de gestão de rede de data center de alto nível. Isso otimiza a comunicação sem interrupções durante a evolução da aplicação. Cada serviço de uma aplicação depende de outros para atender às necessidades do usuário.
Por exemplo, em uma loja virtual, antes de uma compra ser finalizada, o usuário precisa verificar se o produto está disponível. Para isso, há comunicação entre o serviço responsável pelo banco de dados e a página do produto. Em seguida, a página do produto interage com o carrinho de compras do usuário.
Adicionalmente, o varejista pode implementar um serviço de recomendação de produtos, que, por sua vez, interage com um banco de dados de categorias de produtos para gerar sugestões, além de se comunicar com o banco de dados de estoque, que já havia sido consultado pela página do produto. Observamos que temos um conjunto de serviços reutilizáveis.
As aplicações modernas são frequentemente estruturadas como redes de serviços que se unem para realizar uma função de negócio específica.
Como Funciona uma Malha de Serviço e Quais as suas Vantagens?
É importante notar que a malha de serviço não adiciona novas funcionalidades ao ambiente de execução de uma aplicação. Ela opera através de um conjunto de proxies de rede, um conceito já familiar na computação empresarial.
Provavelmente, você já utiliza proxies ao acessar páginas web em seu computador de trabalho. No contexto de microsserviços, os proxies são responsáveis por direcionar as requisições entre eles. Esses proxies são chamados de “sidecar” por serem executados paralelamente aos serviços, e não dentro deles. A rede de proxies sidecar forma a malha de serviço.
Sem uma malha de serviço, os desenvolvedores precisariam codificar cada microsserviço considerando a lógica de comunicação com outros serviços. Como essa lógica estaria distribuída, ficaria mais difícil para os desenvolvedores atingirem os objetivos da empresa, além de enfrentarem dificuldades para diagnosticar problemas de comunicação.
A malha de serviço, por sua vez, resolve esses problemas, automatizando a comunicação. Os dados e informações relevantes ficam acessíveis na infraestrutura da rede, facilitando a identificação e correção de problemas. Isso permite que as equipes de TI se dediquem a tarefas de maior valor.
Com a abstração da comunicação, os serviços com falha podem ser automaticamente ignorados, evitando que a troca de dados nas outras partes da aplicação seja prejudicada. Os dados coletados pela malha podem ser analisados, permitindo a melhoria contínua da operação e o aumento do desempenho da aplicação.
Agora que entendemos o funcionamento da malha de serviço, vamos explorar algumas das principais ferramentas de gestão de malha:
Meshry
Meshry é um gerenciador de malha de serviços que possibilita a execução de diversas soluções de malha. Ele pode ser utilizado em Kubernetes e Docker, oferecendo uma interface gráfica e linha de comando para definir as configurações de diversas soluções, como Linkerd e Istio. O Meshry pode ser implantado diretamente no cluster ou localmente.
AWS App Mesh
AWS App Mesh é um serviço de malha de rede para a plataforma Kubernetes da Amazon (EKS). Ele oferece gerenciamento em nível de aplicação através do proxy sidecar Envoy para tráfego de entrada e saída, além de usar o recurso de circuit break para fornecer métricas de observabilidade através do AWS X-Ray. O AWS App Mesh também pode ser utilizado em conjunto com outros serviços, como Amazon EC2 e AWS Fargate.
Linkerd
Linkerd é um gerenciador de malha de rede de código aberto que utiliza um proxy customizado baseado em Rust para gerenciar microsserviços. Ele já vem com o Grafana pré-instalado para apresentar métricas de observabilidade. Ao contrário de outros gerenciadores de malha de código aberto, o Linkerd oferece uma interface gráfica, e não apenas suporte ao Prometheus, mas também a controladores de ingresso como Traefik, Kong e Gloo. O Linkerd também suporta atualizações automáticas de deploy em clusters.
Istio
Istio é uma malha de serviço de código aberto que utiliza o proxy Envoy para gerenciar microsserviços. Ele oferece funcionalidades como balanceamento de carga, criação de políticas, roteamento de tráfego, tempos limite, disjuntores, deslocamento de tráfego e novas tentativas. O Istio também oferece rastreamento distribuído em contêineres ou máquinas, sem necessidade de instalação de software adicional.
Kuma
Kuma é uma malha de serviço desenvolvida pela Kong, que é utilizada para ampliar a funcionalidade de serviços existentes através do proxy Envoy. Ele oferece suporte a diversos microsserviços e proporciona segurança e monitoramento aprimorados para as redes. O Kuma já possui diversas políticas pré-configuradas para roteamento, mTLS, controle de tráfego e outras funcionalidades de segurança. Com o Kuma, é possível controlar diferentes malhas isoladas através de um único plano de controle e dados.
Nginx Service Mesh
Nginx Service Mesh é uma malha de serviço para Kubernetes que encripta o tráfego entre contêineres utilizando o plano de dados desenvolvido pelo Nginx Plus. O Nginx utiliza limitação de taxa e disjuntores para gerenciar o tráfego entre os serviços, e também oferece um painel Grafana para monitorar as métricas da malha.
Consul
Consul da HashiCorp é uma malha de serviço que oferece uma camada de proxy integrada e também suporta o proxy sidecar Envoy. Ele oferece roteamento baseado em caminho, deslocamento de tráfego e balanceamento de carga. O Consul é integrado ao HashiCorp Vault e também suporta mTLS. Ele pode ser integrado com Prometheus e Grafana para visualizar as métricas de observabilidade.
Gloo Mesh
Gloo Mesh é uma malha de serviço construída sobre a malha do Istio e usa o proxy Envoy, permitindo a implementação de um modelo de segurança Zero Trust. O Gloo oferece suporte a Kubernetes, VMs e outros microsserviços multi-inquilinos. É compatível com CI/CD e GitOps, facilitando a implementação.
Considerações Finais
A malha de serviço resolve o problema de comunicação entre microsserviços e oferece diversas vantagens de segurança. No entanto, devido à variedade de soluções de malha disponíveis no mercado, é fundamental escolher aquela que melhor se adapta às suas necessidades e que seja fácil de gerenciar.