0006 — Hostovanie kópií je koordinované atomickým leasom DB
Kontext
Spustený profil kópie musí byť hostovaný presne jedným uzlom — dvaja hostitelia na rovnakom profile znamenajú každý zdrojový obchod sa zrkadlí dvakrát (skutočné peniaze stratené). Uzly prichádzajú a odchádzajú (škálovanie, havárie, valivé aktualizácie) a nechceme, aby existovala samostatná služba koordinátora, ktorá by bežala a udržiavala sa.
Rozhodnutie
Každý CopyEngineSupervisor nárokovuje profily s atomickým DB leasom na tabuľke CopyProfiles:
- Claim — atomické
ExecuteUpdate(aleboFOR UPDATE SKIP LOCKEDpri limitovaní na uzol) trvá profily, ktoré nie sú pridelené alebo ktorých lease vypršal. Atomicita znamená dva závodiacich supervisorov nikdy oba nárokujú rovnaký riadok. - Renew — aktívny uzol obnovuje svoj lease každý cyklus, takže si ponecháva svoj nárok.
- Reclaim — lease zaveseného uzla vyprší a prežívajúci si profil vyzdvihne na svojom ďalšom cykle (samoistiace). Pri milostivom vypnutí uzol uvoľní svoje leasy okamžite, aby bolo failover rýchle.
- Watchdog — hostiteľ, ktorého úloha sa ukončila, kým je profil stále náš, sa reštartuje.
- Rekoncilácia je s rozstupom, aby sa zabránilo davu hrmiacich
UPDATEov v rozsahu.
Dôsledky
- Žiadny samostatný koordinátor na nasadenie alebo udržiavanie zdravý — Postgres je jediný zdroj pravdy.
- Dvojité kopírovanie je bránené atomicitou na úrovni riadkov, nie aplikačnou zámkou.
- Latencia failovera je obmedzená leasom TTL (mínus cesta rýchleho milostivého uvoľnenia).
- Toto je cesta peňazí; je chránená determinickým testom stresu (DST) — nikdy neoslabujte scenár DST, aby prešiel.