
arquitetura de microsserviços é amplamente difundida no desenvolvimento de software. Mas as organizações que o utilizam, além das dificuldades de implementação da lógica de negócios, também enfrentam falhas distribuídas.
Erros de computação distribuída são bem documentados, mas difíceis de detectar. Como resultado, construir uma arquitetura de sistema distribuído confiável e em grande escala torna-se um desafio complexo. Um código que parece ótimo em um sistema monolítico pode se tornar um problema quando você muda para a rede.
Equipe Mail.ru Cloud Solutionstraduziu um artigo cujo autor esteve envolvido na detecção de falhas típicas no código de produção por vários anos e estudou as razões que levaram a esse resultado. Este artigo fornece diretrizes de revisão de código que o autor usa como uma lista de verificação básica.
O sistema remoto falha
Não importa o quão cuidadosamente o sistema seja projetado, ele falhará em algum ponto - isso é um fato quando o software é lançado para produção.
As falhas acontecem por vários motivos: bugs, problemas de infraestrutura, picos repentinos de tráfego, diminuição da negligência, mas quase sempre acontecem. A robustez e confiabilidade de toda a arquitetura depende de como os módulos de chamada lidam com os erros:
- . . , , . — . , .
- . , . ? ? , ? ? .
Essa situação é pior do que uma falha completa, pois não se sabe se o sistema remoto está instalado e funcionando. Portanto, para lidar com esse cenário, você deve sempre verificar os problemas descritos abaixo.
Alguns dos problemas podem ser resolvidos de forma transparente para o código do aplicativo, usando tecnologias de malha de serviço, como o Istio. No entanto, você precisa se certificar de que tais problemas sejam tratados independentemente do método:
- Defina tempos limite para chamadas remotas do sistema . Isso também se aplica a tempos limite para chamadas remotas de API e banco de dados, publicação de eventos. Verifique se os tempos limite de rastreamento e razoáveis estão definidos para todos os sistemas remotos nas chamadas. Isso evita o desperdício de recursos aguardando se o sistema remoto parar de responder.
- -. , — . , .
, - (, ). , , . — , . - (Circuit Breaker). , , Hystrix. . , Circuit Breaker . — .
- - . - — , . , . , -. , .
- . , . , , .
- . , ( API, ), — . : , , . .
,
- , API . - API. , API . API API, — .
- SLA — . SLA , . , .
SLA : — . , SLA. — , , . - API-. SLA — SLA.
- . — , . , , , . .
— «» , «» . , id = 123, id =123. , «» , « ». .
- . , , . , Redis, . , .
- . API (), ? , , ? API ?
- . , , , . . . , , . . .
- Verifique a entrada em cada ponto de entrada. Em um ambiente distribuído, qualquer parte do sistema pode ser comprometida do ponto de vista da segurança ou apresentar erros. Portanto, cada módulo deve verificar o que recebe como entrada. E não presuma que ele receberá informações limpas, ou seja, seguras.
- Nunca armazene credenciais em um repositório de código. Esse é um erro muito comum, do qual é difícil se livrar. No entanto, as credenciais sempre devem ser carregadas no tempo de execução do sistema a partir de um armazenamento externo, de preferência seguro.
Espero que essas diretrizes sejam úteis para reduzir bugs comuns no código de sistemas distribuídos.
Boa sorte!
O que mais ler: