O que é uma malha de serviço?

Uma malha de serviço é uma camada de software que lida com toda a comunicação entre serviços em aplicações. Essa camada é composta por microsserviços em contêineres. Conforme as aplicações são escaladas e o número de microsserviços aumenta, torna-se um desafio monitorar a performance dos serviços. Para gerenciar conexões entre serviços, uma malha de serviço fornece novos recursos como monitoramento, registro em log, rastreamento e controle de tráfego. Ela é independente do código de cada serviço, o que permite que ela funcione além dos limites da rede e com diversos sistemas de gerenciamento de serviços.

Por que você precisa de uma malha de serviço?

Na arquitetura de aplicações moderna, é possível criar aplicações como uma coleção de microsserviços pequenos e implementáveis de forma independente. Equipes diferentes podem desenvolver microsserviços individuais e escolher as linguagens e ferramentas de codificação. No entanto, os microsserviços devem se comunicar para que o código da aplicação funcione corretamente.

A performance da aplicação depende da velocidade e resiliência da comunicação entre os serviços. Os desenvolvedores devem monitorar e otimizar a aplicação nos serviços, mas é difícil obter visibilidade devido à natureza distribuída do sistema. À medida que as aplicações são escaladas, torna-se ainda mais complexo gerenciar as comunicações.

Existem dois motivadores principais para a adoção da malha de serviço, que detalhamos a seguir.

Leia sobre microsserviços »

Observabilidade em nível de serviço

À medida que mais workloads e serviços são implantados, os desenvolvedores consideram difícil entender como tudo funciona em conjunto. Por exemplo, as equipes de serviço desejam saber quais são as dependências de downstream e upstream. Eles desejam obter maior visibilidade de como os serviços e as workloads se comunicam na camada da aplicação.

Controle em nível de serviço

Os administradores desejam controlar quais serviços conversam entre si e quais ações eles executam. Eles desejam obter controle e governança otimizados sobre o comportamento, as políticas e as interações dos serviços em uma arquitetura de microsserviços. A aplicação de políticas de segurança é essencial para a conformidade regulamentar.

Quais são os benefícios de uma malha de serviço?

Uma malha de serviço fornece uma camada de infraestrutura centralizada e dedicada que lida com as complexidades da comunicação serviço a serviço em uma aplicação distribuída. A seguir, apresentamos diversos benefícios da malha de serviço.

Descoberta de serviço

As malhas de serviço fornecem descoberta de serviços automatizada, o que reduz a carga operacional do gerenciamento de endpoints de serviço. Elas usam um registro de serviços para descobrir e acompanhar dinamicamente todos os serviços dentro da malha. Os serviços podem encontrar e se comunicar uns com os outros sem complicações, independentemente da localização ou da infraestrutura subjacente. É possível escalar com rapidez ao implantar novos serviços, conforme necessário.

Balanceamento de carga

As malhas de serviço usam diversos algoritmos, como Round-Robin, Least Connections ou Weighted Load Balancing, para distribuir solicitações em várias instâncias de serviço de maneira inteligente. O balanceamento de carga melhora a utilização de recursos e garante alta disponibilidade e escalabilidade. É possível otimizar a performance e evitar gargalos de comunicação de rede.

Gerenciamento de tráfego

As malhas de serviço oferecem recursos avançados de gerenciamento de tráfego, que fornecem controle otimizado sobre o roteamento de solicitações e o comportamento do tráfego. Aqui estão alguns exemplos.

Divisão de tráfego

É possível dividir o tráfego de entrada entre diferentes versões ou configurações de serviço. A malha direciona parte do tráfego para a versão atualizada, o que permite uma implementação controlada e gradual das alterações. Isso fornece uma transição suave e minimiza o impacto das alterações.

Espelhamento de solicitações

É possível duplicar o tráfego para um serviço de teste ou monitoramento para análise sem afetar o fluxo de solicitação principal. Ao espelhar solicitações, você obtém informações sobre como o serviço lida com solicitações específicas sem afetar o tráfego de produção.

