Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄdLOST av sophiagworld

Denna artikel innehÄller nÄgra allmÀnna mallar som hjÀlper ingenjörer att arbeta med storskaliga tjÀnster som miljontals anvÀndare gör förfrÄgningar mot. 

Enligt författarens erfarenhet Àr detta ingen uttömmande lista, men verkligen effektiva rÄd. SÄ, lÄt oss börja.

Översatt med stöd av Mail.ru Cloud Solutions.

GrundnivÄ

ÅtgĂ€rderna nedan Ă€r relativt enkla att genomföra, men ger hög avkastning. Om du inte har vidtagit dessa tidigare, kommer du bli förvĂ„nad över de betydande förbĂ€ttringarna.

Infrastruktur som kod

Den första delen av rÄden handlar om att implementera infrastruktur som kod. Det innebÀr att du ska ha ett programmatic sÀtt att distribuera hela infrastrukturen. Det lÄter krÄngligt, men i sjÀlva verket pratar vi om följande kod:

Distribution av 100 virtuella maskiner

  • med Ubuntu
  • 2 GB RAM pĂ„ varje
  • de kommer att ha följande kod
  • med sĂ„dana parametrar

Du kan spÄra Àndringar i infrastrukturen och snabbt ÄtergÄ till dem med hjÀlp av ett versionshanteringssystem.

Modernisten inom mig sÀger att man kan anvÀnda Kubernetes/Docker för att göra allt ovanstÄende, och han har rÀtt.

Dessutom kan automatisering göras med hjÀlp av Chef, Puppet eller Terraform.

Kontinuerlig integration och leverans

För att skapa en skalbar tjĂ€nst Ă€r det viktigt att ha en bygg- och testpipeline för varje pull-request. Även om testet Ă€r det enklaste, sĂ€kerstĂ€ller det Ă„tminstone att koden du distribuerar kompilera.

Varje gÄng i detta steg svarar du pÄ frÄgan: kommer min byggnation att kompilera och klara tester, Àr den giltig? Det kan verka som en lÄg ribba, men det löser mÄnga problem.

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Det finns inget mer vackert Àn att se dessa bockar

För denna teknik kan du övervÀga Github, CircleCI eller Jenkins.

Belastningsbalanserare

SÄ, vi vill köra en belastningsbalanserare för att omdirigera trafik och sÀkerstÀlla jÀmn belastning pÄ alla noder eller tjÀnstens funktion i fall av fel:

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Belastningsbalanserare hjÀlper vanligtvis till att fördela trafiken. BÀsta praxis Àr att anvÀnda redundanta balansörer, sÄ att du inte har en enda felpunkt.

Ofta konfigureras belastningsbalanserare i den molnplattform du anvÀnder.

RayID, korrelations-ID eller UUID för förfrÄgningar

Har du nÄgonsin stött pÄ ett fel i en applikation med ett meddelande som liknar detta: «NÄgot gick fel. Spara detta ID och skicka det till vÄr supporttjÀnst»?

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Ett unikt identifierare, correlation ID, RayID eller nĂ„gon av varianterna – Ă€r en unik identifierare som gör det möjligt att spĂ„ra en begĂ€ran under hela dess livscykel. Detta gör det möjligt att följa hela vĂ€gen för begĂ€ran i loggarna.

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
AnvÀndaren skickar en begÀran till system A, sedan kontaktar A B, som kontaktar C, sparar i X, och sedan returneras begÀran till A.

Om du anslöt dig fjÀrrmÀssigt till virtuella maskiner och försökte följa vÀgen för begÀran (och manuellt koppla samman vilka anrop som görs), skulle du bli galen. Att ha en unik identifierare gör livet mycket enklare. Det Àr en av de enklaste sakerna att göra för att spara tid nÀr tjÀnsten vÀxer.

MedelnivÄ

HÀr Àr tipsen svÄrare Àn de tidigare, men rÀtt verktyg gör uppgiften enklare, vilket ger avkastning Àven för smÄ och medelstora företag.

Centraliserad loggning

Grattis! Du har implementerat 100 virtuella maskiner. NÀsta dag kommer VD:n och klagar pÄ ett fel han fick under test av tjÀnsten. Han rapporterar den relevanta identifierare som vi pratade om tidigare, men du mÄste blÀddra igenom loggar för 100 maskiner för att hitta den som orsakade felet. Och du mÄste hitta den innan morgondagens presentation.

Även om det lĂ„ter som ett roligt Ă€ventyr, Ă€r det bĂ€ttre att se till att du har möjlighet att söka i alla loggar frĂ„n en plats. Jag löste centraliseringsfrĂ„gan med den inbyggda funktionaliteten i ELK-stacken: hĂ€r stöds insamling av loggar med sökmöjligheter. Detta kommer verkligen att hjĂ€lpa till att lösa problemet med att hitta en specifik logg. Som en bonus kan du skapa diagram och liknande roliga saker.

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Funktionalitet i ELK-stacken

Övervakningsagenter

Nu nÀr din tjÀnst har satts i drift, mÄste du sÀkerstÀlla att den fungerar utan avbrott. Det bÀsta sÀttet att göra detta Àr att köra flera agenter, som arbetar parallellt och kontrollerar att den fungerar och att grundlÀggande operationer utförs.

Vid detta stadium kontrollerar du att Den körda versionen fungerar bra och arbetar normalt..

