V pondělí večer došlo k celosvětovému výpadku všech služeb společnosti Facebook. Nefungovala nejen sociální síť, ale také další služby jako Instagram a WhatsApp. Výpadek měl pokrytí prakticky ve všech světových médiích, protože šlo o neobvykle rozsáhlý a dlouhotrvající problém, který se protáhl na více než šest hodin.
Drobné výpadky v řádu minut jsou běžné a postihují i jiné velké hráče. Větší výpadky trvající několik hodin ale mají dopad na mnoho dalších služeb, které jsou často na provozu té velké závislé. Pondělní výpadek Facebooku byl jedním z takto velkých problémů a způsobil mnoho dalších vedlejších škod.
BGP aneb základna internetu
Zkušenost vyjádřená ve vtipu říká, že za velkými výpadky může vždy jeden z velké trojice: BGP, DNS nebo DHCP. V pondělním velkém případu sehrál roli právě první jmenovaný protokol BGP. Ten je naprosto zásadní pro fungování celého internetu a bez nadsázky se dá říct, že na něm internet stojí jako na pevných základech.
Internet je „síť sítí“ a skládá se tedy z obrovského množství různých poskytovatelů připojení, peeringových uzlů, podmořských kabelů a mnoha různých cest, kterými mohou data téct. Protože je internet stavěn nekoordinovaně a je hodně proměnlivý, někdo v tom musí udělat pořádek. To je právě úkolem protokolu BGP.
Z jeho pohledu je internet rozdělen na mnoho velmi samostatných a oddělených sítí, kterým se říká autonomní systémy. V nich platí stejná pravidla, stará se o ně jeden tým lidí. Představte si je jako jednotlivé státy, které se jmenují Facebook, Google, Akamai, CESNET a tak dále. Abychom mezi těmito státy mohli cestovat, potřebujeme mít silniční mapu, která nám umožní zvolit rozumnou cestu z jednoho bodu do druhého.
BGP tedy vytváří mapu internetu tím, že předává informace o tom, kdo je s kým kudy propojen a jakým směrem je možné vysílat. Docela dobře si to lze představit jako skupinu trpaslíků, kteří sedí v jednotlivých sítích a když dojde k nějaké změně, zavolají ostatním, že vznikla nebo zanikla cesta. Dohromady se pak kreslí obrovská živá mapa celého světa, kterou pak routery využívají ke směrování provozu.
Je celkem snadné si představit, jak se to celé může pokazit. Pokud jeden z trpaslíků bude mít špatný den, může ostatním ohlásit nesmyslnou cestu. Taková zpráva se šíří velmi rychle a pokud není včas odhalena, rozšíří se po celém světě. Výsledek známe: stará mapa nás místo na dálnici dovede na lesní pěšinu, která vede do nikam. Pokud se tohle stane na internetu, končí vaše data v černé díře.
Jak Facebook z internetu zmizel
Tohle přesně se stalo Facebooku, který nepřestal fungovat, on jednoduše zmizel z mapy internetu. Moc pěkně to ze svého pohledu popisují technici ze sítě Cloudflare. Ti provozují veřejný DNS resolver a všimli si, že všechny dotazy směrem k Facebooku končí hláškou SERVFAIL. Ta značí, že se něco rozbilo při komunikaci s autoritativním serverem. Obvykle to znamená „nikdo nám tam neodpovídá“.
Nejdřív hledali chybu ve svých vlastních serverech, ale pak jim došlo, že problém je většího rozsahu a je mimo jejich síť. Dokonce je i mimo původně podezřívaný systém DNS, rychle se totiž ukázalo, že jsou úplně nedostupné IP rozsahy společnosti Facebook. Příčina je krásně vidět na grafu, který ukazuje počet změn ohlašovaných ze sítě Facebooku pomocí protokolu BGP.
Za normálních okolností je počet takových ohlášek velmi nízký, protože Facebook navenek neprovádí příliš mnoho změn. V pondělí večer se ale objevila úplná záplava změn, která přesně odpovídá času celého výpadku. Facebook všem okolo ohlásil, že cesty k němu už neplatí a je třeba je přestat používat. Právě v tu chvíli se Facebook odpojil od internetu.
Vedlejší škody
Protože odstřižení bylo dokonalé a úplné, nedotklo se jen samotných serverů se službami. Na zmíněných rozsazích běží také autoritativní DNS servery pro domény Facebooku, což způsobilo výpadek této části globálního doménového stromu. Právě to upozornilo na problém techniky z Cloudflare. Domény jako facebook.com
nebo whatsapp.com
začaly všem vracet SERVFAIL.
To ale ještě nebyl konec problémů, protože když takto významné domény najednou zmizí z internetu, stroje i lidé začnou být neodbytní. Výsledkem je znásobení počtu dotazů, které zahltily místní DNS resolvery. Zaznamenal to Cloudflare, ale i další menší operátoři, kteří začali mít problémy se svými službami.
Protože uživatelé chtěli vědět, co se přesně stalo, vzali další služby útokem. Narostl provoz směrem k Twitteru, Signalu a dalším službám. Twitter například ohlásil, že zaznamenal rekordní počet naráz připojených uživatelů.
Facebook není zdaleka jen sociální síť, ale dnes je to celá řada služeb, které mohou využívat ostatní weby. Nejviditelnějším příkladem je přihlašování k různým službám pomocí účtu na Facebooku. Právě kombinace výpadku těchto služeb, přetížení DNS resolverů a nával uživatelů v ostatních sítích způsobili dojem, že toho vypadlo daleko více než jen samotný Facebook.
Rutinní zásah ve vnitřní síti
Facebook už vydal delší prohlášení, ve kterém vysvětlil technické příčiny výpadku. Ten byl způsoben systémem, který se stará o přidělování kapacity vnitřní páteřní sítě Facebooku. Ta se skládá z desítek tisíc optických vláken a propojuje všechna firemní datacentra po celé planetě.
Facebook má mnoho různých uzlů rozdílných velikostí. Některé jsou obří budovy obsahující miliony serverů, které drží uživatelská data a zajišťují chod všech aplikací. Jiné body jsou pak relativně malé a mají třeba na starosti připojení této obrovské sítě ke zbytku internetu.
Když uživatel pošle k Facebooku nějaký požadavek, jeho dotaz běží přes internet k nejbližšímu bodu sítě a pak pokračuje interními cestami až k místu vyřízení. Odtud se zase vrací většinu cesty páteřními linkami Facebooku, aby zase vystoupil do internetu někde blízko uživateli.
Tato síť je provozována routery, které směrují provoz mezi jednotlivými body, aby data tekla správnými a efektivními cestami. Je úplně běžné, že technici potřebují část sítě odpojit, aby mohli provést rutinní zásah, například vyměnit optický kabel, navýšit v úzkém místě kapacitu nebo aktualizovat firmware v routeru.
Právě jeden z takových rutinních zásahů byl podle Facebooku důvodem pondělního výpadku. Během ní technik použil interní nástroj, aby upravil chování páteřní sítě. To ovšem způsobilo neúmyslné zrušení všech spojů uvnitř sítě, což nakonec vyústilo v odpojení celého Facebooku od internetu.
Facebook se samozřejmě snaží, aby k podobnému výpadku vůbec nemohlo dojít, proto jeho systémy brání v odeslání nesmyslného požadavku. Bohužel auditní systém obsahoval chybu, kvůli které příkaz prošel do produkčního prostředí a napáchal zmíněné škody. Vše se stalo velmi rychle, protože jde o automatizovaný proces.
Poté ale přišel další problém, který souvisí už se zmíněnými DNS servery. Ty ohlašují do internetu svou přítomnost pomocí BGP a jsou nastaveny tak, aby v případě technických problémů samy sebe z internetu vymazaly. To má zabránit chybnému chování nějak poškozeného autoritativního DNS serveru. Uživatelům takový server zmizí z mapy internetu, přestanou se na něj posílat další dotazy a jeho úlohu převezmou ostatní servery.
Jelikož došlo k rozpadu celé páteřní sítě, ta přestala být dostupná také pro DNS servery. Ty to vyhodnotily jako nezdravý stav a v takové situaci mají použít BGP a odpojit se od internetu. Přesně to se stalo a právě tuhle komunikaci pak zachytil Cloudflare. DNS servery zmizely ze světa a Facebook přestal existovat.
Facebook se bez Facebooku špatně opravuje
Aby toho nebylo málo, takhle rozsáhlý problém způsobil další potíže přímo technikům ve Facebooku. Ti se samozřejmě snažili okamžitě zjistit, co se stalo a jak to mají napravit. Velmi rychle ale narazili na dvě překážky: nebylo možné používat interní síť a dostat se tak běžným způsobem na dálku k prvkům v datacentrech. Kromě toho výpadek autoritativních DNS serverů vyřadil interní nástroje, které se běžně používají k průzkumu a opravám problémů.
Řada techniků je kvůli koronavirovým opatřením doma a nemohli tak do chodu sítě zasáhnout. Zbývali lidé uvnitř datacenter, kteří měli fyzický přístup k serverům. Ani to ale není jednoduché, protože bezpečnostní opatření znemožňují jednoduchý zásah do systémů, i když stojíte přímo u nich.
Proto trvalo poměrně dlouho, než byly provedeny záložní postupy a bylo možné začít servery ovládat. Pak už bylo možné odhalit příčinu problémů a odstranit je. Jakmile byla páteřní síť zase v provozu, věci se začaly dostávat do funkčního stavu a bylo možné obnovit běžný chod.
Takto velkou službu ale není možné prostě najednou zase zapnout, protože by to způsobilo další vlnu výpadků způsobenou obrovskou špičkou v návštěvnosti. Jednotlivá datacentra vykazovala poklesy spotřeby energie v rozmezí desítek megawattů a náhle zvrácení takového poklesu spotřeby energie by mohlo ohrozit úplně vše. Právě na takové události jsou ale technici ve Facebooku vycvičeni díky pravidelným výpadkům datacenter, která jednou za čas simulují. Díky těmto zkušenostem se podařilo nakonec vše bez dalších výpadků oživit.
Všechno někdy vypadne
Výpadky se prostě stávají úplně všude a není možné jim úplně zabránit. Cílem by mělo být počet podobných události minimalizovat a především zkrátit dobu na minimum. Podobné události nám ovšem ukazují, jak je současný svět složitý a propojený a že výpadek jedné velké globální firmy může způsobit poměrně rozsáhlé potíže. Doufejme, že se taková věc stane maximálně jednou za deset let.