Implantações canário

É possível direcionar um pequeno subconjunto de usuários ou tráfego para uma nova versão do serviço, enquanto a maioria dos usuários continua usando a versão estável existente. Com exposição limitada, você pode experimentar o comportamento e a performance da nova versão em um ambiente real.

Segurança

As malhas de serviço fornecem recursos de comunicação segura, como criptografia, autenticação e autorização de TLS mútuo (mTLS). O TLS mútuo possibilita a verificação de identidade na comunicação de serviço a serviço. Ele ajuda a garantir a confidencialidade e a integridade dos dados ao criptografar o tráfego. Também é possível impor políticas de autorização para controlar quais serviços acessam endpoints específicos ou executam ações específicas.

Monitoramento

As malhas de serviço oferecem recursos abrangentes de monitoramento e observabilidade para obter informações sobre a integridade, a performance e o comportamento dos serviços. O monitoramento também oferece suporte para solução de problemas e otimização de performance. Aqui estão alguns exemplos de recursos de monitoramento que você pode usar:

  • Coleta de métricas como latência, taxas de erro e utilização de recursos para análise da performance geral do sistema.
  • Execução do rastreamento distribuído para visualização do caminho completo e do tempo das solicitações em vários serviços.
  • Registro de eventos de serviço em logs para fins de auditoria, depuração e conformidade.

Como funciona uma malha de serviço?

Uma malha de serviço remove a lógica que rege a comunicação de serviço a serviço para serviços individuais e abstrai a comunicação para a própria camada de infraestrutura. Ela usa diversos proxies de rede para rotear e rastrear a comunicação entre os serviços.

Um proxy atua como um gateway intermediário entre a rede da sua organização e o microsserviço. Todo o tráfego de e para o serviço é roteado por meio do servidor proxy. Às vezes, os proxies individuais são chamados de sidecars, pois são executados de forma separada, mas são logicamente próximos de cada serviço. Em conjunto, os proxies formam a camada da malha de serviço. 

 

Existem dois componentes principais na arquitetura da malha de serviço: o ambiente de gerenciamento e o plano de dados.

Plano de dados

O plano de dados é o componente de tratamento de dados de uma malha de serviço. Inclui todos os proxies sidecar e suas funções. Quando um serviço deseja se comunicar com outro serviço, o proxy sidecar executa estas ações:

  1. O sidecar intercepta a solicitação.
  2. A solicitação é encapsulada em uma conexão de rede separada.
  3. Um canal seguro e criptografado é estabelecido entre os proxies de origem e destino.

Os proxies sidecar lidam com mensagens de baixo nível entre os serviços. Eles também implementam recursos, como interrupções de circuitos e novas tentativas de solicitação, para aprimorar a resiliência e evitar a degradação do serviço. A funcionalidade de malha de serviço, como balanceamento de carga, descoberta de serviços e roteamento de tráfego, é implementada no plano de dados.

Ambiente de gerenciamento

O ambiente de gerenciamento atua como a camada central de gerenciamento e configuração da malha de serviço.

Com o ambiente de gerenciamento, os administradores podem definir e configurar os serviços dentro da malha. Por exemplo, é possível especificar parâmetros como endpoints de serviço, regras de roteamento, políticas de balanceamento de carga e configurações de segurança. Após a configuração ser definida, o ambiente de gerenciamento distribui as informações necessárias para o plano de dados da malha de serviço.

Os proxies usam as informações de configuração para decidir como lidar com as solicitações recebidas. Eles também podem receber alterações de configuração e adaptar o comportamento dinamicamente. É possível fazer alterações em tempo real na configuração da malha de serviço sem a necessidade de reinicializações ou interrupções do serviço.

