CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Sistemas Distribuídos Tolerantes a Falhas
Aparência
Conceitos de Tolerância a Falhas
[editar | editar código]A tolerância a falhas refere-se à capacidade de um sistema distribuído de continuar funcionando corretamente, mesmo quando algumas de suas partes falham. Isso é alcançado através de redundância, detecção de falhas e recuperação.
- Aspectos Fundamentais:
- Detecção de Falhas:
- Identificação de componentes falhos por meio de técnicas como monitoramento de tempo (timeouts).
- Isolamento:
- A falha de um componente não deve se propagar para outras partes do sistema.
- Recuperação:
- Restauração do estado de operação normal após uma falha.
- Redundância:
- Uso de múltiplas cópias de dados ou serviços para substituir componentes falhos.
- Detecção de Falhas:
Exemplo: Em um serviço de hospedagem na nuvem como AWS, a tolerância a falhas garante alta disponibilidade mesmo em caso de falhas de hardware.
Tipos de Falhas em Sistemas Distribuídos
[editar | editar código]- Falhas de Hardware:
- Componentes físicos, como servidores ou discos rígidos, podem apresentar falhas.
Exemplo: Um nó pode falhar devido ao superaquecimento.
- Falhas de Software:
- Bugs ou erros lógicos nos sistemas podem levar a comportamentos indesejados.
Exemplo: Deadlocks em processos distribuídos.
- Falhas de Comunicação:
- Atrasos, perdas ou duplicações de mensagens podem ocorrer devido à latência de rede ou problemas nos protocolos.
Exemplo: Um pacote pode ser perdido durante a transmissão de dados via TCP/IP.
- Falhas Bizantinas:
- Comportamentos maliciosos ou arbitrários por parte de nós no sistema.
Exemplo: Um nó pode enviar mensagens erradas intencionalmente, como no caso de ataques.
- Falhas Temporárias ou Intermitentes:
- Comportamentos inconsistentes que são difíceis de detectar.
Exemplo: Uma falha intermitente em uma conexão de rede.
Técnicas de Tolerância a Falhas
[editar | editar código]- Replicação:
- Criar cópias redundantes de dados ou serviços em diferentes nós para assegurar disponibilidade e confiabilidade.
- Tipos:
- Replicação Ativa: Todos os nós processam as mesmas solicitações simultaneamente.
- Replicação Passiva: Apenas o nó principal processa solicitações, enquanto os nós secundários permanecem em espera.
Exemplo: Em bancos de dados distribuídos, como o MongoDB, a replicação garante que os dados estejam disponíveis mesmo que um nó falhe.
- Checkpoints:
- Periodicamente, o estado de um sistema é salvo em um ponto conhecido (checkpoint). Em caso de falha, o sistema pode ser restaurado para o último checkpoint.
Exemplo: Em sistemas de processamento de alto desempenho (HPC), checkpoints são usados para evitar a perda de resultados intermediários.
- Recovery (Recuperação):
- Processos falhos são reiniciados e seu estado é restaurado usando dados salvos ou redundantes.
- Técnicas de Recuperação:
- Backward Recovery: Retorna ao estado anterior utilizando checkpoints.
- Forward Recovery: Corrige o estado atual sem retornar a um ponto anterior.
Exemplo: Em servidores web, o uso de logs permite restaurar sessões após uma falha.
Algoritmos de Consenso em Ambientes Falhos
[editar | editar código]- Definição: Algoritmos de consenso em ambientes falhos permitem que os nós de um sistema distribuído concordem em um valor ou decisão, mesmo na presença de falhas.
- Algoritmos Importantes:
- Paxos:
- Garante consenso mesmo com falhas de nós e atrasos na comunicação.
- Paxos:
Exemplo Prático: Usado por bancos de dados distribuídos, como o Google Spanner.
- Raft:
- Um algoritmo de consenso mais simples que Paxos, baseado em eleições de líder e replicação de logs.
Exemplo Prático: Amplamente usado em etcd e Consul.
- Algoritmo Bizantino (PBFT - Practical Byzantine Fault Tolerance):
- Suporta falhas bizantinas, garantindo consenso mesmo quando nós podem se comportar de forma maliciosa.
Exemplo Prático: Usado em blockchains como Hyperledger Fabric.
- Propriedades de Consenso:
- Segurança: Nenhum nó decide um valor incorreto.
- Liveness: Todos os nós eventualmente tomam uma decisão.
- Tolerância a Falhas: O algoritmo suporta falhas de um número limitado de nós (definido pelo ambiente).