Izvajanje katere koli razširljive porazdeljene platforme zahteva zavezanost k zanesljivosti, da strankam zagotovimo, kar potrebujejo, ko to potrebujejo. Odvisnosti so lahko precej zapletene, zlasti pri tako veliki platformi, kot je Roblox. Gradnja zanesljivih storitev pomeni, da ne glede na kompleksnost in status odvisnosti nobena storitev ne bo prekinjena (tj. Na voljo), bo deloval brez napak (tj. visoka kakovost) in brez napak (tj toleranca napak).
Zakaj je zanesljivost pomembna
Naša ekipa za identiteto računa je predana doseganju višje zanesljivosti, saj so storitve skladnosti, ki smo jih zgradili, ključne komponente platforme. Kršena skladnost ima lahko resne posledice. Stroški blokiranja naravnega delovanja Robloxa so zelo visoki, z dodatnimi sredstvi, potrebnimi za okrevanje po okvari in oslabljeni uporabniški izkušnji.
Tipičen pristop k zanesljivosti se osredotoča predvsem na razpoložljivost, vendar se v nekaterih primerih izrazi mešajo in zlorabljajo. Večina meritev za razpoložljivost le oceni, ali storitve delujejo in delujejo, medtem ko so vidiki, kot sta toleranca particije in doslednost, včasih pozabljeni ali napačno razumljeni.
V skladu s teoremom CAP lahko kateri koli porazdeljeni sistem zagotavlja samo dva od teh treh vidikov, zato naše storitve skladnosti žrtvujejo nekaj doslednosti, da bi bile visoko razpoložljive in tolerantne na particije. Kljub temu so naše storitve malo žrtvovale in našle mehanizme za doseganje dobre skladnosti z razumnimi arhitekturnimi spremembami, pojasnjenimi spodaj.
Postopek za doseganje višje zanesljivosti je iterativen, s tesnimi meritvami, ki se ujemajo z neprekinjenim delom, da bi preprečili, našli, zaznali in odpravili napake, preden pride do incidentov. Naša ekipa je prepoznala veliko vrednost v naslednjih praksah:
- Pravilna meritev – Ustvarite popolno opazovanje glede tega, kako se kakovost zagotavlja strankam in kako nam odvisnosti zagotavljajo kakovost.
- Proaktivno predvidevanje – Izvajanje dejavnosti, kot so arhitekturni pregledi in ocene tveganja odvisnosti.
- Dajte prednost popravku – Posvetite več pozornosti reševanju poročil o incidentih za storitev in odvisnosti, ki so povezane z našo storitvijo.
Gradnja višje zanesljivosti zahteva kulturo kakovosti. Naša ekipa je že vlagala v razvoj, ki temelji na uspešnosti, in ve, da je uspeh procesa odvisen od njegovega sprejetja. Ekipa je ta postopek v celoti sprejela in prakse uporabila kot standard. Naslednji diagram poudarja komponente postopka:
Moč pravilnega merjenja
Preden se poglobimo v meritve, moramo na kratko pojasniti meritve ravni storitev.
- SLO (Service Level Objective) je cilj zanesljivosti, ki ga želi doseči naša ekipa (tj. 99.999 %).
- SLI (Service Level Indicator) je dosežena zanesljivost glede na časovni okvir (tj. 99.975 % lani februarja).
- SLA (Service Level Agreement) je zanesljivost, za katero so se dogovorili in jo pričakujejo naši potrošniki v določenem časovnem okviru (tj. 99.99 % na teden).
SLI mora odražati razpoložljivost (brez neobdelanih ali manjkajočih odzivov), toleranco napak (brez napak storitve) in doseženo kakovost (brez nepričakovanih napak). Zato smo naš SLI opredelili kot »razmerje uspešnosti« uspešnih odgovorov v primerjavi s skupnim številom zahtev, poslanih storitvi. Uspešni odgovori so tiste zahteve, ki so bile odposlane pravočasno in v obliki, kar pomeni ne povezljivosti, storitve ali nepričakovane napake.
Ta SLI ali razmerje uspešnosti se zbira z vidika potrošnikov (tj. strank). Namen je izmeriti dejansko izkušnjo od konca do konca, zagotovljeno našim potrošnikom, tako da smo prepričani, da so SLA izpolnjeni. Če tega ne storimo, bi ustvarili lažen občutek zanesljivosti, ki ignorira vsa vprašanja glede infrastrukture za povezovanje z našimi strankami. Podobno kot potrošniški SLI zbiramo SLI odvisnosti, da sledimo morebitnemu tveganju. V praksi bi morale biti vse odvisnosti SLA usklajene s storitvijo SLA in z njimi obstaja neposredna odvisnost. Neuspeh enega pomeni neuspeh vseh. Prav tako spremljamo in poročamo meritvam iz same storitve (tj. strežnika), vendar to ni praktičen vir za visoko zanesljivost.
Poleg SLI vsaka zgradba zbira meritve kakovosti, ki jih poroča naš potek dela CI. Ta praksa pomaga močno uveljavljati kakovostna vrata (tj. pokritost kode) in poročati o drugih pomembnih metrikah, kot sta skladnost s standardom kodiranja in statična analiza kode. Ta tema je bila prej obravnavana v drugem članku, Gradnja mikrostoritev, ki jih poganja zmogljivost. Vztrajno upoštevanje kakovosti je pri zanesljivosti še en dodatek, saj več ko vlagamo v doseganje odličnih rezultatov, bolj smo prepričani, da sistem v neugodnih razmerah ne bo odpovedal.
Naša ekipa ima dve nadzorni plošči. Ena zagotavlja vso vidljivost v Consumers SLI in Dependencies SLI. Drugi prikazuje vse metrike kakovosti. Delamo na tem, da bi vse združili v eno nadzorno ploščo, tako da so vsi vidiki, ki nas zanimajo, konsolidirani in pripravljeni za poročanje v katerem koli danem časovnem okviru.
Predvidite neuspeh
Narediti Arhitekturne ocene je temeljni del zanesljivosti. Najprej ugotovimo, ali je prisotna redundanca in ali ima storitev sredstva za preživetje, ko se odvisnosti zmanjšajo. Poleg tipičnih zamisli za replikacijo je večina naših storitev uporabila izboljšane tehnike hidracije dvojnega predpomnilnika, strategije dvojne obnovitve (kot so lokalne čakalne vrste za preklop) ali strategije izgube podatkov (kot je transakcijska podpora). Te teme so dovolj obsežne, da upravičujejo še en zapis v spletnem dnevniku, vendar je končno najboljše priporočilo implementacija idej, ki upoštevajo scenarije katastrofe in minimizirajo kakršno koli poslabšanje učinkovitosti.
Drug pomemben vidik, ki ga je treba predvideti, je vse, kar bi lahko izboljšalo povezljivost. To pomeni, da moramo biti agresivni glede nizke zakasnitve za odjemalce in jih pripraviti na zelo velik promet z uporabo tehnik za nadzor predpomnilnika, stranskih prikolic in politik učinkovitosti za časovne omejitve, prekinitve tokokroga in ponovne poskuse. Te prakse veljajo za vse odjemalce, vključno s predpomnilniki, shrambami, čakalnimi vrstami in soodvisnimi odjemalci v HTTP in gRPC. Pomeni tudi izboljšanje zdravih signalov iz storitev in razumevanje, da imajo pregledi zdravja pomembno vlogo pri vseh orkestracijah vsebnikov. Večina naših storitev naredi boljše signale za poslabšanje kot del povratnih informacij o pregledu stanja in preveri, ali vse kritične komponente delujejo, preden pošljejo zdrave signale.
Razčlenitev storitev na kritične in nekritične dele se je izkazala za koristno za osredotočanje na funkcionalnost, ki je najpomembnejša. Včasih smo imeli v isti storitvi samo skrbniške končne točke in čeprav jih nismo pogosto uporabljali, so vplivale na splošno meritev zakasnitve. Premestitev v njihovo lastno storitev je pozitivno vplivala na vse meritve.
Ocena tveganja odvisnosti je pomembno orodje za prepoznavanje morebitnih težav z odvisnostmi. To pomeni, da identificiramo odvisnosti z nizkim SLI in zahtevamo uskladitev SLA. Tem odvisnostim je treba med koraki integracije posvetiti posebno pozornost, zato namenimo dodaten čas za primerjavo in preizkus, ali so nove odvisnosti dovolj zrele za naše načrte. En dober primer je zgodnje sprejetje storitve Roblox Storage-as-a-Service. Integracija s to storitvijo je zahtevala prijavo napak in občasne sinhronizacijske sestanke za sporočanje ugotovitev in povratnih informacij. Vse to delo uporablja oznako "zanesljivost", tako da lahko hitro prepoznamo njegov izvor in prioritete. Karakterizacija se je pogosto dogajala, dokler nismo imeli zaupanja, da je nova odvisnost pripravljena za nas. To dodatno delo je pomagalo dvigniti odvisnost na zahtevano raven zanesljivosti, za katero pričakujemo, da jo bomo zagotovili s skupnim delovanjem za skupni cilj.
Pripeljite strukturo v kaos
Nikoli ni zaželeno, da pride do incidentov. Ko pa se zgodijo, je treba zbirati pomembne informacije in se iz njih učiti, da bi bili bolj zanesljivi. Naša ekipa ima ekipno poročilo o incidentih, ki je ustvarjeno nad običajnim poročilom za celotno podjetje, zato se osredotočamo na vse incidente ne glede na obseg njihovega vpliva. Pokličemo temeljni vzrok in dajemo prednost vsem delom za njegovo ublažitev v prihodnosti. Kot del tega poročila pokličemo druge skupine, da popravijo incidente odvisnosti z visoko prioriteto, sledijo ustrezni rešitvi, retrospektivi in iščejo vzorce, ki se lahko nanašajo na nas.
Ekipa izdeluje a Mesečno poročilo o zanesljivosti na storitev ki vključuje vse tukaj razložene SLI, vse vstopnice, ki smo jih odprli zaradi zanesljivosti, in morebitne incidente, povezane s storitvijo. Tako smo vajeni ustvarjanja teh poročil, da je naslednji naravni korak avtomatizacija njihovega pridobivanja. Opravljanje te občasne dejavnosti je pomembno in je opomnik, da se zanesljivost nenehno spremlja in upošteva pri našem razvoju.
Naši instrumenti vključujejo meritve po meri in izboljšana opozorila, tako da smo obveščeni čim prej, ko pride do znanih in pričakovanih težav. Vsa opozorila, vključno z lažno pozitivnimi, se pregledajo vsak teden. Na tej točki je izpopolnjevanje vse dokumentacije pomembno, da naši potrošniki vedo, kaj lahko pričakujejo, ko se sprožijo opozorila in ko pride do napak, nato pa vsi vedo, kaj storiti (npr. priročniki in smernice za integracijo so usklajeni in pogosto posodobljeni).
Konec koncev, sprejemanje kakovosti v naši kulturi je najbolj kritičen in odločilen dejavnik pri doseganju višje zanesljivosti. Lahko opazimo, kako se te prakse, ki jih uporabljamo pri vsakodnevnem delu, že obrestujejo. Naša ekipa je obsedena z zanesljivostjo in to je naš najpomembnejši dosežek. Povečali smo zavedanje o vplivu, ki bi ga lahko imele morebitne napake, in o tem, kdaj bi se lahko pojavile. Storitve, ki so izvajale te prakse, so dosledno dosegle svoje SLO in SLA. Poročila o zanesljivosti, ki nam pomagajo spremljati vse delo, ki smo ga opravljali, so dokaz dela, ki ga je opravila naša ekipa, in so neprecenljiva lekcija za obveščanje in vplivanje na druge ekipe. Tako se kultura zanesljivosti dotika vseh komponent naše platforme.
Pot do večje zanesljivosti ni lahka, vendar je nujna, če želite zgraditi zaupanja vredno platformo, ki na novo predstavlja, kako se ljudje združujejo.
Alberto je glavni programski inženir v skupini za identiteto računa pri Robloxu. V industriji iger je že dolgo, z zaslugami pri številnih naslovih iger AAA in platformah družbenih medijev z močnim poudarkom na visoko razširljivih arhitekturah. Zdaj pomaga Robloxu doseči rast in zrelost z uporabo najboljših razvojnih praks.
Pošta Zagotavljanje zanesljivosti platforme velikega obsega pojavil prvi na Blog Roblox.
- "
- a
- O meni
- Račun
- Doseči
- doseže
- dejavnosti
- dejavnost
- Poleg tega
- Dodatne
- Sprejetje
- škodljive
- Sporazum
- vsi
- že
- Analiza
- Še ena
- pričakujte
- uporabna
- Uporabi
- Uporaba
- pristop
- architectural
- okoli
- članek
- povezan
- pozornosti
- avtomatizirati
- razpoložljivost
- Na voljo
- zavest
- ker
- pred
- počutje
- spodaj
- merilo
- BEST
- Poleg
- Blog
- prinašajo
- Bug
- izgradnjo
- klic
- ki
- primeri
- Vzrok
- Pregledi
- stranke
- Koda
- Kodiranje
- zbiranje
- kako
- Zavezati
- Zaveza
- storjeno
- Skupno
- komunicirajo
- v primerjavi z letom
- skladnost
- deli
- Pogoji
- zaupanje
- Prepričani
- Connect
- Povezovanje
- Razmislite
- nenehno
- Potrošnik
- Potrošniki
- Posoda
- Core
- bi
- ustvarjajo
- ustvaril
- krediti
- kritično
- Kultura
- po meri
- Stranke, ki so
- Armaturna plošča
- datum
- globlje
- dostavi
- dostavo
- daje
- zahteve
- odvisno
- Ugotovite,
- Razvoj
- neposredna
- katastrofa
- porazdeljena
- navzdol
- vozi
- med
- Zgodnje
- konec koncev
- inženir
- zlasti
- vsi
- vse
- Primer
- odlično
- pričakovati
- Pričakuje
- izkušnje
- obsežen
- Napaka
- povratne informacije
- prva
- fiksna
- Osredotočite
- Osredotoča
- osredotoča
- sledi
- po
- obrazec
- je pokazala,
- iz
- polno
- funkcionalno
- funkcionalnost
- temeljna
- Prihodnost
- igra
- Gates
- ustvarjajo
- Cilj
- dobro
- Rast
- Garancija
- Smernice
- se zgodi
- se je zgodilo
- Zdravje
- pomoč
- pomoč
- Pomaga
- tukaj
- visoka
- več
- Poudarki
- zelo
- Kako
- HTTPS
- Ideje
- identificirati
- identiteta
- vpliv
- izvajati
- izvajali
- Pomembno
- izboljšanje
- izboljšalo
- izboljšanju
- V drugi
- vključuje
- Vključno
- povečal
- Industrija
- vplivajo
- Podatki
- Infrastruktura
- integracija
- Namen
- vlaganjem
- IT
- sam
- Vedite
- znano
- UČITE
- Stopnja
- malo
- lokalna
- Long
- Poglej
- Znamka
- ujemanje
- Zadeve
- zrel
- zapadlosti
- kar pomeni,
- smiselna
- pomeni
- merjenje
- mediji
- sestanki
- Meritve
- mešano
- več
- Najbolj
- premikanje
- naravna
- potrebno
- Kljub temu
- deluje
- Delovanje
- orkestracijo
- Da
- Ostalo
- Splošni
- lastne
- del
- ljudje
- performance
- kosov
- načrti
- platforma
- Platforme
- Predvajaj
- Točka
- Pogled na točko
- politike
- pozitiven
- mogoče
- potencial
- moč
- praksa
- predstaviti
- , ravnateljica
- prednostna naloga
- Težave
- Postopek
- kakovost
- Hitri
- hitro
- dosežejo
- razumno
- Obnovi
- okrevanje
- odražajo
- o
- zanesljiv
- poročilo
- Poročila
- zahteva
- obvezna
- viri
- Mnenja
- Tveganje
- cesta
- Roblox
- vloga
- koren
- tek
- Enako
- razširljive
- Lestvica
- Občutek
- Storitev
- Storitve
- Podoben
- saj
- sam
- So
- socialna
- družbeni mediji
- Socialni medijski
- Software
- Software Engineer
- nekaj
- posebna
- stati
- standardna
- Status
- trgovine
- strategije
- močna
- uspeh
- uspešno
- podpora
- sistem
- pogovor
- skupina
- tehnike
- Pogoji
- Test
- O
- zato
- 3
- vstopnice
- čas
- časovni okvir
- skupaj
- toleranca
- orodje
- temo
- Teme
- sledenje
- Prometa
- razumevanje
- us
- vrednost
- preverjanje
- Poglej
- vidljivost
- teden
- Kaj
- ali
- medtem
- brez
- delo
- deluje
- bi