Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipyLOST by sophiagworld

Tento článok obsahuje niektoré bežné vzory, ktoré pomáhajú inžinierom pracovať s rozsiahlymi službami, ku ktorým majú prístup milióny používateľov. 

Podľa skúseností autora to nie je vyčerpávajúci zoznam, ale skutočne efektívna poradiť. Takže, začnime.

Preložené s podporou Cloudové riešenia Mail.ru.

Prvá úroveň

Opatrenia uvedené nižšie sú relatívne jednoduché na implementáciu, ale majú veľký vplyv. Ak ste ich ešte nevyskúšali, budete prekvapení výraznými vylepšeniami.

Infraštruktúra ako kód

Prvou časťou rady je implementovať infraštruktúru ako kód. To znamená, že musíte mať programový spôsob nasadenia celej infraštruktúry. Znie to komplikovane, ale v skutočnosti hovoríme o nasledujúcom kóde:

Nasadenie 100 virtuálnych strojov

  • s Ubuntu
  • 2 GB RAM každý
  • budú mať nasledujúci kód
  • s týmito parametrami

Pomocou správy verzií môžete sledovať zmeny vo svojej infraštruktúre a rýchlo sa k nim vrátiť.

Modernista vo mne hovorí, že na všetky vyššie uvedené činnosti môžete použiť Kubernetes/Docker a má pravdu.

Okrem toho môžete zabezpečiť automatizáciu pomocou Chef, Puppet alebo Terraform.

Nepretržitá integrácia a dodávka

Na vytvorenie škálovateľnej služby je dôležité mať zostavený a testovací kanál pre každú požiadavku na stiahnutie. Aj keď je test veľmi jednoduchý, prinajmenšom zabezpečí, že sa vami nasadený kód skompiluje.

Zakaždým v tejto fáze odpoviete na otázku: bude moja zostava skompilovať a prejsť testami, je platná? Môže sa to zdať ako nízka latka, no rieši to množstvo problémov.

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Nie je nič krajšie ako vidieť tieto kliešte

Pre túto technológiu môžete hodnotiť Github, CircleCI alebo Jenkins.

Vyrovnávače zaťaženia

Chceme teda spustiť nástroj na vyvažovanie zaťaženia, aby sme presmerovali prevádzku a zabezpečili rovnaké zaťaženie všetkých uzlov alebo aby služba pokračovala v prípade zlyhania:

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Nástroj na vyvažovanie zaťaženia zvyčajne robí dobrú prácu pri rozdeľovaní návštevnosti. Najlepšou praxou je prevážiť, aby ste nemali jediný bod zlyhania.

Zvyčajne sú nástroje na vyrovnávanie zaťaženia nakonfigurované v cloude, ktorý používate.

RayID, korelačné ID alebo UUID pre požiadavky

Stretli ste sa niekedy s chybou aplikácie so správou ako je táto: "Niečo sa pokazilo. Uložte si toto ID a pošlite ho nášmu tímu podpory"?

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Jedinečný identifikátor, korelačné ID, RayID alebo niektorá z variácií je jedinečný identifikátor, ktorý vám umožňuje sledovať požiadavku počas jej životného cyklu. To vám umožní sledovať celú cestu žiadosti v protokoloch.

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Používateľ zadá požiadavku do systému A, potom A kontaktuje B, ktorý kontaktuje C, uloží ju do X a potom sa požiadavka vráti A

Ak by ste sa na diaľku pripojili k virtuálnym počítačom a pokúsili sa vysledovať cestu požiadavky (a manuálne korelovať, ktoré hovory sa uskutočňujú), zbláznili by ste sa. Jedinečný identifikátor výrazne uľahčuje život. Toto je jedna z najjednoduchších vecí, ktoré môžete urobiť, aby ste ušetrili čas, keď vaša služba rastie.

Priemerná úroveň

Rady sú tu komplexnejšie ako predchádzajúce, ale správne nástroje uľahčujú úlohu a poskytujú návratnosť investície aj malým a stredným spoločnostiam.

Centralizované protokolovanie

Gratulujem! Nasadili ste 100 virtuálnych strojov. Na druhý deň príde generálny riaditeľ a sťažuje sa na chybu, ktorú dostal pri testovaní služby. Hlási zodpovedajúce ID, o ktorom sme hovorili vyššie, ale budete si musieť prezrieť protokoly 100 počítačov, aby ste našli ten, ktorý spôsobil pád. A treba ho nájsť pred zajtrajšou prezentáciou.

Aj keď to znie ako zábavné dobrodružstvo, je najlepšie sa uistiť, že máte možnosť prehľadávať všetky časopisy na jednom mieste. Problém centralizácie protokolov som vyriešil pomocou vstavanej funkcionality zásobníka ELK: podporuje vyhľadávanie protokolov. To skutočne pomôže vyriešiť problém s hľadaním konkrétneho časopisu. Ako bonus môžete vytvárať grafy a iné podobné zábavné veci.

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Funkcia zásobníka ELK

Monitorovací agenti

Teraz, keď je vaša služba v prevádzke, musíte sa uistiť, že funguje hladko. Najlepší spôsob, ako to urobiť, je spustiť niekoľko agentov, ktoré pracujú paralelne a kontrolujú, či funguje a či sa vykonávajú základné operácie.

V tomto bode si to overte bežiaca konštrukcia sa cíti dobre a funguje dobre.

Pre malé až stredne veľké projekty odporúčam Postman na monitorovanie a dokumentáciu API. Vo všeobecnosti sa však chcete len uistiť, že máte spôsob, ako zistiť, kedy došlo k výpadku, a byť včas informovaní.

Automatické škálovanie v závislosti od zaťaženia

Je to veľmi jednoduché. Ak máte požiadavky na obsluhu virtuálneho počítača a blíži sa k 80 % využitiu pamäte, môžete buď zvýšiť jeho zdroje, alebo pridať ďalšie virtuálne počítače do klastra. Automatické vykonávanie týchto operácií je vynikajúce pre pružné zmeny výkonu pri zaťažení. Vždy by ste si však mali dávať pozor na to, koľko peňazí miniete a stanoviť si rozumné limity.

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Pri väčšine cloudových služieb ho môžete nakonfigurovať na automatické škálovanie pomocou viacerých serverov alebo výkonnejších serverov.

Experimentálny systém

Dobrým spôsobom, ako bezpečne spustiť aktualizácie, je mať možnosť hodinu testovať niečo pre 1 % používateľov. Takéto mechanizmy ste, samozrejme, videli v akcii. Facebook napríklad zobrazuje časti publika inú farbu alebo mení veľkosť písma, aby videl, ako používatelia vnímajú zmeny. Toto sa nazýva A/B testovanie.

Dokonca aj vydanie novej funkcie môže byť spustené ako experiment a potom sa určí, ako ju vydať. Získate tiež možnosť „zapamätať si“ alebo zmeniť konfiguráciu za chodu na základe funkcie, ktorá spôsobuje degradáciu vašej služby.

Pokročilá úroveň

Tu sú tipy, ktoré je dosť ťažké implementovať. Pravdepodobne budete potrebovať trochu viac zdrojov, takže malá alebo stredná spoločnosť to bude mať ťažké zvládnuť.

Modro-zelené nasadenia

To je to, čo nazývam "Erlang" spôsob rozvíjania. Erlang sa stal široko používaným, keď sa objavili telefónne spoločnosti. Na smerovanie telefónnych hovorov sa začali používať softvérové ​​spínače. Hlavným účelom softvéru na týchto prepínačoch bolo neprerušovať hovory počas aktualizácie systému. Erlang má pekný spôsob načítania nového modulu bez zrútenia predchádzajúceho.

Tento krok závisí od prítomnosti vyrovnávača zaťaženia. Predstavme si, že máte verziu N svojho softvéru a potom chcete nasadiť verziu N+1. 

Vy mohli by sme jednoducho zastavte službu a zaveďte ďalšiu verziu v čase, ktorý bude vyhovovať vašim používateľom, a dôjde k výpadkom. Ale predpokladajme, že áno naozaj prísne podmienky SLA. Takže SLA 99,99 % znamená, že môžete prejsť do režimu offline iba o 52 minút ročne.

Ak naozaj chcete dosiahnuť takéto ukazovatele, potrebujete dve nasadenia súčasne: 

  • ten, ktorý je práve teraz (N);
  • ďalšia verzia (N+1). 

Vyrovnávaču zaťaženia poviete, aby presmeroval určité percento návštevnosti na novú verziu (N+1), zatiaľ čo vy aktívne monitorujete regresie.

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Tu máme zelené nasadenie N, ktoré funguje dobre. Snažíme sa prejsť na ďalšiu verziu tohto nasadenia

Najprv odošleme naozaj malý test, aby sme zistili, či naše nasadenie N+1 funguje pri malom množstve návštevnosti:

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Nakoniec máme sadu automatických kontrol, ktoré nakoniec spustíme až do dokončenia nasadenia. Ak ty veľmi veľmi pozor, svoje nasadenie N môžete tiež navždy uložiť pre rýchle vrátenie späť v prípade zlej regresie:

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Ak chcete prejsť na ešte pokročilejšiu úroveň, nechajte všetko v modro-zelenom nasadení bežať automaticky.

Detekcia anomálií a automatické zmiernenie

Vzhľadom na to, že máte centralizované protokolovanie a dobrý zber protokolov, môžete si už stanoviť vyššie ciele. Napríklad proaktívne predvídať zlyhania. Funkcie sa sledujú na monitoroch a v protokoloch a vytvárajú sa rôzne diagramy - a môžete vopred predpovedať, čo sa pokazí:

Ako pokojne spať, keď máte cloudovú službu: základné architektonické tipy
Po zistení anomálií začnete skúmať niektoré stopy, ktoré služba poskytuje. Napríklad prudký nárast zaťaženia procesora môže naznačovať, že pevný disk zlyháva, zatiaľ čo prudký nárast požiadaviek môže naznačovať, že je potrebné ho zväčšiť. Tento druh štatistických údajov vám umožňuje, aby bola služba proaktívna.

Pomocou týchto poznatkov môžete škálovať v akejkoľvek dimenzii a proaktívne a reaktívne meniť charakteristiky strojov, databáz, pripojení a iných zdrojov.

To je všetko!

Tento zoznam priorít vám ušetrí veľa problémov, ak zriaďujete cloudovú službu.

Autor pôvodného článku vyzýva čitateľov, aby zanechali svoje komentáre a vykonali zmeny. Článok je distribuovaný ako open source, žiadosť o stiahnutie od autora prijíma na Github.

Čo si ešte prečítať k téme:

  1. Go a CPU cache
  2. Kubernetes v duchu pirátstva so šablónou na implementáciu
  3. Náš kanál Okolo Kubernetes v telegrame

Zdroj: hab.com

Pridať komentár