Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipyLOST by sophiagworld

Tento článek obsahuje některé běžné vzory, které inženýrům pomohou pracovat s rozsáhlými službami, ke kterým mají přístup miliony uživatelů. 

Podle autorových zkušeností to není vyčerpávající výčet, ale skutečně efektivní poradit. Takže, začněme.

Přeloženo s podporou Cloudová řešení Mail.ru.

První úroveň

Níže uvedená opatření se poměrně snadno zavádějí, ale mají velký dopad. Pokud jste je ještě nezkoušeli, budete překvapeni výraznými vylepšeními.

Infrastruktura jako kód

První částí rady je implementovat infrastrukturu jako kód. To znamená, že musíte mít programový způsob nasazení celé infrastruktury. Zní to složitě, ale ve skutečnosti mluvíme o následujícím kódu:

Nasazení 100 virtuálních strojů

  • s Ubuntu
  • 2 GB RAM každý
  • budou mít následující kód
  • s těmito parametry

Pomocí správy verzí můžete sledovat změny ve vaší infrastruktuře a rychle se k nim vrátit.

Modernista ve mně říká, že ke všemu výše uvedenému můžete použít Kubernetes/Docker, a má pravdu.

Navíc můžete zajistit automatizaci pomocí Chef, Puppet nebo Terraform.

Nepřetržitá integrace a dodávka

Chcete-li vytvořit škálovatelnou službu, je důležité mít sestavovací a testovací kanál pro každý požadavek na stažení. I když je test velmi jednoduchý, alespoň zajistí, že se vámi nasazený kód zkompiluje.

Pokaždé v této fázi odpovíte na otázku: zkompiluje se moje sestava a projde testy, je platná? Může se to zdát jako nízká laťka, ale řeší to spoustu problémů.

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Není nic krásnějšího, než vidět tato klíšťata

Pro tuto technologii můžete hodnotit Github, CircleCI nebo Jenkins.

Load Balancery

Chceme tedy spustit nástroj pro vyrovnávání zatížení, který přesměruje provoz a zajistí stejné zatížení všech uzlů nebo pokračování služby v případě selhání:

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Load Balancer obvykle dělá dobrou práci při distribuci provozu. Nejlepší praxí je převážit, abyste neměli jediný bod selhání.

Obvykle jsou nástroje pro vyrovnávání zatížení nakonfigurovány v cloudu, který používáte.

RayID, korelační ID nebo UUID pro požadavky

Setkali jste se někdy s chybou aplikace se zprávou jako je tato: "Něco se pokazilo. Uložte toto ID a odešlete jej našemu týmu podpory"?

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Jedinečný identifikátor, korelační ID, RayID nebo jakákoliv z variant je jedinečný identifikátor, který vám umožňuje sledovat požadavek v průběhu jeho životního cyklu. To vám umožní sledovat celou cestu požadavku v protokolech.

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Uživatel zadá požadavek na systém A, poté A kontaktuje B, který kontaktuje C, uloží jej do X a poté se požadavek vrátí zpět do A.

Pokud byste se vzdáleně připojili k virtuálním strojům a pokusili se vysledovat cestu požadavku (a ručně korelovat, která volání jsou prováděna), zbláznili byste se. Díky jedinečnému identifikátoru je život mnohem jednodušší. Toto je jedna z nejjednodušších věcí, které můžete udělat, abyste ušetřili čas, když vaše služba roste.

Průměrná úroveň

Zdejší rady jsou komplexnější než předchozí, ale správné nástroje tento úkol usnadňují a poskytují návratnost investice i malým a středním společnostem.

Centralizované protokolování

Gratulujeme! Nasadili jste 100 virtuálních počítačů. Druhý den přijde generální ředitel a stěžuje si na chybu, kterou dostal při testování služby. Hlásí odpovídající ID, o kterém jsme mluvili výše, ale budete muset prozkoumat protokoly 100 strojů, abyste našli ten, který způsobil pád. A to je potřeba najít před zítřejší prezentací.

I když to zní jako zábavné dobrodružství, je nejlepší se ujistit, že máte možnost prohledávat všechny časopisy na jednom místě. Problém centralizace protokolů jsem vyřešil pomocí vestavěné funkce zásobníku ELK: podporuje prohledávatelné shromažďování protokolů. To skutečně pomůže vyřešit problém s hledáním konkrétního časopisu. Jako bonus můžete vytvářet grafy a další podobné zábavné věci.

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Funkce zásobníku ELK

Monitorovací agenti

Nyní, když je vaše služba spuštěna, musíte se ujistit, že běží hladce. Nejlepší způsob, jak toho dosáhnout, je spustit několik agenti, které pracují paralelně a kontrolují, že funguje a jsou prováděny základní operace.

V tomto okamžiku to zkontrolujte běžící konstrukce působí dobře a funguje dobře.

Pro malé až středně velké projekty doporučuji Postman pro monitorování a dokumentaci API. Obecně se ale chcete jen ujistit, že máte způsob, jak zjistit, kdy k výpadku došlo, a být včas informováni.

