Jeden z mechanismů koordinace v distrbuovaných systémech


Princip

Pouze držitel speciálního tokenu (unikátní zprávy/objektu) smí vykonat kritickou akci. Token je unikátní - v systému existuje právě jeden, který putuje mezi procesy.

Klíčová myšlenka:

Token = povolení. Kdo ho má, ten může.


Jak to funguje

  1. Inicializace: Jeden proces začíná s tokenem
  2. Čekání: Proces bez tokenu musí počkat nebo si o něj požádat
  3. Akce: Pouze držitel tokenu smí vstoupit do kritické sekce / provést akci
  4. Předání: Po dokončení akce proces předá token dál:

Varianty

1. Token Ring (jednoduchá verze)

P1 → P2 → P3 → P4 → P1

2. Token on Request (dynamická verze)

3. Tree-based Token (Raymond’s algorithm)

        P1 (root)
       /  \
      P2   P3
     /  \
    P4   P5

Vlastnosti

Výhody

1. Jednoduchá bezpečnost (Safety)

2. Nízký počet zpráv (při nízké konkurenci)

3. Žádná režie na povolení

4. Férové uspořádání (v některých variantách)

2. Latence při čekání

3. Neefektivní při nízké konkurenci

4. Obtížná údržba


Použití v praxi

1. Mutual Exclusion

Token Ring Algorithm:

while true:
  if mám_token and chci_do_CS:
    vstup_do_CS()
    opusť_CS()
    pošli_token(následník)
  elif mám_token and nechci_do_CS:
    pošli_token(následník)
  else:
    čekej_na_token()

Raymond’s Tree Algorithm:

2. Total Order Multicast

Token-based Sequencing:

if mám_token:
  msg.sequence = token.next_seq++
  broadcast(msg)
  pošli_token(další)

3. Leader Election


Problémy a řešení

Problém 1: Ztráta tokenu

Detekce:

Regenerace:

if timeout_uplynul():
  broadcast("Byl ztracen token?")
  if nikdo_neodpoví("Já ho mám"):
    vytvořit_nový_token()  # Riziko duplikace!

Lepší řešení: Logical timestamps

Problém 2: Pád držitele tokenu

Ring-based:

Tree-based:

Problém 3: Férové uspořádání

Problém: V token ring může být neférové (záleží na umístění v kruhu)

Řešení: Fronta žádostí


Srovnání s ostatními mechanismy

Vlastnost Token-based permission-based koordinace quorum-based koordinace
Počet zpráv O(1) - O(log N) O(N) O(√N) - O(N/2)
Odolnost vůči výpadkům ❌ Nízká 🟡 Střední ✅ Vysoká
Latence 🟡 Závisí na pozici ❌ Vysoká 🟡 Střední
Složitost implementace ✅ Nízká (ring) / 🟡 Střední (tree) 🟡 Střední ❌ Vysoká
Férové uspořádání 🟡 Závisí na variantě ✅ Ano (timestamp) ✅ Ano (timestamp)

Kdy použít Token-based?

Dobré pro:

Nepoužívej pro:


Příklady z praxe

1. Distributed Databases: