Tak ono staci se podivat trocha na coalescing... jak ty zavisle ukoly planovat tak, aby se to nezahltilo.
Problem je velice podobny tomu s cim se musi vyporadat napr cron - pokud ukol trva dele nez hodinu a mate to naplanovano v hourly, tak jaky pristup zvolit? Nasilne dodrzovat plan, ze se to bude poustet co hodinu ale riskujete zahlceni.. anebo se pozadavek vypusti, kdyz dana vec se nestihla dokoncit v ramci sveho periodickeho okna?
Zprávička je o tom, že Amazon měl v automatických úlohách spouštěných na pozadí léta chybu race condition, která se projevila teď po letech a v důsledku způsobila chyby mnoha služeb v nejdůležitějším regionu AWS skoro na celý den. Argument „mně to tak léta funguje“ mi pod takovou zprávičkou připadá poněkud bezzubý.
Že je kód, kde by mohlo docházet k race condition, správně, se neověří tak, že ten kód dlouho poběží bezchybně. Ověříte ho jedině tak, že kód projdete, zjistíte, co dělá, jaké jsou předpoklady toho, co dělá, a ověříte, že všechny ty předpoklady jsou splněné.
Je dost možné, že to tak máte, protože zajistit na Linuxu pomocí zamykacího souboru, že proces poběží maximálně jednou, je jednoduché. (Zajistit, že poběží právě jednou, je úplně jiná disciplína.) Ale „běží to dlouho bez chyb“ to nedokazuje.
DNS byla jen prvni (kratsi, asi tri hodinova) vlna problemu. Pak nasledovaly dalsi dve, co incident natahly v souctu asi na patnact hodin - a ty byly fatalnejsi. Nejdriv DropletWorkflow Manager starajici se o "pronajmy" pro EC2 umlatil DynamoDB pozadavkama a kdyz se vyhrabali z tohoto, tak si umlatili prozmenu Network Manager starajici se o sitovani EC2 a balancery jako dusledek vyhazovaly instance, ktere kvuli tomu nebyly jeste dostupne. Aneb typicky to cele dopadalo na EC2 s jepicim zivotem.
Realne to ukazalo, ze AWS to nema moc nachystane na nejake disaster-recovery. Automatizace pocitala s beznym cvrkotem, ne s tim ze se to muze vysypat cele.
Snapshot Debugger (open-source nástroje).gcloud (Google Cloud CLI).Google Cloud je na tom lepe, ale AWS ted nepadlo "cele".
Padl jenom region us-east-1, ktere je default v menu, bezi v nem nektere single-homed interni AWS sluzby a AWS tam deployuje jako prvni. A je tam pulka internetu single-homed, takze manazment a zakaznici lepe chapou, kdyz mate vypadek jako vsichni 18h, nez kdyz mate hodinove spomaleni kvuli vypadku availability zony us-east-2a, o kterem nevi nikdo.
I v Googlu treba multiregion, kdyz chcete 5 devitek.
On je v praxi docela problém s negative ttl, tedy že si resolver pamatuje, že nějaký záznam na serveru neexistuje. Problém je, když někdo okopíruje SOA záznam, kde je negative nastaveno třeba na měsíc a klienti se zeptají dřív, než tam ten nový záznam skutečně je. To potom to dns někde funguje a jinde ne podle toho, kdo se kdy zeptal.
Tak ono to pole historicky melo vicero vyznamu (zminuje treba RFC2308)... a lidi jsou radi otroky minulosti, kdy casto SOA proste tupe kopiruji a vlastne nad temi cisly moc nedumaji :-) Takovy zonemaster ma na to i test, ktery hlida rozpeti od 300 do 86400 sekund a cokoliv mimo tento interval failne. Mimo to, resolver se tim ridit ani nemusi - realne to pole rika, jak dlouho muzu tu negativni odpoved drzet, ale je to optional. A treba v Bindu se to ridi pomoci max-ncache-ttl - kdy vychozi hodnota je 3 hodiny a vic nez tyden to ani nezkousne, v Unboundu je to podobne cache-max-negative-ttl, kde default je hodina. Aneb panem sani je ve finale tady spravce resolveru a ne spravce zony... :-)
Doporučuju tento kanál na YT: https://www.youtube.com/@kevinfaang
Je to plné podobných příběhů, poslední je o tom, jak zálohovací skript od HP smazal v LUSTRE FS desítky milionů souborů (prostě někdo změnil právě běžící bash skript).
Takhle fungují snad všechny Unixové shelly (bash, ash, ksh, zsh…). Je to jen o tom, že unixové shelly v době svého vzniku neměly na počítačích k dispozici mnoho RAM (~60. léta, tj. řádově kB). Celý skript do paměti načítají až interpretované jazyky (perl, python, ruby,…) nebo powershell, které parsují celou strukturu souboru (AST), ale to už počítače měly k dispozici řádově MB RAM (~90. léta).
AWS (US-EAST-1) DynamoDB Outage report explained in plain English.
1. A race condition in DynamoDB’s DNS automation deleted its main endpoint record.
2. This happened when 2 DNS systems updated Route 53 at the same time and removed all IPs.
3. DynamoDB went offline, and services that depend on it like EC2, Lambda, Redshift, and IAM stopped working.
4. EC2 could not launch new instances because it uses DynamoDB to track server state.
5. Network and Load Balancer systems failed next, causing connection errors across AWS.
6. Engineers fixed the DNS issue, full recovery took about 15 hours.
If you are a DevOps or Cloud Engineer, this is a great use case to understand.
A small DNS automation glitch can bring half the internet down.
V Cloudu ma kazda sluzba vlastni sit a CIDR rozsahem, ktery nemusi byt unikatni.
Private endpoint je IPcko ve vasi siti, ktere reprezentuje sluzbu z jine site. Je to IPcko pres ktere se NATuje pristup k jine sluzbe. V tomhle prepade to byla IPcka DNS serveru.
Jak se zda tak v jednu dobu bezely dva terraformy, ktere nejak manipulovaly s temi endpointy a vysledkem te operace bylo, ze vsechny DNS endpointy byly smazany.
Neni to tak davno co si nejaka firma odpalila DNS a pak zjistila, ze bez DNS nefunguje AD (v prepade AWS IAM) a bez access managementu se neda DNS opravit.
Postel jeste vytahnete ze zasuvky.. ale v rodine se stalo ze privreli auto vratama od garaze. A ted to ma false readingy na znacky a buhvi co a neda se s tim jezdit protoze to keca velice nevybiravym zpusobem do rizeni :D (mozna na asistencni systemy je pojistka.. ale zatim to vypada na odtah.. pritom takova pitomost).