Como a Service Mesh pode elevar o padrão dos Microsserviços

imagem do artigo

Os microsserviços são arquiteturas para a criação de aplicações que podem ser implantadas e executadas de modo independente dos outros serviços. Nesse caso, a comunicação é feita serviço a serviço.

Porém, em arquiteturas de microsserviços com um grande número de aplicações, essa comunicação se torna bastante complexa. Por isso, o gerenciamento da comunicação nessas aplicações é fundamental para garantir o desempenho e a confiabilidade ponto-a-ponto.

A Service Mesh foi projetada para tornar o desenvolvimento de microsserviços mais fácil e eficaz, pois ela oferece um nível granular de controle sobre como os serviços se comunicam uns com os outros e compartilham dados entre si. Desse modo, ela garante que um alto volume de comunicação entre os serviços de infraestrutura de aplicativos seja mais rápido, seguro e confiável.

O que é e como funciona a Service Mesh

Uma Service Mesh (em tradução literal, malha de serviço) é uma camada de infraestrutura visível e configurável, incorporada diretamente em uma aplicação. Ela foi projetada para lidar com um alto volume de comunicação entre processos e documentar o desempenho das interações entre os diversos componentes de uma aplicação. Desse modo, ela otimiza a comunicação e evita o tempo de inatividade, conforme a aplicação evolui.

Um dos objetivos da Service Mesh é trazer a comunicação para um patamar visível, onde essa comunicação possa ser gerenciada, monitorada e controlada. Ela privilegia a governança de microsserviços ao adicionar a visibilidade necessária e controles seguros quando são utilizados dezenas de recursos. Desse modo, fica mais fácil descobrir, autorizar e rastrear as diferentes instâncias de serviço.

O Linkerd, o primeiro projeto de service mesh, foi criado em 2017,  e hoje é utilizado por empresas como Microsoft, HP, Walmart e eBay. Logo outros frameworks de Service Mesh, como o Istio e o Conduit, foram disponibilizados no mercado. Eles foram desenvolvidos para ser executados em ambientes variados: on-premises, hospedado em nuvem, em containers do Kubernetes, serviços executados em máquinas virtuais, entre outros;

A Service Mesh implementa a maior parte das funções de rede. Ela oferece as seguintes funcionalidades:

  • Roteamento dinâmico;
  • Autenticação e autorização;
  • Observabilidade;
  • Rastreabilidade;
  • suporte para o padrão de disjuntor;
  • Criptografia;
  • Mitigação de falhas e implementação de Circuit, rare limit e timeout;
  • Balanceamento de carga;
  • Descoberta de serviços.

Uma vez que essas funcionalidades são fornecidas pela Service Mesh no nível da plataforma, elas são disponibilizadas uniformemente para todos os serviços.

Como as sidecars facilitam a comunicação

Uma service mesh geralmente é implementada fornecendo uma instância de proxy secundário chamada sidecar para cada instância de serviço. Situados em uma camada de infraestrutura própria, esses proxies são executados paralelamente a cada serviço, e não dentro deles – daí o nome sidecar.

Sidecars são, portanto, proxies em containers que vivem lado a lado com os serviços que estão suportando. Elas são capazes de interceptar as comunicações entre os serviços, fazendo o monitoramento e lidando com questões de segurança. O proxy sidecar se comunica com outros proxies secundários e é gerenciado pela estrutura de orquestração.

Juntos, esses proxies formam uma rede mesh que intercepta a comunicação entre os microsserviços. O sidecar é o responsável por receber o tráfego de rede e roteá-lo para a sua aplicação irmã. Os sidecars se comunicam entre si em outros microsserviços e eles são gerenciados pelo orquestrador de contêineres em uso.

Além disso, o sidecar é um dos maiores responsáveis por obter métricas de uso de rede da aplicação. Desse modo, em vez de termos um único ponto de comunicação, temos vários pontos que permitem à rede saber como chegar de um serviço a outro.

As vantagens de utilizar a Service Mesh

  • Um dos principais benefícios de uma Service Mesh é a visibilidade que é obtida num ambiente extremamente distribuído como uma arquitetura de microsserviços;
  • A lógica de solicitação forma uma camada de infraestrutura visível paralela aos serviços. Dessa maneira, fica mais fácil reconhecer e diagnosticar os problemas;
  • Além disso, a service mesh confere maior agilidade no desenvolvimento e no deployment, já que as equipes podem trabalhar diferentes recursos de aplicações de modo independente;
  • Facilidade de escalar;
  • Melhorias no tempo de atividade, experiência do usuário e estabilidade;
  • As aplicações também se tornam mais resilientes ao tempo de inatividade, uma vez que a service mesh pode rotear as solicitações para que não passem pelos serviços com falhas;
  • A Service Mesh permite a implementação de um padrão chamado Circuit Breaker, que isola instâncias quebradas de uma aplicação até gradualmente trazê-las de volta à atividade;
  • Os desenvolvedores podem se concentrar em trabalhar na codificação de outros recursos que agregam valor ao negócio, em vez de se preocupar com questões relacionadas à infraestrutura.

As diferenças entre Service Mesh e Microsserviços

Os microsserviços são arquiteturas para a criação de aplicações muito utilizadas pelos desenvolvedores. Eles decompõem a aplicação por meio de funções básicas que podem ser implantadas e executadas de modo independente dos outros serviços. Por isso, a arquitetura de microsserviços permite fazer alterações nos serviços de uma aplicação sem a necessidade de reimplantá-la totalmente.

Cada microsserviço tem como essência a comunicação serviço a serviço. Porém, na arquitetura de microsserviços, essa comunicação geralmente é bastante complexa, pois envolve diferentes padrões de comunicação, como REST e AMQP. Por isso, o gerenciamento da comunicação nessas aplicações é fundamental para garantir o desempenho e a confiabilidade ponto-a-ponto.

Portanto, aplicar uma abordagem de microsserviço à arquitetura de aplicações envolve dividir a sua aplicação em uma série de serviços fracamente acoplados. Por isso, à medida que o número de aplicações aumenta, é preciso usar uma service mesh para gerenciar falhas e garantir a funcionalidade da aplicação. Portanto, quanto mais comunicações serviço a serviço são introduzidas, mais útil se mostra a utilização da service mesh.

Para otimizar o desenvolvimento dos microsserviços, podemos transferir todas as tarefas referentes às funções de rede para uma camada diferente. Desse modo, além do ganho com a fatoração, é possível também manter a independência do código do serviço. Por outro lado, sem uma service mesh, é preciso codificar cada microsserviço com a lógica que rege a comunicação de serviço a serviço, o que demanda um tempo muito maior.

As funcionalidades de observabilidade, confiabilidade e segurança são fornecidas pela Service Mesh no nível da plataforma e disponibilizadas uniformemente para todos os serviços. A Service Mesh ajuda a tornar melhores os microsserviços, trazendo maior visibilidade à sua arquitetura, facilitando a identificação de problemas e conferindo maior agilidade e eficiência ao processo de codificação.

Entenda mais sobre Red Hat OpenShift Service Mesh e sua maneira uniforme de conectar, gerenciar e observar aplicações baseadas em microsserviços. Clique aqui.

Posts Relacionados

Comentários