Chování při selhání
Systém, který čte cizí službu a vytěžuje skeny, selhává běžně. Otázka není, jestli se to stane, ale jestli se selhání pozná jako selhání — nebo se tiše zapíše jako údaj. Chování níže popisuje zamýšlený stav; kód pro příjem a extrakci je plánovaný.
- Základní pravidlo
- selhání zdroje nikdy není záporný výsledek
- Jistič
- výchozí práh 5 po sobě jdoucích selhání, 30 sekund do zkušebního obnovení
- Nedotknutelné
- replika a úložiště dokumentů
- Stav
- plánováno (fáze 1: klient, limity, jistič, replika, projekce)
Co se stane při jednotlivých selháních
| Selhání | Chování |
|---|---|
| WS ISIR nedostupné | otevře se jistič, poller couvne, stav se nemění, metrika zpoždění roste a alertuje |
| Zdroj vrátí chybový kód | fail-closed mapování; nikdy se z toho nestane negativní výsledek |
| Pád uprostřed dávky | checkpoint se nepohnul, dávka se načte znovu, idempotentní zápis udělá z opakování no-op |
| Extrakce selže nebo je nejistá | položka jde do fronty kontroly i se zdrojovým dokumentem |
| Bilanční rovnice nesedí | extrakce závěrky se zamítne a jde ke kontrole; nikdy se nezapíše |
| Chyba v projektoru | oprav, zvyš verzi projektoru, přehraj z logu; replika se nedotkne |
Fail-closed: chyba není odpověď
Nejnebezpečnější selhání je to, které vypadá jako výsledek. Odmítnutí otevřeným jističem, timeout nebo chybový kód zdroje je vždy přenosová chyba, kterou lze zopakovat — nikdy se z ní nesmí stát tvrzení „takové řízení neexistuje“.
Stejné pravidlo platí uvnitř: chyba parsování nebo chybový stav nikdy neposune checkpoint. Přeskočená dávka by byla ztráta dat, kterou by nic v systému nezaznamenalo.
Co musí přežít incident
Replika a úložiště dokumentů. Všechno ostatní — projekce, agregáty, indexy, obsah Redisu — je odvozené a znovu postavitelné z těchhle dvou věcí.
Zálohovací politika neplyne z ničeho jiného než z téhle jedné věty: zálohuje se to, co se nedá spočítat znovu. Dokumenty jsou sice teoreticky znovu stažitelné, ale za cenu, kterou zdroj nemá důvod snášet, a proto se s nimi zachází jako s nenahraditelnými.
Kde to v repozitáři žije
docs/ARCHITECTURE.md— tabulka chování při selhání a znovupostavitelnost jednotlivých úložišťdocs/ISIR-SOURCE-SEMANTICS.md— chybové stavy zdroje a jejich fail-closed mapovánídocs/runbooks/backup-restore.md— co se zálohuje, co se obnovuje a co se přepočítá
Souvisí
Event sourcing, protože zdroj je event stream
Systém je konzumentem oficiálního proudu událostí. Z něj staví lokální append-only repliku a z ní přehrává projekci aktuálního stavu. Oprava chyby v interpretaci znamená přehrát log, ne znovu stahovat rejstřík.
Detail
Jeden zapisovatel, mnoho čtenářů
Feed vlastní vždy právě jeden poller, držený leasem v Redisu s TTL; lease po mrtvém držiteli vyprší a je převzatý. Všechno ostatní čte projekci, takže záruky uspořádání zůstávají triviální a škálování je otázkou jen na straně čtenářů.
Detail
Provoz
Procesy, health endpointy, SLO zpoždění za rejstříkem, uzavřené slovníky metrik a šest runbooků pro situace, které nastanou. Služba dnes vystavuje jen kontrolu živosti.
Detail