O que é uma malha de serviço?

Uma malha de serviço é uma camada de infraestrutura dedicada que fornece conectividade de rede, segurança e observabilidade para microsserviços em um sistema distribuído. Ele funciona abstraindo as complexidades de comunicação entre serviços, como balanceamento de carga, interrupção de circuitos, mudança de tráfego e mecanismos de repetição.

A definição de uma malha de serviço requer primeiro a definição de microsserviços. Se você não sabe como funcionam os microsserviços, então uma explicação sobre uma malha de serviço é como comparar voar na primeira classe com voar na classe econômica, mas sem nunca ter ouvido falar de avião. Uma malha de serviço é uma tecnologia criada para fazer com que as aplicações baseadas em microsserviços sejam executadas melhor, embora haja alguns que argumentem que muitas vezes complicam as coisas.

Noções básicas sobre microsserviços

Os microsserviços são uma abordagem moderna para a arquitetura de aplicações de software, em que uma aplicação é dividida em componentes menores acoplados livremente, conhecidos como "serviços". Coletivamente, esses microsserviços fornecem a funcionalidade geral da aplicação. Essa abordagem contrasta com a arquitetura de aplicações "monolítica" tradicional, que combina todas as funcionalidades em uma única peça de software.

A Netflix é um exemplo bem conhecido de microsserviços. Há uma década, a Netflix era uma aplicação de software unificada e gigantesca. Cada recurso da Netflix residia em uma única base de código massiva. O problema era que modificar uma parte da aplicação significava reimplantar tudo, o que não era uma situação desejável para um software comercialmente significativo e com grande volume de trabalho.

Após migrar para uma arquitetura de microsserviços, cada área da Netflix, desde o gerenciamento de conteúdo até o gerenciamento de contas, jogadores e assim por diante, existe como seu próprio microsserviço. Na verdade, se quisermos ser realmente granulares aqui, cada uma dessas áreas consiste em vários microsserviços. Os desenvolvedores podem trabalhar em cada microsserviço de forma isolada. Eles podem alterá-los, dimensioná-los ou reconfigurá-los sem se preocupar com seu impacto em outros microsserviços. Em teoria, se um microsserviço falhar, ele não derrubará o restante da aplicação (embora haja cenários atípicos).

O que é uma malha de serviço?

Com um senso de arquitetura de microsserviços em mente, considere alguns dos desafios que podem surgir ao tentar fazer com que uma aplicação baseada em microsserviços funcione de forma confiável. A arquitetura, embora revolucionária em sua capacidade de separar aplicações em serviços independentes, traz consigo uma série de dificuldades.

A comunicação entre microsserviços, em particular, pode ser problemática sem algum mecanismo para garantir que os microsserviços saibam onde estão outros microsserviços, como se comunicar e como dar aos administradores uma ideia do que está acontecendo dentro da aplicação. Por exemplo, como o microsserviço de streaming na Netflix sabe onde procurar informações sobre a conta de um assinante? É aí que uma malha de serviço entra em cena. No entanto, para agradar as pessoas que não são fãs de uma malha de serviço, é fundamental destacar que você não precisa estritamente de uma malha de serviço para isso.

Uma malha de serviço é uma camada de infraestrutura que gerencia as comunicações entre microsserviços em uma rede. Ele controla as solicitações de serviços dentro da aplicação. Uma malha de serviço também normalmente fornece descoberta de serviço, failover e balanceamento de carga, juntamente com recursos de segurança, como criptografia.

Como funciona uma malha de serviço?

O trabalho de uma malha de serviço é adicionar segurança, observabilidade e confiabilidade a um sistema baseado em microsserviços. Isso é feito por meio do uso de proxies conhecidos como "sidecars", que se conectam a cada microsserviço (também existem malhas de serviço "não auxiliares" baseadas em eBPF). Os sidecars operam na Camada 7 da pilha OSI. Se a aplicação for baseada em contêiner, o sidecar será anexado a cada contêiner ou VM (máquina virtual). Em seguida, os proxies operam em um "plano de dados" e "plano de controle".

O plano de dados é composto por serviços executados próximos aos proxies sidecars. Para cada par de serviço/sidecar, o serviço lida com a lógica de negócios da aplicação, enquanto o proxy fica entre o serviço e outros serviços no sistema. O proxy sidecar lida com todo o tráfego que entra e sai do serviço. Ele também fornece funcionalidade de conexão, como mTLS (mutual Transport Layer Security, segurança mútua da camada de transporte), que permite que cada serviço no fluxo de mensagens de solicitação/resposta valide o certificado do outro.

O plano de controle é onde os administradores interagem com a malha de serviço. Ela lida com a configuração e o controle de proxy, lidando com a administração da malha de serviço e fornecendo uma maneira de configurar e coordenar os proxies. Os administradores trabalham no plano de controle para aplicar políticas de controle de acesso e definir regras de roteamento para mensagens que trafegam entre microsserviços. O plano de controle também pode permitir a exportação de registros e outros dados relacionados à observabilidade de microsserviços.

Trabalhando juntos, o plano de dados e o plano de controle da malha de serviço possibilitam:

  • Segurança: distribuir políticas de segurança, como autenticação e autorização, para microsserviços e criptografar automaticamente as comunicações entre microsserviços. Uma malha de serviço pode gerenciar, monitorar e aplicar políticas de segurança por meio de seu plano de controle.

  • Confiabilidade: gerenciar as comunicações entre microsserviços por meio de proxies sidecars no plano de controle e melhorar a confiabilidade das solicitações de serviço no processo. A malha de serviço também pode lidar com o gerenciamento de balanceamento de carga de falhas, tudo com o objetivo de reforçar a confiabilidade e entregar alta disponibilidade (HA).

  • Observabilidade: mostrar aos proprietários do sistema o desempenho dos microsserviços. Uma malha de serviço pode revelar microsserviços que estão "funcionando bem" ou em risco de falha. O plano de controle da malha de serviço coleta dados de telemetria sobre interações entre microsserviços e outros componentes da aplicação.

Kubernetes e integração de malha de serviço

O Kubernetes, como uma plataforma de orquestração de contêineres amplamente adotada, desempenha um papel fundamental no gerenciamento de microsserviços. A integração de uma malha de serviço ao Kubernetes melhora o controle, a segurança e a observabilidade dos microsserviços em execução no ecossistema do Kubernetes. O Kubernetes, combinado com malhas de serviço como Istio e Linkerd, permite a descoberta automática de serviços, o balanceamento de carga e a recuperação de falhas. A natureza de código aberto do Kubernetes e das malhas de serviços significa que as organizações podem se beneficiar de uma ampla comunidade e de um rico conjunto de ferramentas que evoluem continuamente para dar suporte a aplicações nativas da nuvem. Ao usar o Kubernetes como base para o gerenciamento de contêineres e emparelhá-lo com uma malha de serviço, as organizações ganham melhor visibilidade da comunicação entre serviços, reduzem a latência nas interações de serviço e melhoram a resiliência geral do sistema.

Malha de serviço vs. microsserviços

É fácil se confundir entre microsserviços e uma malha de serviço. Os microsserviços são as partes componentes de um sistema baseado em microsserviços. A malha de serviço pode conectá-los. Como o nome sugere, a malha de serviço está sobre os microsserviços como uma malha conectiva. Em outras palavras, uma malha de serviço é um "padrão" que pode ser implementado para gerenciar as interconexões e a lógica relevante que impulsiona uma aplicação baseada em microsserviços.

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

As aplicações monolíticas não funcionam bem, pois ficam maiores e mais complexas. Começa a fazer sentido dividir a aplicação em microsserviços. Essa abordagem se alinha bem com metodologias modernas de desenvolvimento de aplicações, como ágil, DevOps e integração contínua/entrega contínua (CI/CD). As equipes de desenvolvimento de software e seus parceiros em testes e operações podem se concentrar em um novo código para microsserviços individuais e independentes. Isso geralmente é melhor para o software e para a empresa em geral.

