Jsou 4 devítky dost dobré? Pokud ano, pak si musíte přečíst toto

Začněme tím, co přesně 4 9 znamená:

Čtyři devítky jsou 4,38 minuty výpadku za měsíc nebo 52,56 minuty za rok.

To je pravděpodobně více než přijatelné pro téměř všechny služby na internetu, ne všechny, ale téměř všechny. Takže výpadek vašeho e-mailu na 4 minuty každý měsíc není konec světa. Pravděpodobně byste si toho ani nevšimli. Než byste se šli podívat na Twitter, jestli jste to jen vy, nebo ne, už by zase fungoval.

Typicky pro dosažení dobré doby provozuschopnosti uvažujeme o přidání redundance a replikace, takže pokud dojde k výpadku serveru, máte už spuštěné jiné, které ho okamžitě převezmou. Problémem tohoto přístupu je, že je komplikovaný a drahý. Potřebujete více serverů, obvykle 3 nebo více jak pro aplikaci, tak pro databázi, a navíc před nimi budete potřebovat load balancer. A pak musíte všechny tyto stroje spravovat/monitorovat.

A s novým trendem mikroslužeb, kdy lidé rozdělují své aplikace na menší služby, musíte tato složitá nastavení opakovat pro každou službu.

Pokud vytváříte mikroslužbu, čím méně „věcí“ k jejímu provozu potřebujete, tím lépe. Nechcete přece jít nastavovat novou replikovanou databázi pokaždé, když chcete hodit dohromady malé API, že ne? Chci být super produktivní, chci být schopen rychle vytvořit službu, aniž bych se musel zabývat všemi těmi složitými, čas ztrácejícími ops věcmi.

Takže jsem začal přemýšlet: „No, co když existuje způsob, jak být… dostatečně spolehlivý?“. Myslím tím, kolik z věcí, které vytváříte, musí být skutečně vysoce dostupné? Kolik služeb si nemůže dovolit tu a tam na pár minut vypadnout nebo jednou za měsíc přijít o malý kousek dat kvůli fatálnímu selhání serveru?“

Hádám, že není moc služeb, které by si nemohly dovolit přijít o velmi malé množství dat a mít pár minut výpadku ročně. I kdybyste ze své služby dělali architekta, pravděpodobně budete mít výpadky tak jako tak z nějakého důvodu. Tak proč to prostě nezjednodušit.

Nejprve pár čísel: Řekněme, že v průměru selže instance AWS EC2 každých šest měsíců. Myslím, že v dnešní době je to mnohem méně, ale nikdo to pořádně neví, takže budeme konzervativní. To nám dává přibližně 26,5 minuty na obnovení aplikace každých šest měsíců a zároveň 4 9’s uptime.

Tady je návod, jak můžete získat 4 9’s na jednom stroji.

Krok 1) Spuštění serveru, nasazení aplikace a změna skriptu DNS

První věc, kterou potřebujeme, je jednoduchý skript, který dokáže spustit novou instanci, spustit aplikaci (Docker to usnadňuje) a změnit DNS tak, aby ukazoval na novou instanci. V tomto příspěvku se nebudu věnovat podrobnostem tohoto kroku, ale pokud dokážete vytvořit jednořádkový skript, který tyto kroky zvládne, jste v pohodě. Selhání služby: spustit skript.

Krok 2) Databáze s automatickým zálohováním a automatickým obnovením

Pokud dokážete zajistit, že máte velmi čerstvé zálohy databáze a ty jsou uloženy na snadno dostupném místě, jako je S3, pak můžete vytvořit aplikaci, která se dokáže sama obnovit při spuštění. Použití vestavěné databáze vše zjednodušuje, protože stačí nasadit jedinou věc: vaši aplikaci.

V poslední době hodně používám BoltDB, hlavně proto, že píšu hodně v Go a Bolt je jednoduchá vestavěná databáze dostupná v balíčku Go, který používáte jako jakoukoli jinou závislost. Nemusíte tedy provozovat samostatnou databázi, ke které se připojujete a musíte řešit její udržování v chodu. Pouze používáte knihovnu a data se zapisují na váš lokální disk.

No a to je také problém Boltu, data jsou pouze na vašem lokálním počítači spolu s vaší aplikací. Pokud stroj selže, přijdeš o všechna data.

No a co takhle dělat zálohu každou minutu nebo dvě? A mít možnost automatické obnovy z této zálohy při spuštění aplikace?

Vytvořil jsem lib, která právě toto dělá, jmenuje se Bolt Backup a pouhou změnou inicializačního řádku BoltDb automaticky zálohuje vaši databázi na S3 a ještě lépe, když spustíte aplikaci, obnoví se z poslední zálohy.

Můžete to snadno otestovat tak, že přidáte data do databáze Bolt, zabijete aplikaci, odstraníte datový soubor Bolt a pak aplikaci znovu spustíte. Bude pokračovat tam, kde skončila, bez ohledu na to, kde aplikaci znovu spustíte.

Tady je příklad aplikace, která toto používá a kterou si můžete vyzkoušet: https://github.com/treeder/bolt-backup/tree/master/example

Závěr

Pomocí výše uvedených jednoduchých konceptů můžete svou aplikaci obnovit za méně než 26 minut, a dosáhnout tak doby provozu 4 9 nebo lepší. Jen se ujistěte, že je vše automatizováno pomocí spouštěcího skriptu a automatického obnovení databáze, jako je výše zmíněná knihovna Bolt Backup.

Cena jednoduchosti se někdy může ztratit, když se všichni nadchneme pro „webové měřítko“, ale často si můžete ušetřit spoustu času a trápení, pokud se budete držet jednoduchosti. A také spoustu peněz.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.