Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske rådLOST by sophiagworld

I denne artikel samles nogle almindelige skabeloner, der hjælper ingeniører med at arbejde med store tjenester, som millioner af brugere anmoder om. 

Ud fra forfatterens erfaring er dette ikke en udtømmende liste, men faktisk effektive råd. Lad os komme i gang.

Oversat med støtte fra Mail.ru Cloud Solutions.

Basisniveau

De nedenfor nævnte foranstaltninger er forholdsvis nemme at implementere, men giver et højt afkast. Hvis du ikke har foretaget dem før, vil du blive overrasket over de betydelige forbedringer.

Infrastruktur som kode

Den første del af rådene handler om at implementere infrastruktur som kode. Det betyder, at du skal have en programmeret måde at implementere hele infrastrukturen på. Det lyder komplekst, men vi taler faktisk om følgende kode:

Implementering af 100 virtuelle maskiner

  • med Ubuntu
  • 2 GB RAM på hver
  • de vil have følgende kode
  • med sådanne parametre

Du kan spore ændringer i infrastrukturen og hurtigt vende tilbage til dem med et versionsstyringssystem.

Den modernistiske del af mig siger, at man kan bruge Kubernetes/Docker til at gøre alt ovenstående, og det har ret.

Desuden kan automatiseringen sikres med Chef, Puppet eller Terraform.

Kontinuerlig integration og levering

For at skabe en skalerbar tjeneste er det vigtigt at have en byggetestpipeline for hver pull-request. Selv hvis testen er den simpleste, garanterer den i det mindste, at den kode, du implementerer, kan kompileres.

Hver gang på dette punkt stiller du spørgsmålet: kan min bygning kompilere og bestå testene, er den gyldig? Det kan virke som en lav tærskel, men det løser mange problemer.

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Der er intet bedre end at se disse ikoner

For denne teknologi kan du overveje Github, CircleCI eller Jenkins.

Lastbalancere

Så vi ønsker at starte en lastbalancer for at omdirigere trafik og sikre jævn belastning på alle noder eller tjenester i tilfælde af fejl:

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Lastbalanceren hjælper typisk godt med at fordele trafikken. Den bedste praksis er redundans i lastbalanceringen, så du ikke har et enkelt fejlpunkt.

Som regel konfigureres lastbalancere i den cloud, du bruger.

RayID, korrelations-ID eller UUID for forespørgsler

Har du nogensinde stødt på en fejl i en applikation med en meddelelse som den følgende: «Noget gik galt. Gem denne ID og send den til vores supporttjeneste»?

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
En unik identifikator, korrelations-ID, RayID eller en hvilken som helst af varianterne — er en unik identifikator, der gør det muligt at spore en forespørgsel gennem dens livscyklus. Dette gør det muligt at følge hele vejen for forespørgslen i loggene.

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Brugeren sender en forespørgsel til system A, derefter kontakter A B, som kontakter C, gemmer i X, og så returneres forespørgslen til A

Hvis du skulle oprette en fjernforbindelse til virtuelle maskiner og forsøge at spore vejen for forespørgslen (og manuelt sammenligne hvilke opkald der sker), ville du blive sindssyg. At have en unik identifikator gør livet meget lettere. Dette er en af de nemmeste ting, du kan gøre for at spare tid, når tjenesten vokser.

Mellemniveau

Her er rådene sværere end de tidligere, men de rigtige værktøjer gør opgaven lettere, hvilket sikrer investeringsafkast selv for små og mellemstore virksomheder.

Centraliseret logføring

Tillykke! Du har opsat 100 virtuelle maskiner. Næste dag kommer direktøren og klager over en fejl, han fik under test af tjenesten. Han giver det relevante ID, som vi talte om ovenfor, men du bliver nødt til at gennemgå loggene for 100 maskiner for at finde den, der forårsagede fejlen. Og den skal findes før præsentationen i morgen.

Selvom det lyder som et sjovt eventyr, er det bedre at sikre sig, at du har mulighed for at søge i alle loggene fra ét sted. Jeg løste opgaven med centralisering af logene ved hjælp af den indbyggede funktionalitet i ELK-stakken: her understøttes logindsamling med mulighed for søgning. Det vil virkelig hjælpe med at løse problemet med at finde en specifik log. Som bonus kan du også lave diagrammer og lignende sjove ting.

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Funktionaliteten i ELK-stakken

Overvågningsagenter

Nu hvor din tjeneste er sat i drift, skal du sikre dig, at den fungerer uden problemer. Den bedste måde at gøre dette på er at køre flere agenter, der kører parallelt og tjekker, at den fungerer, og at grundlæggende operationer udføres.

På dette stadium tjekker du, at den kørende opbygning fungerer godt og fungerer normalt.

For små og mellemstore projekter anbefaler jeg Postman til overvågning og dokumentation af API'er. Men generelt bør du blot sikre dig, at du har en metode til at vide, hvornår noget går galt, og få rettidige beskeder.

