Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturoreLOST by sophiagworld

Në këtë artikull janë mbledhur disa modele të zakonshme që ndihmojnë inxhinierët të punojnë me shërbime të mëdha, të cilat kërkohen nga miliona përdorues. 

Sipas përvojës së autorit, kjo nuk është një listë e plotë, por vërtet këshilla efektive. Le të fillojmë.

Përkthyer me mbështetje nga Zgjidhjet Cloud të Mail.ru.

Niveli fillestar

Masat e listuara më poshtë janë relativisht të lehta për t'u zbatuar, por ofrojnë një kthim të lartë. Nëse nuk i keni ndërmarrë më parë, do të befasoheni nga përmirësimet e dukshme.

Infrastruktura si kod

Pjesa e parë e këshillave është që të implementoni infrastrukturën si kod. Kjo do të thotë se duhet të keni një mënyrë programore për të implementuar tërë infrastrukturën. Duket kompleks, por në të vërtetë po flasim për kodin e mëposhtëm:

Implementimi i 100 makinave virtuale

  • me Ubuntu
  • 2 GB RAM në secilën
  • do të kenë këtë kod
  • me këto parametra

Mund të monitoroni ndryshimet në infrastrukturë dhe të ktheheni shpejt në to duke përdorur një sistem menaxhimi të versioneve.

Modernisti në mua thotë se mund të përdorni Kubernetes/Docker për të bërë gjithçka të përmendur më lart, dhe ka të drejtë.

Përveç kësaj, mund të sigurohet automatizimi, me anë të Chef, Puppet ose Terraform.

Integrimi dhe dorëzimi i vazhdueshëm

Për të krijuar një shërbim të shkallëzuar, është e rëndësishme të keni një tubacion ndërtimi dhe testi për çdo kërkesë të tërheqjes. Edhe nëse testi është më i thjeshtë, të paktën sigurohet që kodi që po e deployoni, kompilon.

Çdo herë në këtë fazë, përgjigjeni pyetjes: a do të kompilojë ndërtimi im dhe do të kalojë testet, a është valido? Kjo mund të duket si një nivel i ulët, por zgjidh shumë probleme.

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Nuk ka asgjë më të bukur se të shohësh këto shenja

Për këtë teknologji, mund të shqyrtoni Github, CircleCI ose Jenkins.

Balancuesit e ngarkesës

Pra, ne duam të nisemi me një balancues ngarkese për të drejtuar trafikun dhe për të siguruar ngarkesë të barabartë në të gjitha nyjet ose funksionimin e shërbimit në rast dështimi:

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Balancuesi i ngarkesës zakonisht ndihmon në shpërndarjen e trafik, Praktika më e mirë është mbrojtja e tepërt, në mënyrë që të mos keni një pikë dështimi.

Zakonisht balancuesit e ngarkesës konfigurohen në atë cloud që po përdorni.

RayID, correlation ID ose UUID për kërkesat

A e keni takuar ndonjëherë një gabim në aplikacion me një mesazh të tillë: ‘Diçka shkoi gabim. Ruani këtë id dhe dërgojeni në shërbimin tonë të mbështetjes’?

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Një identifikues unik, correlation ID, RayID ose ndonjë nga opsionet - është një identifikues unik që lejon ndjekjen e kërkesës gjatë ciklit të saj të jetës. Kjo lejon që të ndjekësh të gjithë rrugën e kërkesës në log.

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Përdoruesi bën një kërkesë në sistemin A, më pas A lidhet me B, B me C, ruan në X dhe pastaj kërkesa kthehet te A.

Nëse do t'ju duhej të lidhnit në distancë me makinat virtuale dhe të provonit të ndiqnit rrugën e kërkesës (dhe të lidhni manualisht, cilat thirrje ndodhin), do të çmendeshit. Të kesh një identifikues unik e bën jashtëzakonisht më të lehtë jetën. Kjo është një nga gjërat më të thjeshta që mund të bëni për të kursyer kohë ndërsa shërbimi juaj rritet.

Niveli i mesëm

Këtu këshillat janë më të ndërlikuara se ato të mëparshmet, por mjetet e duhura e lehtësojnë задачë dhe ofrojnë kthim të investimeve edhe për kompani të vogla dhe të mesme.

Menaxhimi i centralizuar i regjistrave

Urime! Keni implementuar 100 makina virtuale. Të nesërmen, CEO i kompanisë vjen dhe ankohet për një gabim që ka marrë gjatë testimit të shërbimit. Ai jep identifikuesin përkatës, për të cilin diskutuan më lart, por ju do të duhet të kaloni përmes regjistrave të 100 makinave për të gjetur atë që shkaktoi dështimin. Dhe duhet ta gjeni atë përpara prezantimit të nesërm.

Edhe pse duket si një aventurë, ndoshta është më mirë të siguroheni se keni mundësi të kërkoni në të gjitha regjistrat nga një vend. Unë zgjodha të centralizoja regjistrat duke përdorur funksionalitetin e ndërtuar në ELK stack: këtu mbështetet mbledhja e regjistrave me mundësinë për të kërkuar. Kjo vërtet do t'ju ndihmojë të zgjidhni problemin me gjetjen e një regjistri të caktuar. Si bonus, mund të krijoni grafikë dhe gjëra të tjera argëtuese.

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Funksionaliteti i ELK stack

Agjentët e monitorimit

Tani që shërbimi juaj është aktiv, duhet të siguroheni që të funksionojë pa probleme. Mënyra më e mirë për ta bërë këtë është të nisni disa agjentë, të cilët punojnë paralelisht dhe kontrollojnë nëse ajo funksionon dhe kryhen operacionet bazë.

Në këtë fazë, ju kontrolloni nëse ndërtimi i nisur ndjehet mirë dhe punon normalisht..

Për projektet e vogla dhe ata mesatarë, unë rekomandoj Postman për monitorimin dhe dokumentimin e API-ve. Megjithatë, në përgjithësi, thjesht sigurohuni që keni një mënyrë për të mësuar kur ndodhi një dështim dhe të merrni njoftime të shpejta.

Auto-skalimi sipas ngarkesës

Është shumë e thjeshtë. Nëse keni një makinë virtuale që shërben kërkesa dhe po afrohet në 80% të kapacitetit të memories, mund të rritni burimet e saj ose të shtoni më shumë makina virtuale në klaster. Automatizimi i këtyre operacioneve është një mënyrë e shkëlqyer për të rritur fleksibilitetin e përputhjes me ngarkesën. Por gjithmonë duhet të jeni të kujdesshëm për shumën e parave që shpenzoni dhe të vendosni kufij të arsyeshëm.

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Në shumicën e shërbimeve cloud, mund të konfiguroni auto-skalimin duke përdorur më shumë serverë ose serverë më të fuqishëm.

Sistemi i eksperimenteve

Një mënyrë e mirë për të shpërndarë përditësime në mënyrë të sigurt është të keni mundësinë të testoni diçka për 1% të përdoruesve për një orë. Sigurisht, keni parë mekanizma të tillë në veprim. Për shembull, Facebook tregon një ngjyrim tjetër ose ndryshon madhësinë e shkronjave për një pjesë të audiencës për të parë si reagojnë përdoruesit ndaj ndryshimeve. Kjo quhet testim A/B.

Edhe lëshimi i një karakteristike të re mund të testohet si një eksperiment dhe më pas të përcaktohet si të shkarkohet. Gjithashtu, ju jepni mundësinë për të "përmbyllur" ose për të ndryshuar konfigurimin në flakë në përputhje me një funksion që shkakton degradimin e shërbimit tuaj.

Niveli i avancuar

Këtu janë këshilla që janë mjaft të vështira për t'u zbatuar. Probabilisht do t'ju nevojiten më shumë burime, prandaj është e vështirë për një kompani të vogël ose mesatare të merret me to.

Shpërndarjet blu-jeshil

Kjo është ajo që unë e quaj "shpërndarje erlang". Erlang janë përdorur gjerësisht kur u shfaqën kompanitë telefonike. Për të rritur thirrjet telefonike, filluan të aplikohen komutatorë softuerikë. Detyra kryesore e softuerit të këtyre komutatorëve ishte të mos ndërpriste thirrjet gjatë përditësimit të sistemit. Erlang ka një mënyrë të shkëlqyer për të ngarkuar një modul të ri pa rrënuar atë ekzistues.

Ky hap varet nga disponueshmëria e një balancuesi ngarkese. Le të themi se keni versionin N të softuerit tuaj dhe më pas dëshironi të shpërndani versionin N+1. 

Ju mundet thjesht të ndaloni shërbimin dhe të shpërndani versionin tjetër në momentin që e konsideroni të përshtatshëm për përdoruesit tuaj, dhe të merrni një periudhë të caktuar papunësie. Por supozoni se keni vërtet kushtet e rrepta të SLA. Kështu, një SLA prej 99.99% do të thotë që mund të jeni offline vetëm për 52 minuta në vit.

Nëse me të vërtetë dëshironi të arrini këto nivele, ju nevojiten dy shpërndarje njëkohësisht: 

  • ajo që është tani (N);
  • versioni tjetër (N+1). 

Ju i thoni balancuesit të ngarkesës të redirektojë një përqindje të trafikut në versionin e ri (N+1), ndërsa ju aktivisht monitoroni regresionet.

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Këtu kemi një shpërndarje të gjelbër N që funksionon normalisht. Ne po përpiqemi të kalojmë në versionin tjetër të kësaj shpërndarjeje.

Fillimisht ne dërgojmë një test shumë të vogël për të parë nëse shpërndarja jonë N+1 punon me një numër të vogël trafiku:

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Më në fund, kemi një grup kontrollesh automatike që në fund do të ekzekutojmë derisa shpërndarja jonë të përfundojë. Nëse jeni shumë, shumë të kujdesshëm, gjithashtu mund të mbani shpërndarjen tuaj N përgjithmonë për një rikthim të shpejtë në rast të regresionit të keq:

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Nëse dëshiron të kalosh në një nivel akoma më të avancuar, le të bëjë gjithçka në shpërndarjen blu-jeshil automatikisht.

Zbulimi i anomalisë dhe mitizimi automatik i pasojave

Duke marrë parasysh se keni një qendër të centralizuar logimi dhe mbledhje të mira logesh, mund të vendosni objektiva më të larta. Për shembull, të parashikoni proaktivisht dështimet. Në monitorë dhe në logje, funksionet gjurmohen dhe ndizen grafika të ndryshme - dhe mund të parashikoni përpara se gjithçka të shkojë keq:

Si të flini qetë kur keni një shërbim cloud: këshillat kryesore arkitekturore
Me zbulimin e anomalisë, filloni të studioni disa shenja që shërbimi jep. Për shembull, një rritje e ngarkesës së CPU mund t'ju japë alarmin se disku i harduerit po dështon, dhe një rritje e numrit të kërkesave tregon se duhet të shkalloni. Statistika të tilla ju lejojnë të bëni shërbimin proaktiv.

Duke marrë këto të dhëna analitike, mund të shkalloni në çdo dimension, duke ndryshuar proaktivisht dhe reaktivisht karakteristikat e makinave, baza të të dhënave, lidhje dhe burime të tjera.

Këtu është gjithçka!

Ky这个 список приоритетов do t'ja te shfryte lëng të shumë problemeve nëse po ngrini një shërbim në re.

Autori i artikullit origjinal i fton lexuesit të lënë komente dhe të bëjnë ndryshime. Artikulli shpërndahet si open source, kërkesat për pull-requests autori pranon në Github.

Çfarë tjetër të lexoni mbi temën:

  1. Go dhe cache të CPU
  2. Kubernetes në frymën e pirateve me një shabllon për implementim
  3. Kanalin tonë Rreth Kubernetes në Telegram

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster