Logický čas není fyzikální veličina (netiká v sekundách), ale diskretní číselný systém, který slouží k zachycení kauzálních závislostí (příčina → následek) mezi událostmi v distribuovaném systému.
Umožňuje nám odpovědět na otázku: “Stala se událost A před událostí B, nebo jsou nezávislé?” bez použití fyzických hodin.
[!important] Logický čas byl vymyšlen pouze proto, abychom dokázali strojově zachytit kauzální závislost.
Princip
Leslie Lamport definoval relaci “stalo se před” (happened-before), značenou $\to$.
- Pokud $a$ a $b$ jsou události v témže procesu a $a$ nastala před $b$, pak $a \to b$.
- Pokud $a$ je odeslání zprávy a $b$ je přijetí této zprávy, pak $a \to b$.
Transitivita: Pokud $a \to b$ a $b \to c$, pak $a \to c$.
Abychom mohli relaci ‘Happened-Before’ prakticky využívat v algoritmech, potřebujeme událostem přiřadit číselná razítka (timestamps). Existují dva hlavní přístupy lišící se v přesnosti zachycení souběžnosti.
Každý proces $P_i$ udržuje čítač $C_i$.
Klíčová vlastnost: $a \to b \implies C(a) < C(b)$.
Zásadní limitace: Implikace neplatí obráceně. Pokud $C(a) < C(b)$, nemůžeme říci, že $a$ kauzálně předchází $b$. Mohou být konkurentní (nezávislé). Lamportovy hodiny nedokáží detekovat souběžnost.
Řeší limitaci skalárních hodin. Každý proces udržuje vektor $V$ o délce $N$ (počet procesů).
Pravidla aktualizace:
Síla vektorových hodin: Umožňují přesně určit vztah dvou událostí.
| Pokud neplatí $V(a) \le V(b)$ ani $V(b) \le V(a)$, události jsou konkurentní ($a | b$). Toto je nezbytné například pro řešení konfliktů při verzování dokumentů (git merge) nebo v databázích jako Amazon Dynamo. |