Automatisk skalering baseret på belastning

Det er meget simpelt. Hvis du har en virtuel maskine, der betjener forespørgsler, og den nærmer sig 80% hukommelse i brug, kan du enten øge dens ressourcer eller tilføje flere virtuelle maskiner til klyngen. Automatisk udførelse af disse operationer er fremragende til elastisk ændring af kapacitet under belastning. Men du skal altid være forsigtig med, hvor mange penge du bruger, og sætte rimelige grænser.

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
I de fleste cloud-tjenester kan du konfigurere automatisk skalering ved at bruge flere servere eller mere kraftfulde servere.

Eksperimenteringssystem

En god måde at rulle opdateringer sikkert ud på vil være at have mulighed for at teste noget for 1% af brugerne i en time. Du har selvfølgelig set sådanne mekanismer i aktion. For eksempel viser Facebook dele af publikum en anden farve eller ændrer skrifttypestørrelsen for at se, hvordan brugerne reagerer på ændringerne. Dette kaldes A/B-testning.

Selv lanceringen af en ny funktion kan udføres som et eksperiment og derefter bestemme, hvordan man skal rulle den ud. Du får også mulighed for at "tilbagekalde" eller ændre konfigurationen i realtid i tilfælde af en funktion, der forårsager forringelse af din tjeneste.

Avanceret niveau

Her er tips, der er ret svære at implementere. Du vil sandsynligvis have brug for lidt flere ressourcer, så det vil være svært for en lille eller mellemstor virksomhed at håndtere dette.

Blå-grønne udrulninger

Det er, hvad jeg kalder den "erlangske" udrulningsmetode. Erlang blev meget anvendt, da telefonfirmaer opstod. Programmatisk switching blev anvendt til at rute telefonopkald. Den primære opgave for softwaren i disse switchere var at sikre, at opkald ikke blev afbrudt under systemopdateringer. Erlang har en fantastisk metode til at indlæse en ny modul uden at nedlægge den tidligere.

Dette trin afhænger af tilgængeligheden af en load balancer. Lad os sige, at du har version N af din software, og nu ønsker du at implementere version N+1. 

Du kunne du bare stoppe tjenesten og udrulle den næste version på et tidspunkt, der passer dig og dine brugere, og få lidt nedetid. Men lad os antage, at du har faktisk strenge SLA-betingelser. Så en SLA på 99,99 % betyder, at du kan være offline kun i 52 minutter om året.

Hvis du virkelig ønsker at opnå sådanne resultater, skal der to udrulninger til samtidig: 

  • den, der er i drift lige nu (N);
  • den næste version (N+1). 

Du beder load balancer om at omdirigere en procentdel af trafikken til den nye version (N+1), mens du aktivt overvåger for regressioner.

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Her har vi en grøn udrulning N, der fungerer normalt. Vi forsøger at gå videre til den næste version af denne udrulning.

Først sender vi virkelig en lille test for at se, om vores udrulning N+1 fungerer med en lille mængde trafik:

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Endelig har vi et sæt automatiserede kontroller, som vi til sidst kører, indtil vores udrulning er komplet. Hvis du er meget, meget forsigtig, kan du også beholde din udrulning N for evigt for en hurtig tilbageførelse i tilfælde af en dårlig regression:

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Hvis du vil tage det til et endnu mere avanceret niveau, så lad alt i den blå-grønne udrulning køre automatisk.

Opdagelse af anomalier og automatisk afbødning

Med centraliseret logføring og god logindsamling kan du allerede sætte højere mål. For eksempel proaktivt forudsige fejl. Monitorer og logs sporer funktioner og opbygger forskellige diagrammer – og man kan på forhånd forudsige, hvad der vil gå galt:

Sådan sover du trygt, når du har en cloud-tjeneste: Grundlæggende arkitektoniske råd
Med opdagelse af anomalier begynder du at studere nogle tips, som tjenesten giver. For eksempel kan en stigning i CPU-belastningen indikere, at harddisken er ved at svigte, mens en stigning i antal forespørgsler betyder, at du skal skalere op. Denne type statistikker gør det muligt at gøre tjenesten proaktiv.

Med disse analytiske data kan du skalere i alle dimensioner, proaktivt og reaktivt ændre egenskaber for maskiner, databaser, forbindelser og andre ressourcer.

Det var det!

Denne prioritetsliste vil befri dig for mange problemer, når du opgraderer din cloud service.

Forfatteren af den oprindelige artikel inviterer læserne til at efterlade deres kommentarer og bidrage med ændringer. Artiklen distribueres som open source, pull-requests forfatteren modtager på Github.

Hvad andet at læse om emnet:

  1. Go og CPU caches
  2. Kubernetes i piratånd med en implementeringsskabelon
  3. Vores kanal Omkring Kubernetes på Telegram

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster