Tolerância a falhas é a capacidade de um sistema continuar operando corretamente mesmo quando uma ou mais de suas componentes falham. Em vez de interromper ou degradar o serviço, um sistema tolerante a falhas é projetado para lidar com falhas, mantendo o funcionamento normal ou próximo ao normal. A tolerância a falhas é um aspecto fundamental de sistemas críticos onde a disponibilidade e a confiabilidade são prioritárias, como em aplicações financeiras, sistemas de saúde, infraestrutura de telecomunicações e serviços de nuvem.
A pergunta que move esse assunto:
A principal pergunta que move esse assunto
não é E SE FALHAR?
mas QUANDO VAI FALHAR?.
Componentes de tolerância a falhas:
Redundância:
- Definição: A prática de duplicar componentes críticos do sistema para que, se um falhar, o outro possa assumir sua função sem interrupção.
- Exemplo: Um servidor web pode ter múltiplos servidores de backup que entram em ação automaticamente se o servidor primário falhar. No contexto de banco de dados, a replicação de dados entre múltiplos servidores garante que, se um banco de dados falhar, outro possa servir os dados sem interrupção.
Failover:
- Definição: O processo de redirecionamento automático do tráfego ou carga de trabalho para um componente redundante ou um backup no caso de falha de um componente ativo.
- Exemplo: Em um cluster de servidores, se o nó primário falha, o sistema automaticamente transfere as operações para um nó secundário, garantindo a continuidade do serviço.
Fallback (Recuperação Passiva):
- Definição: Um método de recuperação onde, em caso de falha de um componente principal, o sistema reverte para uma versão simplificada ou um componente alternativo menos eficiente, mas funcional.
- Exemplo: Se um sistema de banco de dados de alta performance falhar, o sistema pode temporariamente operar com um banco de dados de backup mais lento até que o banco de dados principal seja restaurado.
Isolamento de falhas:
- Definição: A capacidade de conter falhas em um componente de forma que elas não se propaguem para outras partes do sistema.
- Exemplo: Em arquiteturas de microserviços, falhas em um serviço específico não afetam outros serviços porque cada serviço opera de forma independente e comunica-se por meio de APIs definidas. Padrões como “circuit breaker” ajudam a isolar falhas, evitando que chamadas repetidas a serviços falhos sobrecarreguem o sistema.
Detecção de falhas:
- Definição: A capacidade de um sistema identificar falhas ou anomalias automaticamente para iniciar processos de recuperação ou ativar redundâncias.
- Exemplo: Health checks e watchdogs são usados para monitorar continuamente a saúde de componentes do sistema, reiniciando-os ou sinalizando falhas para um sistema de failover.
Correção automática (Self-Healing):
- Definição: A capacidade de um sistema detectar falhas e iniciar automaticamente processos para corrigir ou mitigar os problemas, restaurando a operação normal sem intervenção humana.
- Exemplo: Em um ambiente de contêineres gerenciado por Kubernetes, se um pod falhar, o Kubernetes pode automaticamente reiniciar o pod ou criar uma nova instância, garantindo a continuidade do serviço.
Por que tolerar falhas é importante?
É possível nos perdemos no sentido daquilo que estamos entregando, então é bom revisitar o assunto e entender porque estamos entregando resiliência:
- Alta Disponibilidade: Sistemas tolerantes a falhas são projetados para minimizar ou eliminar o tempo de inatividade, garantindo que os serviços estejam sempre disponíveis para os usuários.
- Confiabilidade: A capacidade de continuar operando mesmo após falhas aumenta a confiabilidade percebida do sistema, essencial para operações críticas.
- Segurança: Reduz o risco de perda de dados ou de serviços essenciais devido a falhas imprevistas.
- Redução de Riscos: Minimiza o impacto das falhas, protegendo o sistema contra interrupções significativas que poderiam resultar em perda de receita ou danos à reputação.
Exemplos de implementação de tolerância a falhas:
Armazenamento de Dados:
- RAID (Redundant Array of Independent Disks): Uma técnica usada para combinar múltiplos discos rígidos em um único sistema de armazenamento, permitindo que o sistema continue a operar mesmo se um ou mais discos falharem.
- ReplicaSet: Sistemas como MongoDB utilizam ReplicaSet para garantir que falhas de nós individuais não afetem a disponibilidade e integridade dos dados, as replicas possuem cópias dos dados, permitindo que instâncias inteiras morram, sem afetar a integridade.
Serviços de Nuvem:
- Zonas de Disponibilidade: Serviços como AWS e Azure fornecem zonas de disponibilidade separadas geograficamente e isoladas contra falhas, permitindo que aplicações distribuídas continuem operando mesmo se uma zona inteira falhar.
Bancos de Dados Distribuídos:
- Sharding: MongoDB utiliza sharding de dados para garantir que os dados estejam distribuídos em sua malha de clusters, de forma que somado à estratégia de ReplicaSet, nós individuais não afetem a disponibilidade e integridade dos dados.
Computação em Cluster:
- Gerenciamento de Recursos Distribuídos: Sistemas como Kubernetes gerenciam recursos em um cluster distribuído, realocando tarefas e serviços em resposta a falhas de nós individuais, mantendo a operação ininterrupta.
Conclusão
Em resumo, a tolerância a falhas é uma abordagem para garantir que sistemas críticos permaneçam operacionais e confiáveis, mesmo em cenários de falha. Ela se diferencia de outras técnicas de resiliência pela ênfase em redundância, failover e recuperação, mantendo a integridade e disponibilidade do sistema em todos os momentos.
0 comentários