CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Algoritmos Distribuídos
Aparência
Conceitos e Características de Algoritmos Distribuídos
[editar | editar código]Um algoritmo distribuído é um conjunto de instruções que define como processos em diferentes nós de um sistema distribuído interagem para resolver problemas de forma cooperativa.
- Características:
- Descentralização:
- Diferente de algoritmos centralizados, os distribuídos são projetados para funcionar sem um coordenador único.
- Escalabilidade:
- Capazes de funcionar eficientemente mesmo com o aumento do número de nós.
- Tolerância a Falhas:
- Precisam continuar funcionando mesmo quando alguns nós falham.
- Coordenação e Consistência:
- Garantem que os processos estejam sincronizados e que os dados sejam consistentes em todos os nós.
- Latência de Comunicação:
- A latência entre nós impacta o desempenho dos algoritmos.
- Descentralização:
Exemplo: Algoritmos de roteamento na internet, como o protocolo OSPF, são distribuídos para gerenciar rotas entre diferentes dispositivos.
Algoritmos de Difusão
[editar | editar código]Algoritmos de difusão são usados para disseminar informações de um nó para todos os outros em um sistema distribuído.
- Tipos:
- Difusão Inundada (Flooding):
- Cada nó retransmite a mensagem para todos os vizinhos, até que todos os nós tenham recebido.
- Vantagem: Simples e garante a entrega.
- Desvantagem: Alta sobrecarga de mensagens.
- Difusão Controlada:
- Evita mensagens redundantes, usando contadores ou verificações de mensagens recebidas.
- Difusão Inundada (Flooding):
Exemplo: Protocolos de descoberta de rede, como ARP (Address Resolution Protocol), utilizam a difusão para localizar dispositivos.
Algoritmos de Consenso
[editar | editar código]Algoritmos de consenso permitem que múltiplos processos em um sistema distribuído concordem sobre um único valor ou estado, mesmo em presença de falhas.
Propriedades Fundamentais:
[editar | editar código]- Confiabilidade: Todos os processos honestos concordam no mesmo valor.
- Validade: O valor acordado deve ser válido, ou seja, proposto por um dos processos.
- Tolerância a Falhas: Funcionam mesmo com falhas parciais (falhas bizantinas, por exemplo).
Algoritmos Famosos:
[editar | editar código]- Paxos:
- Um algoritmo robusto e tolerante a falhas que garante consenso, amplamente usado em sistemas como bancos de dados distribuídos.
Exemplo: Usado pelo Google em seus sistemas distribuídos.
- Raft:
- Simples de entender e implementar, usado em sistemas distribuídos como o etcd e Consul.
Exemplo : Gerenciamento de configuração de clusters de servidores.
- Algoritmos de Consenso Bizantino:
- Lidam com nós maliciosos ou com comportamentos arbitrários.
Exemplo: O algoritmo utilizado pelo protocolo blockchain Ethereum.
Algoritmos de Replicação de Dados
[editar | editar código]Garantem que os dados sejam copiados e armazenados em múltiplos nós, mantendo consistência e disponibilidade.
- Características:
- Replicação Forte: Garante que todos os nós tenham os mesmos dados a qualquer momento.
- Replicação Eventual: Eventualmente, todos os nós terão os mesmos dados, mas não imediatamente.
- Exemplo de Técnicas:
- Quórum de Leitura/Escrita:
- Um subconjunto mínimo de nós é consultado para leituras e escritas, garantindo consistência.
- Replicação Primária/Secundária:
- Um nó principal coordena as atualizações, enquanto nós secundários mantêm cópias.
- Algoritmo Gossip:
- Dissemina informações entre nós de forma probabilística, sendo altamente escalável.
- Quórum de Leitura/Escrita:
Exemplo: Sistemas de banco de dados distribuídos, como o MongoDB e o Cassandra, utilizam algoritmos de replicação para garantir alta disponibilidade e consistência eventual.