As implementações de malha de serviço geralmente incluem os seguintes recursos no ambiente de gerenciamento:

  • Registro de serviços que monitora todos os serviços dentro da malha.
  • Descoberta automática de novos serviços e remoção de serviços inativos.
  • Coleta e agregação de dados de telemetria, como métricas, logs e informações de rastreamento distribuído.

 

O que é o Istio?

O Istio é um projeto de malha de serviço de código aberto projetado para funcionar principalmente com o Kubernetes. O Kubernetes é uma plataforma de orquestração de contêineres de código aberto usada para implantar e gerenciar aplicações em contêineres em grande escala.

Os componentes do ambiente de gerenciamento do Istio são executados como workloads do Kubernetes. Ele usa um Pod do Kubernetes, que é um conjunto fortemente acoplado de contêineres que compartilham um endereço IP, como base para o projeto do proxy sidecar.

O proxy da camada 7 do Istio é executado como outro contêiner no mesmo contexto de rede do serviço principal. Dessa posição, ele pode interceptar, inspecionar e manipular todo o tráfego de rede que passa pelo Pod. No entanto, o contêiner primário não precisa de alteração ou mesmo de conhecimento de que isso está acontecendo.

Leia sobre o Kubernetes »

Quais são os desafios das implementações de malhas de serviços de código aberto?

Confira alguns desafios comuns da malha de serviço associados a plataformas de código aberto, como Istio, Linkerd e Consul.

Complexidade

As malhas de serviço apresentam componentes adicionais de infraestrutura, requisitos de configuração e considerações de implantação. Elas têm uma curva de aprendizado acentuada, o que exige que os desenvolvedores e os operadores adquiram experiência no uso da implementação de malha de serviço específica. É necessário tempo e recursos para treinar as equipes. Uma organização deve garantir que as equipes tenham o conhecimento necessário para entender as complexidades da arquitetura de malha de serviço e configurá-la com eficácia.

Despesas gerais operacionais

As malhas de serviço introduzem despesas gerais adicionais para implantar, gerenciar e monitorar os proxies do plano de dados e os componentes do ambiente de gerenciamento. Por exemplo, é necessário fazer o seguinte:

  • Garantir alta disponibilidade e escalabilidade da infraestrutura de malha de serviço.
  • Monitorar a integridade e a performance dos proxies.
  • Lidar com atualizações e problemas de compatibilidade.

É essencial projetar e configurar a malha de serviço com atenção para minimizar qualquer impacto na performance do sistema como um todo.

Desafios de integração

Uma malha de serviço deve se integrar perfeitamente à infraestrutura existente para executar as funções necessárias. Isso inclui plataformas de orquestração de contêineres, soluções de rede e outras ferramentas na pilha de tecnologia.

Pode ser um desafio garantir a compatibilidade e a integração facilitada com outros componentes em ambientes complexos e diversos. Planejamento e testes permanentes são necessários para alterar as APIs, os formatos de configuração e as dependências. O mesmo se aplica se você precisar atualizar para novas versões em qualquer lugar da pilha.

Como a AWS pode oferecer suporte aos seus requisitos de malha de serviço?

O AWS App Mesh é uma malha de serviço totalmente gerenciada e altamente disponível da Amazon Web Service (AWS). O App Mesh facilita o monitoramento, o controle e a depuração das comunicações entre os serviços.

O App Mesh usa o Envoy, um proxy de malha de serviço de código aberto implantado em conjunto com seus contêineres de microsserviço. Você pode usá-lo com contêineres de microsserviço gerenciados pelo Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), AWS Fargate e Kubernetes na AWS. Também é possível usá-lo com serviços no Amazon Elastic Compute Cloud (Amazon EC2).

Comece a usar a malha de serviço na AWS ao criar uma conta hoje mesmo.

Próximas etapas na AWS

Cadastre-se para obter uma conta gratuita

Obtenha acesso instantâneo ao nível gratuito da AWS.

Cadastre-se 
Comece a criar no console

Comece a criar no Console de Gerenciamento da AWS.

Faça login