Provoz
Dokument popisuje navržený provoz; ze všeho v něm dnes existuje jen endpoint kontroly živosti. Zapisuje ale rozhodnutí, která se v provozu dělají špatně narychlo — kdo vlastní feed, co se měří, co musí přežít incident a co ještě není dohodnuté.
- Stav
- navrženo; služba vystavuje zatím jen kontrolu živosti
- Procesy
- API, ARQ worker, PostgreSQL, Redis
- SLO zpoždění
- událost zpracovaná do 24 hodin
- Dostupnost API
- nedohodnutá — otevřená otázka pro klienta
- Runbooky
- šest, od zpoždění feedu po zálohu a obnovu
Procesy a vlastnictví feedu
API je bezstavové a horizontálně škálovatelné. Worker běží na ARQ a obsluhuje jak cron pro poller, tak dokumentovou pipeline.
Feed vlastní přes Redis lease právě jeden poller. Druhá replika workeru je proto bezpečná: nepolluje, jen zpracovává dokumenty. To je celý důvod, proč je škálování v tomhle systému otázka jen na straně čtení.
Vedle kontroly živosti jsou navržené endpointy pro stav závislostí (databáze, Redis, zpoždění feedu, stav breakeru, zbývající rozpočet) a pro verzi buildu a verzi projektoru.
Metriky a pravidlo o labelech
Sledují se tři skupiny: příjem (zpoždění, id checkpointu, průchodnost, důvody selhání, stav breakeru, zbývající rozpočet), dokumenty (čekající, zpracované podle typu, selhání stažení, doba extrakce, histogram spolehlivosti, selhání validace podle pravidla) a kontrola (hloubka fronty, rozhodnutí podle výsledku, stáří nejstarší položky). K tomu doba přestavby projekce a verze projektoru.
Pravidlo, které nemá výjimku: žádný label metriky nenese spisovou značku, jméno, částku ani osobní údaj. Labely jsou uzavřené slovníky. Údaj v labelu se totiž rozteče do každého monitorovacího systému po proudu.
Runbooky
| Situace | Runbook |
|---|---|
| Feed se opozdil nebo se zastavil | feed-lag |
| Chyba projektoru, je potřeba přestavba | replay |
| Změnil se kontrakt zdroje (WSDL, XSD, formát) | contract-drift |
| Spadla kvalita extrakce | extraction-quality |
| Postupné zapínání feedu | feed-rollout |
| Záloha a obnova | backup-restore |
Co musí přežít incident
Replika a úložiště dokumentů. Všechno ostatní je odvozené a přestavitelné, a zálohovací politika neplyne z ničeho jiného než z téhle věty.
Zbytek provozní dohody s klientem chybí: cíl zpoždění 24 hodin je převzatý ze zadání, ale dostupnost API je stále otevřená otázka a fronta kontroly má jen kvalitativní cíl — zpracovávaná v rámci SLA analytika a nerostoucí týden po týdnu.
Kde to v repozitáři žije
docs/OPERATIONS.md— procesy, health, SLO, metriky, runbooky, co musí přežít incidentdocs/runbooks/README.md— rozcestník všech šesti runbookůdocs/ARCHITECTURE.md— §4 a §5 — úložiště a chování při selhánídocs/development/OPEN-QUESTIONS.md— stav otázky o SLA a dostupnosti
Souvisí
Chování při selhání
Selhání zdroje, pád uprostřed dávky ani nejistá extrakce nesmí skončit zápisem nesprávného stavu. Každý z těchto případů má předem určené chování a žádné z nich se nepřevádí na negativní výsledek.
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
Replika a checkpoint
PlánovánoAppend-only log akcí, idempotentní zápis podle ID akce a checkpoint posouvaný ve stejné transakci jako zápis. Pád bude znamenat znovunačtení dávky, nikdy její přeskočení.
Detail