Tolerância a falhas e isolamento de falhas - Disponibilidade e muito mais: Compreendendo e melhorando a resiliência de sistemas distribuídos emAWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tolerância a falhas e isolamento de falhas

Esses são dois conceitos importantes quando pensamos em disponibilidade. A tolerância a falhas é a capacidade de resistir a falhas do subsistema e manter a disponibilidade (fazendo a coisa certa dentro de um SLA estabelecido). Para implementar a tolerância a falhas, as cargas de trabalho usam subsistemas sobressalentes (ou redundantes). Quando um dos subsistemas em um conjunto redundante falha, outro retoma seu trabalho, normalmente quase sem problemas. Nesse caso, as peças de reposição são realmente capacidade disponível; elas estão disponíveis para assumir 100% do trabalho do subsistema que falhou. Com peças de reposição reais, várias falhas no subsistema são necessárias para produzir um impacto adverso na carga de trabalho.

O isolamento de falhas minimiza o escopo do impacto quando ocorre uma falha. Isso normalmente é implementado com modularização. As cargas de trabalho são divididas em pequenos subsistemas que falham de forma independente e podem ser reparados isoladamente. A falha de um módulo não se propaga além do módulo. Essa ideia abrange tanto verticalmente, em diferentes funcionalidades em uma carga de trabalho, quanto horizontalmente, em vários subsistemas que fornecem a mesma funcionalidade. Esses módulos atuam como contêineres de falhas que limitam o escopo do impacto durante um evento.

Os padrões arquitetônicos dos planos de controle, planos de dados e estabilidade estática apoiam diretamente a implementação da tolerância e do isolamento de falhas. O artigo da Amazon Builders' Library Stability using Availability Zones fornece boas definições para esses termos e como eles se aplicam à criação de cargas de trabalho resilientes e altamente disponíveis. Este whitepaper usa esses padrões na seção Projetando sistemas distribuídos de alta disponibilidade emAWS, e também resumimos suas definições aqui.

  • Plano de controle — A parte da carga de trabalho envolvida na realização de alterações: adicionar recursos, excluir recursos, modificar recursos e propagar essas mudanças para onde elas são necessárias. Os planos de controle geralmente são mais complexos e têm mais partes móveis do que os planos de dados e, portanto, são estatisticamente mais propensos a falhar e ter menos disponibilidade.

  • Plano de dados — A parte da carga de trabalho que fornece a funcionalidade day-to-day comercial. Os planos de dados tendem a ser mais simples e operar em volumes maiores do que os planos de controle, levando a maiores disponibilidades.

  • Estabilidade estática — A capacidade de uma carga de trabalho continuar a operação correta, apesar das deficiências de dependência. Um método de implementação é remover as dependências do plano de controle dos planos de dados. Outro método é acoplar vagamente as dependências da carga de trabalho. Talvez a carga de trabalho não veja nenhuma informação atualizada (como coisas novas, coisas excluídas ou coisas modificadas) que sua dependência deveria ter fornecido. No entanto, tudo o que estava fazendo antes do comprometimento da dependência continua funcionando.

Quando pensamos em reduzir a carga de trabalho, há duas abordagens de alto nível que podemos considerar para a recuperação. O primeiro método é responder a essa deficiência depois que ela acontecer, talvez usando AWS Auto Scaling para adicionar nova capacidade. O segundo método é se preparar para essas deficiências antes que elas aconteçam, talvez superprovisionando a infraestrutura de uma carga de trabalho para que ela possa continuar operando corretamente sem precisar de recursos adicionais.

Um sistema estaticamente estável usa a última abordagem. Ele pré-provisiona a capacidade não utilizada para estar disponível em caso de falha. Esse método evita a criação de uma dependência em um plano de controle no caminho de recuperação da carga de trabalho para provisionar uma nova capacidade de recuperação da falha. Além disso, o provisionamento de novas capacidades para vários recursos leva tempo. Enquanto espera por uma nova capacidade, sua carga de trabalho pode ser sobrecarregada pela demanda existente e sofrer uma maior degradação, levando à “perda total” ou à perda total da disponibilidade. No entanto, você também deve considerar as implicações de custo da utilização da capacidade pré-provisionada em relação às suas metas de disponibilidade.

A estabilidade estática fornece as próximas duas regras para cargas de trabalho de alta disponibilidade.

Regra 7

Não dependa dos planos de controle em seu plano de dados, especialmente durante a recuperação.

Regra 8

Agrupe as dependências de forma flexível para que sua carga de trabalho possa operar corretamente, apesar do comprometimento da dependência, sempre que possível.