Em sistemas centralizados, o tempo é unívoco, facilitando a sincronização, já em SD, alcançar acordo sobre o tempo é desafiador: cada nó possui seu próprio dispositivo de relógio para manter a noção de tempo. Problemas de sincronização podem causar complicações em aplicações distribuídas sensíveis ao tempo.

Relógios Físicos: todos os computadores possuem um circuito para acompanhar o tempo, geralmente um cristal de quartzo, que oscilam em frequências bem definidas, mas podem variar ligeiramente entre diferentes computadores.

Sincronização: devido à disparidade de relógios nos nós, problemas de sincronização surgem em DS, em alguns casos, é necessário sincronizar com relógios físicos externos.

Algoritmos de Sincronização: têm o objetivo de manter a precisão interna (sincronização entre os nós) e externa (sincronização com relógios físicos).

Algoritmo de Christian: clientes contatam um servidor de tempo, estimando o atraso de mensagens para calcular a sincronização.

Algoritmo de Berkeley: Um servidor de tempo ativo consulta periodicamente os nós para calcular uma média e ajustar os relógios dos outros nós.

Protocolo de Tempo de Rede (NTP): Pares de servidores estimam o atraso e a sincronização entre si, dividindo-os em estratos para evitar sincronização desnecessária.

→ baseado em uma herarquia de servidores, onde cada nível da hierarquia é denominado de Stratum. Normalmente, são implementados 4 Stratums, onde os servidores do Stratum 1 (de mais alto nível) obtêm sua hora por meio de sinais provenientes de UTC receivers

→ cada par de servidores NTP, seja no mesmo Stratum ou em Stratums diferentes, trocam informações de sincronização. Inicialmente, eles computam o offset entre os nós por meio do Algoritmo de Christian, resultando no valor de teta, o qual serve para indicar a defasagem entre os relógios de ambos os servidores.

→ eles calculam o delta que indica o delay médio entre os servidores, o que serve para ajustar os timestamps durante a sincronização entre eles. A posição na hierarquia determinará qual servidor ajustará o seu relógio ao do outro, onde o servidor de Stratum maior sempre ajusta seu relógio ao servidor de Stratum menor.


RELÓGIOS LÓGICOS: a sincronização de relógios está relacionada ao tempo, mas pode não ser necessário ter uma conta precisa do tempo real. O que geralmente importa é a ordem em que os eventos ocorrem, não necessariamente o tempo absoluto.

Relógios Lógicos de Lamport: propôs relógios lógicos como uma maneira de capturar a ordem dos eventos em sistemas distribuídos. São essencialmente contadores de eventos

Algoritmo de Lamport: cada processo mantém um contador local que é incrementado antes de executar um evento. Ao enviar uma mensagem, o emissor anexa o valor atual (timestamp) do seu contador à mensagem.

Relógios Vetoriais: com os relógios de Lamport, não podemos determinar a relação causal entre dois eventos apenas comparando seus tempos (relógios lógicos).

Clocks: Hardware x Software x Logical