Resiliência nativa da nuvem
Gorjeta
Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
Resiliência é a capacidade do seu sistema de reagir a falhas e ainda permanecer funcional. Não se trata de evitar falhas, mas de aceitar falhas e construir seus serviços nativos da nuvem para respondê-las. Você quer voltar a um estado de pleno funcionamento o mais rápido possível.
Ao contrário dos aplicativos monolíticos tradicionais, em que tudo é executado em conjunto em um único processo, os sistemas nativos da nuvem adotam uma arquitetura distribuída, como mostra a Figura 6-1:
Figura 6-1. Ambiente distribuído nativo da nuvem
Na figura anterior, cada microsserviço e serviço de suporte baseado em nuvem é executado em um processo separado, através da infraestrutura do servidor, comunicando-se por meio de chamadas baseadas em rede.
Operando neste ambiente, um serviço deve ser sensível a muitos desafios diferentes:
Latência de rede inesperada - o tempo para uma solicitação de serviço viajar para o recetor e voltar.
Falhas transitórias - erros de conectividade de rede de curta duração.
Bloqueio por uma operação síncrona de longa duração.
Um processo de host que falhou e está sendo reiniciado ou movido.
Um microsserviço sobrecarregado que não consegue responder por um curto período de tempo.
Uma operação de orquestrador a bordo, como um upgrade contínuo ou a mudança de um serviço de um nó para outro.
Falhas de hardware.
As plataformas de nuvem podem detetar e mitigar muitos desses problemas de infraestrutura. Ele pode reiniciar, dimensionar e até mesmo redistribuir seu serviço para um nó diferente. No entanto, para tirar o máximo proveito dessa proteção integrada, você deve projetar seus serviços para reagir a ela e prosperar nesse ambiente dinâmico.
Nas seções a seguir, exploraremos técnicas defensivas que seu serviço e recursos de nuvem gerenciados podem aproveitar para minimizar o tempo de inatividade e interrupções.