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

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 workloads 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 ociosa; elas estão disponíveis para assumir 100% do trabalho do subsistema com falha. Com peças de reposição verdadeiras, várias falhas no subsistema são necessárias para produzir um impacto adverso na workload.

O isolamento de falhas minimiza o escopo do impacto quando ocorre uma falha. Isso normalmente é implementado com modularização. As workloads 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 se estende tanto verticalmente, em diferentes funcionalidades em uma workload, 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 de ambientes de gerenciamento, planos de dados e estabilidade estática apoiam diretamente a implementação de tolerância e isolamento de falhas. O artigo Estabilidade estática usando zonas de disponibilidade da Amazon Builders' Library fornece boas definições para esses termos e como eles se aplicam à criação de workloads resilientes e altamente disponíveis. Este whitepaper usa esses padrões na seção Projetando sistemas distribuídos altamente disponíveis no AWS, e também resumimos suas definições aqui.

  • Ambiente de gerenciamento — A parte da workload envolvida na realização de alterações: adição de recursos, exclusão de recursos, modificação de recursos e propagação dessas alterações para onde elas são necessárias. Os ambientes de gerenciamento 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 menores disponibilidades.

  • Plano de dados — A parte da workload que fornece a funcionalidade comercial diária. Os planos de dados tendem a ser mais simples e operar em volumes maiores do que os ambientes de gerenciamento, levando a maiores disponibilidades.

  • Estabilidade estática — A capacidade de uma workload continuar operando corretamente apesar das deficiências de dependência. Um método de implementação é remover as dependências do ambiente de gerenciamento dos planos de dados. Outro método é acoplar vagamente as dependências da workload. Talvez a workload 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 de a dependência ser prejudicada continua funcionando.

Quando pensamos no comprometimento de uma workload, 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 acontece, talvez usando o 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 workload 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 durante a falha. Esse método evita criar uma dependência em um ambiente de gerenciamento no caminho de recuperação da workload para provisionar nova capacidade de recuperação da falha. Além disso, o provisionamento de nova capacidade para vários recursos leva tempo. Enquanto espera por uma nova capacidade, sua workload pode ser sobrecarregada pela demanda existente e sofrer uma maior degradação, levando ao “esgotamento” 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 workloads de alta disponibilidade.

Regra 7

Não use dependências em ambientes de gerenciamento em seu plano de dados, especialmente durante a recuperação.

Regra 8

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