Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Sistemas Distribuídos Tolerantes a Falhas

De Wikiversidade

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:
    1. Detecção de Falhas:
      • Identificação de componentes falhos por meio de técnicas como monitoramento de tempo (timeouts).
    2. Isolamento:
      • A falha de um componente não deve se propagar para outras partes do sistema.
    3. Recuperação:
      • Restauração do estado de operação normal após uma falha.
    4. Redundância:
      • Uso de múltiplas cópias de dados ou serviços para substituir componentes falhos.
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.
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:
    1. Segurança: Nenhum nó decide um valor incorreto.
    2. Liveness: Todos os nós eventualmente tomam uma decisão.
    3. Tolerância a Falhas: O algoritmo suporta falhas de um número limitado de nós (definido pelo ambiente).

Referências

[editar | editar código]
  1. https://www-usr.inf.ufsm.br/~ceretta/elc619/2007/aula1.pdf
  2. https://www.inf.puc-rio.br/~noemi/sd-10/tolfalhas.pdf
  3. https://www-usr.inf.ufsm.br/~ceretta/elc619/2007/aula1.pdf
  4. https://www.bity.com.br/blog/practical-byzantine-fault-tolerance-pbft-guia-completo/