No entanto, à medida que o número de serviços na aplicação baseada em microsserviços se expande, pode se tornar desafiador acompanhar todas as conexões. As partes interessadas podem ter dificuldades para rastrear como cada serviço precisa se conectar e interagir com os outros. Monitorar a integridade do serviço fica difícil. Com dezenas ou até mesmo centenas de microsserviços para conectar e supervisionar, a confiabilidade também pode se tornar um problema.

A malha de serviço resolve esses problemas permitindo que os desenvolvedores lidem com as comunicações entre serviços em uma camada dedicada da infraestrutura. Em vez de lidar com centenas de conexões, uma de cada vez, os desenvolvedores podem gerenciar toda a aplicação por meio de proxies no plano de controle. A malha de serviço fornece funcionalidade eficiente de gerenciamento e monitoramento.

Em poucas palavras, os principais benefícios de uma malha de serviço incluem:

  • Simplificar a comunicação entre microsserviços.

  • Facilitar a detecção e a compreensão de erros de comunicação.

  • Aumentar a segurança de apps com criptografia, autenticação e autorização.

  • Acelerar o desenvolvimento de aplicações por meio de desenvolvimento, teste e implantação mais rápidos de novos microsserviços.

Desafios da malha de serviço

No entanto, uma malha de serviço pode apresentar suas próprias dificuldades. Por exemplo, as camadas da malha de serviço se tornam outro elemento de um sistema que requer infraestrutura, manutenção, suporte e assim por diante. Eles podem ser um desperdício de recursos, afetando o desempenho geral da rede e do hardware. Adicionar proxies sidecars pode potencialmente injetar mais complexidade em um ambiente já complexo. A execução de chamadas de serviço por meio do sidecar adiciona uma etapa, o que pode potencialmente diminuir a velocidade da aplicação. Pode haver problemas relacionados à integração entre várias arquiteturas de microsserviços. A rede ainda precisa de gerenciamento, não obstante o gerenciamento da malha de serviço e as mensagens entre os serviços.

Reduzir a latência em malhas de serviço com automação

Uma das principais preocupações com as malhas de serviço é o potencial de maior latência devido à camada adicional de proxies que lidam com a comunicação de serviço. No entanto, malhas de serviço, como Istio e Linkerd, vêm equipados com recursos de automação que atenuam essas preocupações de latência. Por meio do gerenciamento inteligente de tráfego e de tentativas automatizadas, a malha de serviço pode simplificar os caminhos de comunicação, garantindo atrasos mínimos. Além disso, o Istio usa o Envoy para otimizar as decisões de roteamento, permitindo respostas mais rápidas entre os serviços, utilizando a automação para contornar possíveis gargalos de rede. Isso garante que as aplicações mantenham o alto desempenho, mesmo em grandes ambientes nativos da nuvem, onde a latência poderia ser um problema significativo. Com atualizações e otimizações contínuas da comunidade de código-fonte aberto, as malhas de serviço modernos são cada vez mais capazes de equilibrar recursos avançados de gerenciamento de tráfego com sobrecarga mínima.

Conclusão

Uma malha de serviço pode ajudar você a obter sucesso com microsserviços. A tecnologia fornece uma camada de infraestrutura muito necessária para lidar com as comunicações entre serviços e funções administrativas relacionadas. Implementada da maneira certa, uma malha de serviço oferece segurança, confiabilidade e observabilidade para aplicações e sistemas baseados em microsserviços.

Perguntas frequentes

