Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Sincronização em Sistemas Distribuídos

De Wikiversidade

Problemas de Sincronização em Sistemas Distribuídos

[editar | editar código]

Em sistemas distribuídos, a ausência de um relógio global compartilhado cria desafios para sincronizar eventos e garantir consistência. Cada nó do sistema possui seu próprio relógio, que pode divergir dos demais devido a variações de hardware ou latência de comunicação.

  • Principais Problemas:
    • Inconsistências Temporais: Relógios em diferentes máquinas podem apresentar tempos desatualizados, dificultando a ordenação de eventos.
    • Latência de Rede: Atrasos na comunicação podem causar discrepâncias entre o envio e o recebimento de mensagens.
    • Falta de Sincronização Exata: Processos em diferentes máquinas podem não ter conhecimento do estado ou horário real de outros processos.
Exemplo: Em uma transação bancária distribuída, a inconsistência nos horários entre servidores pode levar a um processamento fora de ordem, causando erros como a execução de débitos antes de créditos.

Relógios Físicos e Lógicos

[editar | editar código]
  • Relógios Físicos:
    • Referem-se aos relógios de hardware disponíveis em cada nó.
    • Baseiam-se em padrões como UTC (Coordinated Universal Time), mas requerem sincronização frequente para reduzir desvios.
Exemplo: Protocolos como NTP (Network Time Protocol) sincronizam os relógios físicos de servidores com fontes de tempo confiáveis.
  • Relógios Lógicos:
    • São abstrações usadas para ordenar eventos em sistemas distribuídos, ignorando o tempo físico real.
    • Relógio de Lamport: Usa um contador incremental para representar a ordem de eventos.
    • Relógio Vetorial: Expande a ideia do relógio de Lamport para capturar relações de causalidade entre eventos.
Exemplo: Em um sistema de mensagens, os relógios lógicos ajudam a determinar a ordem de envio e recebimento de mensagens.

Algoritmos de Sincronização de Relógios

[editar | editar código]
  • Cristian’s Algorithm:
    • Sincroniza os relógios de um cliente com um servidor de tempo.
    • O cliente envia uma solicitação ao servidor, recebe o horário e ajusta seu relógio considerando a latência estimada da rede.
Exemplo: Usado em redes locais para sincronizar sistemas com pouca variação de latência.
  • Berkeley Algorithm:
    • Funciona como um consenso de tempo entre um grupo de máquinas.
    • O servidor central coleta os horários de outros nós, calcula a média e envia ajustes necessários a todos os nós.
Exemplo: Ideal para redes privadas onde não há acesso constante a uma fonte UTC.
  • Protocolo NTP (Network Time Protocol):
    • Um dos mais usados, sincroniza relógios com precisão utilizando uma hierarquia de servidores de tempo.
Exemplo: Sistemas operacionais modernos, como Windows e Linux, usam o NTP para ajustar seus relógios.

Exclusão Mútua em Sistemas Distribuídos

[editar | editar código]

Exclusão mútua garante que apenas um processo acesse um recurso compartilhado de cada vez. Isso é fundamental em sistemas distribuídos, onde processos podem estar em nós diferentes.

Algoritmos de Exclusão Mútua:

  • Algoritmo Centralizado: Um nó atua como coordenador, controlando o acesso aos recursos.
    • Vantagem: Simples e eficiente em redes pequenas.
    • Desvantagem: Ponto único de falha.
  • Algoritmo Distribuído: Os processos comunicam entre si para decidir qual terá acesso ao recurso.
    • Exemplo: Baseado no envio de mensagens e marcação de tempos (relógios lógicos).
  • Token Passing: Um token é passado entre os nós. Apenas o nó com o token pode acessar o recurso.
    • Exemplo: Redes Token Ring.
Exemplo: Sistemas de banco de dados distribuídos utilizam exclusão mútua para gerenciar operações de escrita em registros compartilhados.

Algoritmos de Eleição

[editar | editar código]

Algoritmos de eleição identificam um coordenador ou líder em sistemas distribuídos, essencial para funções centralizadas como sincronização.

  • Algoritmos Comuns:
    1. Bullying Algorithm:
      • Todos os nós enviam mensagens para identificar o nó com maior ID como líder.
      • Exemplo: Usado em sistemas onde os nós podem se comunicar diretamente.
    2. Ring Algorithm:
      • Os nós estão organizados em um anel lógico. Cada nó passa mensagens para o próximo no anel até que o líder seja eleito.
      • Exemplo: Usado em redes ordenadas.
Exemplo: Em um cluster de servidores, um algoritmo de eleição pode ser usado para eleger o nó principal para coordenar tarefas.

Referências

[editar | editar código]
  1. https://www-usr.inf.ufsm.br/~ceretta/elc1018/sincronizacao.pdf
  2. https://www.inf.ufpr.br/elias/sisdis/9aulaSisDisRelogiosLogicos.pdf
  3. https://www.inf.pucrs.br/~gustavo/disciplinas/ppd/material/slides-sinc_relogios-novo.pdf
  4. https://www.cos.ufrj.br/~daniel/sd-2021/slides/aula_14.pdf
  5. https://www-di.inf.puc-rio.br/~endler/courses/DA/transp/Election.pdf