
V tem članku so zbrani nekateri splošni šabloni, ki pomagajo inženirjem pri delu z obsežnimi storitvami, do katerih dostopajo milijoni uporabnikov.
Po avtorjevih izkušnjah to ni izčrpen seznam, vendar so resnične učinkovite natančni nasveti. Torej, začnimo.
Prevedeno s podporo .
Osnovni nivo
Spodnje navedene ukrepe je relativno enostavno izvesti, vendar prinašajo visoke donose. Če jih do zdaj še niste uvedli, boste presenečeni nad pomembnimi izboljšavami.
Infrastruktura kot koda
Prvi del nasvetov je, da uvedete infrastrukturo kot kodo. To pomeni, da morate imeti programski način za razporeditev celotne infrastrukture. Zveni zapleteno, vendar v resnici govorimo o naslednjem kodi:
Razporejanje 100 virtualnih računalnikov
- z Ubuntu
- 2 GB RAM-a na vsakem
- imeli bodo naslednjo kodo
- s takšnimi parametri
Sistem za upravljanje verzij vam omogoča, da sledite spremembam v infrastrukturi in se hitro vrnete k njim.
Modernist v meni pravi, da lahko uporabite Kubernetes/Docker, da naredite vse našteto, in ima prav.
Poleg tega lahko zagotovite samodejno delovanje s pomočjo Chefa, Puppeta ali Terraforma.
Neprekinjena integracija in dostava
Za ustvarjanje razširljive storitve je pomembno, da imate pipeline za gradnjo in testiranje za vsak pull request. Tudi če je test najpreprostejši, vsaj zagotavlja, da se koda, ki jo uvajate, prevaja.
Vsakič v tej fazi se sprašujete: ali se bo moja gradnja prevajala in prestala teste, ali je veljavna? To se morda zdi nizka meja, vendar reši številne težave.

Ni nič lepšega, kot videti te kljukice
Za to tehnologijo lahko ocenite Github, CircleCI ali Jenkins.
Uravnoteževalniki obremenitve
Torej, želimo zagnati uravnoteževalnik obremenitve, da preusmerimo promet in zagotovimo enakomerno obremenitev na vseh vozliščih ali delovanje storitve v primeru okvare:

Uravnoteževalnik obremenitve ponavadi dobro pomaga pri razporejanju prometa. Najboljša praksa je redundanca, da ne bi imeli ene same točke odpovedi.
Običajno so uravnoteževalniki obremenitve nastavljeni v tistem oblaku, ki ga uporabljate.
RayID, korelacijski ID ali UUID za poizvedbe
Ste se kdaj srečali z napako v aplikaciji s sporočilom, kot je to: „Nekaj je šlo narobe. Shranite to ID in ga pošljite naši podpori“?

Edinstveni identifikator, correlation ID, RayID ali katerikoli izmed variant je edinstveni identifikator, ki omogoča sledenje zahtevi skozi njen življenjski cikel. To omogoča sledenje celotni poti zahteve v dnevnikih.

Uporabnik pošlje zahtevo sistemu A, nato A komunicira z B, ta pa s C, shrani v X in nato se zahteva vrne nazaj v A.
Če bi se oddaljeno povezali na virtualne stroje in poskušali slediti poti zahteve (in ročno povezali, kateri klici se zgodijo), bi vas to spravilo ob pamet. Imeti edinstveni identifikator močno olajša življenje. To je ena izmed najpreprostejših stvari, ki jih lahko storite, da prihranite čas, ko se storitev povečuje.
Srednja raven
Tukaj so nasveti nekoliko težji od prejšnjih, vendar pravi instrumenti olajšajo nalogo, zagotavljajo donosnost naložb tudi za mala in srednja podjetja.
Centralizirano vodenje dnevnikov
Čestitam! Deployali ste 100 virtualnih strojev. Naslednji dan se direktor pritoži nad napako, ki jo je prejel med testiranjem storitve. Pove ustrezen identifikator, o katerem smo govorili prej, vendar boste morali pregledati dnevnike 100 strojev, da najdete tistega, ki je povzročil napako. To morate najti do jutrišnje predstavitve.
Čeprav se to sliši kot zabavna pustolovščina, je bolje poskrbeti, da imate možnost iskanja po vseh dnevnikih na enem mestu. Rešil sem nalogo centralizacije dnevnikov z uporabo vgrajene funkcionalnosti ELK sklada: tukaj je podprto zbiranje dnevnikov z možnostjo iskanja. To vam bo resnično pomagalo rešiti problem iskanja konkretnega dnevnika. Kot bonus lahko ustvarite grafikon in druge zabavne stvari.

Funkcionalnost ELK sklada
Monitorni agenti
Zdaj, ko je vaša storitev uvedena, morate poskrbeti, da deluje brez okvar. Najboljši način za to je zagon več agentov, ki delujejo hkrati in preverjajo, da deluje in da se izvajajo osnovne operacije.
Na tej točki preverjate, da Zagnana zbirka se dobro ponaša i normalno radi.
Za male i srednje projekte preporučujem Postman za praćenje i dokumentovanje API-ja. No, u suštini, samo treba da se osigurate da imate način da saznate kada dođe do kvara i da dobijete pravovremeno obaveštenje.
Automatsko skaliranje u zavisnosti od opterećenja
To je veoma jednostavno. Ako imate virtuelnu mašinu koja obrađuje zahteve i približava se tome da je 80% memorije zauzeto, možete ili povećati njene resurse ili dodati više virtuelnih mašina u klaster. Automatsko izvršavanje ovih operacija odlično je za elastično prilagođavanje snage prema opterećenju. Ali uvek treba biti oprezan koliko novca trošite i postaviti razumne limite.

U većini oblačnih usluga možete konfigurisati automatsko skaliranje korišćenjem većeg broja servera ili snažnijih servera.
Sistem eksperimenata
Dobar način da sigurno implementirate ažuriranja je mogućnost testiranja nečega za 1% korisnika tokom jednog sata. Naravno, videli ste mehanizme poput toga u akciji. Na primer, Facebook prikazuje delovima publike drugačiju boju ili menja veličinu fonta kako bi video kako korisnici doživljavaju promene. To se zove A/B testiranje.
Čak i puštanje nove funkcije može se pokrenuti kao eksperiment, a zatim odrediti kako je puštati. Takođe, dobijate mogućnost da "povučete" ili menjate konfiguraciju u hodu uzimajući u obzir funkciju koja uzrokuje degradaciju vaše usluge.
Napredni nivo
Ovde su saveti koji su prilično teški za realizaciju. Verovatno će vam biti potrebno malo više resursa, pa će maloj ili srednjoj firmi biti teško da se sa tim nosi.
Plavo-zelena razmeštanja
To je ono što nazivam "erlangovskim" načinom razmeštanja. Erlang je postao široko korišćen kada su se pojavile telefonske kompanije. Za rutiranje telefonskih poziva korišćene su softverske preklopke. Osnovna svrha softvera ovih preklopki bila je da ne prekida pozive tokom ažuriranja sistema. Erlang ima odličan način učitavanja novog modula bez rušenja prethodnog.
Ta faza je odvisna od razpoložljivosti uravnoteževalnika obremenitve. Predpostavimo, da imate različico N vaše programske opreme, nato pa želite razporediti različico N+1.
Vi lahko bi enostavno ustavili storitev in razporedili naslednjo različico takrat, ko menite, da je primerno za vaše uporabnike, kar bi pomenilo kratek čas nedelovanja. Vendar pa predpostavimo, da imate resnično stroge pogoje SLA. Tako SLA 99,99% pomeni, da lahko greste offline le 52 minut na leto.
Če resnično želite doseči takšne rezultate, potrebujete dva razporeda hkrati:
- tistega, ki ga imate trenutno (N);
- naslednjo različico (N+1).
Uravnoteževalniku obremenitve navedete, naj preusmeri določen odstotek prometa na novo različico (N+1), medtem ko aktivno spremljate morebitne regresije.

Tukaj imamo zeleno razporejanje N, ki normalno deluje. Poskušamo preiti na naslednjo različico tega razporejanja
Najprej pošljemo res zelo majhen test, da vidimo, ali deluje naše razporejanje N+1 s majhnim številom prometa:

Na koncu imamo niz avtomatskih preverjanj, ki jih izvajamo, dokler naše razporejanje ni končano. Če ste zelo, zelo pazljivi, lahko tudi za hitro uporabo v primeru slabe regresije obdržite svoje razporejanje N za vedno:

Če želite preiti na še bolj napredno raven, naj se vse v modro-zelena razporeditev izvaja avtomatsko.
Odkrivanje anomali in samodejno omilitev posledic
Glede na to, da imate centralizirano beleženje dnevnikov in dobro zbiranje logov, lahko postavite višje cilje. Na primer, proaktivno napovedovati okvare. Na monitorjih in dnevnikih se spremljajo funkcije in gradijo različni grafikoni — ter lahko vnaprej napoveste, kaj bi se lahko zgodilo:

Pri odkrivanju anomali začnete raziskovati nekatere namige, ki jih daje storitev. Na primer, porast obremenitve CPU lahko nakazuje, da trdi disk odpoveduje, porast števila zahtevkov pa pomeni, da je treba skalirati. Taki statistični podatki omogočajo, da je storitev proaktivna.
S pridobivanjem takšnih analitičnih podatkov se lahko širite v katerem koli merilu ter proaktivno in reaktivno spreminjate lastnosti strojev, baz podatkov, povezav in drugih virov.
To je to!
Ta seznam prioritet vas bo rešil mnogih težav, če uvajate oblačne storitve.
Avtor izvirnega članka vabi bralce, da pustijo svoje komentarje in prispevke. Članek se distribuira kot odprta koda, pull requeste avtor .
Kaj še prebrati o temi:
Izvor: habr.com