För smÄ och medelstora projekt rekommenderar jag Postman för att övervaka och dokumentera API:er. Men generellt sett bör du bara se till att du har ett sÀtt att veta nÀr det intrÀffar ett fel och fÄ snabb avisering.

Automatisk skalning beroende pÄ belastning.

Det Àr vÀldigt enkelt. Om du har en virtuell maskin som hanterar begÀrningar och den nÀrmar sig att 80 % av minnet Àr upptaget, kan du antingen öka dess resurser eller lÀgga till fler virtuella maskiner i klustret. Automatisk utförande av dessa operationer Àr utmÀrkt för flexibel kapacitet anpassning under belastning. Men du mÄste alltid vara försiktig med hur mycket pengar du spenderar och sÀtta rimliga grÀnser.

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
I de flesta molntjÀnster kan du stÀlla in automatisk skalning genom att anvÀnda fler servrar eller kraftfullare servrar.

Experimentsystem.

Ett bra sÀtt att sÀkert rulla ut uppdateringar Àr att kunna testa nÄgot för 1 % av anvÀndarna under en timme. Du har sÀkert sett sÄdana mekanismer i aktion. Till exempel visar Facebook delar av publiken en annan fÀrg eller Àndrar fontstorleken för att se hur anvÀndarna uppfattar Àndringar. Detta kallas A/B-testning.

Även lanseringen av en ny funktion kan startas som ett experiment, för att sedan avgöra hur den ska slĂ€ppas. Dessutom fĂ„r du möjlighet att "Ă„terkalla" eller Ă€ndra konfigurationen i farten med avseende pĂ„ en funktion som orsakar degradering av din tjĂ€nst.

Avancerad nivÄ.

HÀr Àr rÄd som Àr ganska svÄra att implementera. Du kommer sannolikt att behöva lite mer resurser, sÄ det kan vara svÄrt för ett litet eller medelstort företag att hantera detta.

BlÄgröna lanseringar.

Detta kallar jag en "Erlang-metod" för lansering. Erlang blev allmÀnt anvÀnt nÀr telefonföretagen dök upp. För att dirigera telefonsamtal började man anvÀnda mjukvarubaserade vÀxlingssystem. Huvuduppgiften för mjukvaran i dessa vÀxlingssystem var att inte slÀppa samtal under systemuppgradering. Erlang har ett utmÀrkt sÀtt att ladda ett nytt modul utan att krascha den tidigare.

Det hÀr steget beror pÄ tillgÄngen till en lastbalanserare. Anta att du har version N av din programvara och sedan vill du rulla ut version N+1. 

Du kunde bara stoppa tjÀnsten och rulla ut nÀsta version vid den tidpunkt du anser vara lÀmplig för dina anvÀndare, och fÄ en viss nedtid. Men anta att du har verkligen strikta SLA-villkor. SÄ, en SLA pÄ 99,99 % betyder att du kan vara offline bara i 52 minuter per Är.

Om du verkligen vill uppnÄ sÄdana nivÄer, behöver du tvÄ distributioner samtidigt: 

  • den som finns just nu (N);
  • nĂ€sta version (N+1). 

Du instruerar lastbalanseraren att omdirigera en procentandel av trafiken till den nya versionen (N+1), medan du sjÀlv aktivt övervakar regressioner.

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
HÀr har vi en grön distribution N som fungerar normalt. Vi försöker övergÄ till nÀsta version av denna distribution

Först skickar vi en riktigt liten test för att se om vÄr distribution N+1 fungerar med en liten mÀngd trafik:

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Slutligen har vi en uppsÀttning automatiska kontroller som vi slutligen kör tills vÄr distribution Àr avslutad. Om du Àr vÀldigt, vÀldigt försiktig kan du ocksÄ behÄlla din distribution N för alltid för en snabb ÄtergÄng vid en dÄlig regression:

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Om du vill gÄ till en Ànnu mer avancerad nivÄ, lÄt allt i den blÄgröna distributionen utföras automatiskt.

UpptÀckta anomalier och automatisk avhjÀlpande

Med centralt loggande och en bra logghantering kan du redan sÀtta högre mÄl. Till exempel att proaktivt förutsÀga fel. PÄ övervakningssystem och i loggar följs funktioner och olika diagram byggs - och man kan förutsÀga vad som kommer gÄ fel i förvÀg:

Hur man sover lugnt nÀr man har en molntjÀnst: grundlÀggande arkitektoniska rÄd
Med anomalidetektering börjar du att studera vissa ledtrÄdar som tjÀnsten ger. Till exempel kan en ökning av CPU-belastningen indikera att hÄrddisken hÄller pÄ att gÄ sönder, och en ökning av antalet förfrÄgningar kan betyda att det Àr dags att skalera. SÄdan statistik gör tjÀnsten proaktiv.

Genom att fÄ sÄdan analytisk information kan du skala upp pÄ alla dimensioner, proaktivt och reaktivt Àndra egenskaperna hos maskiner, databaser, anslutningar och andra resurser.

Det Àr allt!

Denna prioriteringslista kommer att befria dig frÄn mÄnga problem nÀr du höjer din molntjÀnst.

Författaren av den ursprungliga artikeln inbjuder lÀsare att lÀmna sina kommentarer och göra Àndringar. Artikeln sprids som öppen kÀllkod, pull requests accepteras av författaren pÄ Github.

Vad mer att lÀsa om Àmnet:

  1. Go och CPU-cache
  2. Kubernetes i piratanda med en implementeringsmall
  3. VÄr kanal Om Kubernetes pÄ Telegram

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster