Chyba je nevyhnutelná a mávnutí motýlích křídel, které smazalo naší databázi
Právě poslouchám Kosmonauti na pokraji smrti od Karla Pacnera. Vědeli jste, že byla asi jenom 46% šance, že let Jurije Gagarina nedopadne katastrofou? Tenhle týden jsem si ověřil, že chyba či selhání komplexních systémů, bez ohledu zdali jsou distribuované, je nevyhnutelná a vy se můžete jedině připravit na její přežití.
Pokud se podíváte na teorii selhání systémů, narazíte na efekt motýlých křídel kdy malá změna podmínek vstupu může vyvolat velkou změnu na výstupu. Kvůli tomu se systémy stávají více a více komplexnější, kdy optimalizace lokálního maxima v jedné části systému může vést k jeho selhání jako celku viz klíčová teze knihy Sidneyho Dekkera Drift into Failure: From Hunting Broken Parts to Understanding Complex Systems. Nechci vás nudit teorií, proto to popíšu na učebnicovém příkladu selhání, který se tento týden stal Microsoftu a jeho public cloud Azure v Evropě.
Používáme Azure SQL, je to databáze provozovaná ve formě cloudové služby. Data na fyzickém uložišti jsou šifrovaná naším klíčem, který leží v KeyVault, což je další cloudová služba. Tohle je skvělá chrana proti tomu, kdyby si někdo chtěl udělat fyzickou kopii vašich dat nebo vám ukradl fyzický nosič. Tato ochrana se nazývá encryption at rest. Má jednu poměrně zásadní vlastnost. Pokud přijdete o klíč, který slouží k šifrování dat, přišli jste o všechna data, protože ten samý klíč se používá k jejich dešifrování. O tento fakt opřeli inženýři Microsoftu režim úklidu. Pokud se Azure SQL nedokáže připojit ke klíčence a získat šifrovací klíč, automatický proces během 24 hodin databázi smaže, protože je bezcenná neboť k datům se už nikdo nikdy nedostane.
Ve středu došlo k výpadku DNS služby v Azure regionu, kde ležela i naše databáze. DNS je služba překládá symbolická jména na adresy počítačů v síti. Kvůli výpadku DNS se nebyl schopen spojit Azure SQL s klíčenkou KeyVault. Automatický proces mazání databáze zafungoval naprosto spolehlivě a netrvalo mu to ani 24 hodin, ale spíše pár minut. Nas středečním ránem jsme jako mávnutím motýlých křídel přišli o dvě ze tří našich databází.
Při představě, že se nám to stalo v produkci a banka přišla o 2/3 dat a všech konsekvencích — výpadek, nedostupnost, disaster recovery plán, reputační riziko, mediální humbuk — to se mnou skoro seklo. Databáze by mohla být replikovaná dalšího geografického regionu, ale zatím není jasné, jestli by se náhodou nezreplikovalo i ono smazání (stále čekáme na výsledky vyšetřování, post mortem a vyjádření Microsoftu). Potom co se mi pulz vrátil do normálu jsem si uvědomil, že to je skvělá příležitost celý systém připravit na podobný výpadek a naučit se ho přežít, protože selhání je nevyhnutelné.
Chyba DNS bylo ono mávnutí motýlých křídel někde v Brazílii a smazání databáze byl uragán, který to vyvolalo někde v Ugandě. Pokud se podíváte na výpadky cloudových služeb, málokdy je to jedno fatální selhání, ale naopak je to série drobných selhání, které se spojí v řetězec vedoucí ke kritickému selhání celého regionu. V případě nechvalně známeho výpadku AWS během velikonoc 2011 to byl krátký síťový výpadek, který spustil replikaci zálohování blokových zařízení, která položila celý region.
Kíčové ponaučení
- Není otázkou zda systém selže, ale kdy a jak se tak stane
- Systém musi být dost robustní na to, aby to přežil byť to může být za cenu částečné degradace funkcí
- Systém nesmí být příliš robustní na to, aby optimalizace lokálního maxima způsobila jeho kritické selhání
- Zabraňte kaskádové replikaci selhání
- Selhání zůstane selháním pouze pokud se z něj nepoučíme, v jiném případě to jsou zkušenosti
Mohlo by vás zajímat
- Veřejná kolekce post mortems
- Seriál Pavla Toufara k dobývání vesmíru, O přistání musel lhát. V kabině Gagarin přistát nemohl, katapultáž zatajili
- Karel Pacner píše knihy o mnou oblíbených tématech, špionáži a vesmíru
Mějte fajn zbytek víkendu a pokud chcete moje newslettery dostávat pravidelně, stačí kliknout na tlačítko Follow na dagblog.cz. Jejich archív najdete zde.
Související články
Související epizody CZ Podcastu
- #261 · Leadership
O vedení lidí a týmů.