A malhas de serviço e gateways de API tradicionais têm funções distintas no gerenciamento do tráfego de rede em um sistema distribuído. As malhas de serviço se concentram na comunicação interna entre microsserviços, oferecendo controle granular sobre gerenciamento de tráfego, balanceamento de carga e observabilidade sem exigir alterações no código da aplicação. Em contraste, os gateways de API servem como pontos de entrada centralizados para clientes externos, lidando com tarefas como autenticação, autorização e roteamento de solicitações para APIs voltadas para o cliente.

A arquitetura de malha de serviço aprimora a segurança nos microsserviços, fornecendo uma variedade de recursos que garantem a comunicação segura e a proteção de dados. Um recurso de segurança importante é o mTLS (mutual TLS), que permite a comunicação criptografada entre serviços. Além disso, as malhas de serviço permitem políticas de controle de acesso refinadas, permitindo que os administradores definam e apliquem permissões de acesso no nível do serviço. 

Inicialmente, a implementação de uma malha de serviço pode parecer complexa, mas os benefícios de longo prazo superam a complexidade inicial.

Escolha uma solução de malha de serviço que se alinhe aos seus requisitos e à sua infraestrutura. Cada malha de serviço tem seus próprios recursos e integrações, portanto, avalie-os com base em suas necessidades específicas. Comece com uma configuração básica implantando a malha de serviço em um ambiente de não produção ou em um subconjunto limitado de microsserviços. Defina políticas de controle de acesso, regras de roteamento de tráfego e configurações de segurança de aplicações com base nos requisitos da sua organização.

Implemente gradualmente a malha de serviço para microsserviços e ambientes adicionais à medida que você ganha confiança em sua estabilidade e desempenho. Continuamente itere e melhore sua configuração de malha de serviço com base em feedback, métricas de desempenho e requisitos em evolução.

Aqui estão alguns fatores a serem considerados ao decidir sobre a melhor malha de serviço para suas necessidades:

  • Suporte da comunidade: procure malhas de serviço com suporte ativo da comunidade que possam fornecer recursos valiosos, documentação e contribuições orientadas pela comunidade.

  • Facilidade de uso: escolha uma solução que ofereça ferramentas intuitivas, documentação clara e interfaces fáceis de usar para simplificar a adoção e a manutenção contínua.

  • Conjunto de recursos: avalie os recursos de cada malha de serviço e avalie se ela se alinha aos seus requisitos. Procure recursos de gerenciamento de tráfego, ferramentas de observabilidade e recursos de segurança.

  • Compatibilidade: certifique-se de que a malha de serviço seja compatível com sua infraestrutura existente, incluindo plataformas de orquestração de contêineres e ambientes de nuvem

  • Desempenho e escalabilidade: escolha uma solução que possa lidar com sua workload prevista e escalonar com o crescimento da sua infraestrutura.

Por que os clientes escolhem a Akamai

A Akamai é a empresa de cibersegurança e computação em nuvem que potencializa e protege negócios online. Nossas soluções de segurança líderes de mercado, a inteligência avançada contra ameaças e a equipe de operações globais oferecem defesa completa para garantir a segurança de dados e aplicações empresariais em todos os lugares. As abrangentes soluções de computação em nuvem da Akamai oferecem desempenho e acessibilidade na plataforma mais distribuída do mundo. Empresas globais confiam na Akamai para obter a confiabilidade, a escala e a experiência líderes do setor necessárias para expandir seus negócios com confiança.

Publicações do blog relacionadas

Traçando um caminho para a nuvem moderna
A Akamai anuncia novos locais em todo o mundo, novos serviços para clientes comerciais e melhorias que fortalecem o desempenho de nossos serviços de computação em nuvem.
Como podemos atender às necessidades de nuvem do SaaS?
A nova abordagem nativa em nuvem da Akamai para a entrega de aplicativos SaaS pode atender simultaneamente às suas necessidades de custo e desempenho.
Melhoria da experiência dos jogadores com microsserviços de baixa latência
A Akamai Cloud, amplamente distribuída, está estrategicamente posicionada para oferecer microsserviços de baixa latência essenciais para uma experiência de jogo perfeita.