O palco Tecnologia do Fórum E-Commerce Brasil 2023 recebeu Wanderlei Souza, Distinguished Engineer da McKinsey & Company. Na ocasião, o executivo detalhou os mecanismos necessários para aumentar a confiabilidade em um ambiente de microsserviços.
“Construir resiliência é um tema complexo em qualquer arquitetura distribuída, mesmo para aplicativos modernos nativos de nuvem. Os recursos podem ser temporais, a rede não é confiável e sempre há desafios de comunicação entre serviços e dependências quebradas”, define Souza.
Estratégias para otimizar a resiliência
Nesse cenário caótico, entender os mecanismos complexos para resolver tais problemas é o principal fator de sucesso para aumentar a confiabilidade em um ambiente de microsserviços. Entre as muitas estratégias que podem ser usadas para melhorar a resiliência, ele destacou a observabilidade e a capacidade de controle. Em sua opinião, são requisitos não funcionais essenciais para manter a plataforma de microsserviços funcionando.
Um sistema intensivo de software resiliente é quando:
– Apresentar falha em um ou mais de seus componentes (hardware, software, rede, etc);
– Encontrar entradas inesperadas ou condições externas e/ou;
– Estar sob ataque malicioso de fontes internas ou externas;
– Continuar a fornecer um nível de funcionalidade útil ao usuário e/ou recuperar funções interrompidas rapidamente após um incidente.
Princípio de falha isolada
Bons microsserviços têm isolamento de falhas por meio de design e implementação. Três problemas comuns que afetam a estratégia de isolamento de falhas:
– Banco de dados compartilhado;
– Acoplamento temporal;
– Pools compartilhados sem definir tempos limite.
Acoplamento temporal são as falhas mais comuns dos desenvolvedores em arquiteturas de microsserviços.
Padrões para suportar o princípio de falha rápida
– Bulkhead
– Time Limiter
– Set timeouts
– Rate limiter
– Circuit breaker
Entrega confiável em um contexto de arquitetura distribuída
Abaixo, três estratégias para melhorar a entrega de mensagens em operações de escrita:
– Escrita assíncrona;
– Comunicação de mensagens;
– Novas tentativas.
Controlabilidade
Os padrões de resiliência impedem que uma falha de rede ou serviço se espalhe para outros serviços (imagem abaixo).