Automatické škálování v závislosti na zatížení

Je to velmi jednoduché. Pokud máte požadavky na obsluhu virtuálního počítače a blíží se 80% využití paměti, můžete buď zvýšit jeho prostředky, nebo přidat další virtuální počítače do clusteru. Automatické provádění těchto operací je vynikající pro pružné změny výkonu při zatížení. Vždy byste si ale měli dávat pozor na to, kolik peněz utrácíte, a stanovovat si rozumné limity.

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
U většiny cloudových služeb jej můžete nakonfigurovat tak, aby se automaticky škáloval pomocí více serverů nebo výkonnějších serverů.

Experimentální systém

Dobrým způsobem, jak bezpečně zavést aktualizace, je mít možnost hodinu testovat něco pro 1 % uživatelů. Takové mechanismy jste samozřejmě viděli v akci. Facebook například zobrazuje části publika jinou barvu nebo mění velikost písma, aby viděl, jak uživatelé změny vnímají. Toto se nazývá A/B testování.

Dokonce i vydání nové funkce lze spustit jako experiment a poté určit, jak ji vydat. Získáte také možnost „zapamatovat si“ nebo změnit konfiguraci za chodu na základě funkce, která způsobuje degradaci vaší služby.

Pokročilá úroveň

Zde jsou tipy, které je poměrně obtížné implementovat. Pravděpodobně budete potřebovat trochu více zdrojů, takže malá nebo střední společnost to bude mít těžké zvládnout.

Modro-zelené nasazení

To je to, čemu říkám "Erlang" způsob rozvíjení. Erlang se stal široce používaným, když se objevily telefonní společnosti. Pro směrování telefonních hovorů se začaly používat softswitche. Hlavním účelem softwaru na těchto přepínačích bylo nepřerušovat hovory během upgradů systému. Erlang má pěkný způsob, jak načíst nový modul, aniž by došlo k selhání předchozího.

Tento krok závisí na přítomnosti load balanceru. Představme si, že máte verzi N svého softwaru a poté chcete nasadit verzi N+1. 

Vy mohli bychom prostě zastavte službu a zaveďte další verzi v čase, který bude vyhovovat vašim uživatelům, a dojde k výpadkům. Ale předpokládejme, že ano doopravdy přísné podmínky SLA. SLA 99,99 % tedy znamená, že můžete přejít do režimu offline pouze o 52 minut ročně.

Pokud opravdu chcete dosáhnout takových ukazatelů, potřebujete dvě nasazení současně: 

  • ten, který je právě teď (N);
  • další verze (N+1). 

Přikážete nástroji pro vyrovnávání zatížení, aby přesměroval určité procento provozu na novou verzi (N+1), zatímco vy aktivně sledujete regrese.

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Zde máme zelené nasazení N, které funguje dobře. Snažíme se přejít na další verzi tohoto nasazení

Nejprve odešleme opravdu malý test, abychom zjistili, zda naše nasazení N+1 funguje s malým objemem provozu:

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Nakonec máme sadu automatických kontrol, které nakonec spustíme, dokud nebude naše nasazení dokončeno. jestli ty velmi velmi pozor, své nasazení N můžete také navždy uložit pro rychlé vrácení zpět v případě špatné regrese:

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Pokud chcete přejít na ještě pokročilejší úroveň, nechte vše v modrozeleném nasazení běžet automaticky.

Detekce anomálií a automatické zmírňování

Vzhledem k tomu, že máte centralizované protokolování a dobrý sběr protokolů, můžete si již stanovit vyšší cíle. Například proaktivně předvídat selhání. Funkce jsou sledovány na monitorech a v protokolech a jsou sestavovány různé diagramy - a můžete předem předvídat, co se pokazí:

Jak se dobře vyspat, když máte cloudovou službu: základní architektonické tipy
Jakmile jsou zjištěny anomálie, začnete zkoumat některá vodítka, která služba poskytuje. Například špička v zátěži procesoru může znamenat, že pevný disk selhává, zatímco špička v žádostech může znamenat, že je třeba zvětšit. Tento druh statistických údajů vám umožňuje, aby byla služba proaktivní.

S těmito poznatky můžete škálovat v jakékoli dimenzi a proaktivně a reaktivně měnit charakteristiky strojů, databází, připojení a dalších zdrojů.

To je ono!

Tento seznam priorit vám ušetří spoustu problémů, pokud vytváříte cloudovou službu.

Autor původního článku vyzývá čtenáře, aby zanechali své komentáře a provedli změny. Článek je distribuován jako open source, požadavky autora na stažení přijímá na Github.

Co si ještě přečíst k tématu:

  1. Go a CPU cache
  2. Kubernetes v pirátském duchu se šablonou pro implementaci
  3. Náš kanál Kolem Kubernetes v Telegramu

Zdroj: www.habr.com

Přidat komentář