Rularea oricărei platforme distribuite scalabile necesită un angajament față de fiabilitate, pentru a se asigura că clienții au ceea ce au nevoie atunci când au nevoie. Dependențe ar putea fi destul de complicate, mai ales cu o platformă atât de mare precum Roblox. Construirea unor servicii fiabile înseamnă că, indiferent de complexitatea și starea dependențelor, niciun serviciu dat nu va fi întrerupt (adică foarte disponibil), va funcționa fără erori (adică ridicat calitate) și fără erori (ex toleranță la erori).
De ce contează fiabilitatea
Echipa noastră Account Identity se angajează să atingă o fiabilitate mai mare, deoarece serviciile de conformitate pe care le-am construit sunt componente de bază ale platformei. Nerespectarea conformității poate avea consecințe grave. Costul blocării funcționării naturale a Roblox este foarte mare, cu resurse suplimentare necesare pentru a recupera după un eșec și o experiență de utilizator slăbită.
Abordarea tipică a fiabilității se concentrează în primul rând pe disponibilitate, dar în unele cazuri termenii sunt amestecați și folosiți greșit. Cele mai multe măsurători pentru disponibilitate doar evaluează dacă serviciile sunt în funcțiune și funcționează, în timp ce aspecte precum toleranța și consistența partițiilor sunt uneori uitate sau înțelese greșit.
În conformitate cu teorema CAP, orice sistem distribuit poate garanta doar două din aceste trei aspecte, astfel încât serviciile noastre de conformitate sacrifică o anumită consistență pentru a fi foarte disponibil și tolerant la partiții. Cu toate acestea, serviciile noastre au sacrificat puțin și au găsit mecanisme pentru a obține o bună coerență cu modificările arhitecturale rezonabile explicate mai jos.
Procesul de a ajunge la o fiabilitate mai mare este iterativ, cu măsurarea strânsă care se potrivește cu munca continuă pentru a preveni, găsi, detecta și remedia defectele înainte să apară incidente. Echipa noastră a identificat o valoare puternică în următoarele practici:
- Măsurarea corectă – Creați o observabilitate deplină în jurul modului în care calitatea este furnizată clienților și a modului în care dependențele ne oferă calitate.
- Anticiparea proactivă – Efectuați activități precum revizuiri arhitecturale și evaluări ale riscului de dependență.
- Prioritizează corectarea – Acordați o atenție sporită rezolvării rapoartelor de incident pentru serviciul și dependențele care sunt legate de serviciul nostru.
Construirea unei fiabilități mai mari necesită o cultură a calității. Echipa noastră a investit deja în dezvoltarea bazată pe performanță și știe că succesul unui proces depinde de adoptarea acestuia. Echipa a adoptat acest proces în totalitate și a aplicat practicile ca standard. Următoarea diagramă evidențiază componentele procesului:
Puterea măsurării corecte
Înainte de a aprofunda în metrici, trebuie făcută o clarificare rapidă cu privire la măsurătorile nivelului de serviciu.
- SLO (Service Level Objective) este obiectivul de fiabilitate pe care îl urmărește echipa noastră (adică 99.999%).
- SLI (Service Level Indicator) este fiabilitatea obținută având în vedere un interval de timp (adică 99.975% în februarie anul trecut).
- SLA (Service Level Agreement) este fiabilitatea convenită să furnizeze și să fie așteptată de consumatorii noștri la un anumit interval de timp (adică 99.99% pe săptămână).
SLI-ul ar trebui să reflecte disponibilitatea (fără răspunsuri necontrolate sau lipsă), toleranța la eșec (fără erori de serviciu) și calitatea atinsă (fără erori neașteptate). Prin urmare, am definit SLI-ul nostru drept „raportul de succes” al răspunsurilor de succes în comparație cu numărul total de solicitări trimise către un serviciu. Răspunsurile de succes sunt acele cereri care au fost expediate în timp și formă, adică nu au avut loc erori de conectivitate, servicii sau neașteptate.
Acest SLI sau Succes Ratio este colectat din punctul de vedere al consumatorilor (adică, clienții). Intenția este de a măsura experiența efectivă end-to-end oferită consumatorilor noștri, astfel încât să fim încrezători că SLA-urile sunt îndeplinite. Nu face acest lucru ar crea un sentiment fals de fiabilitate care ignoră toate preocupările legate de infrastructură pentru a se conecta cu clienții noștri. Similar cu SLI pentru consumatori, colectăm SLI de dependență pentru a urmări orice risc potențial. În practică, toate SLA-urile de dependență ar trebui să se alinieze cu SLA-ul serviciului și există o dependență directă cu acestea. Eșecul unuia implică eșecul tuturor. De asemenea, urmărim și raportăm valorile din serviciul în sine (adică, serverul), dar aceasta nu este sursa practică pentru o fiabilitate ridicată.
În plus față de SLI, fiecare versiune colectează valori de calitate care sunt raportate de fluxul nostru de lucru CI. Această practică ajută la aplicarea puternică a porților de calitate (adică, acoperirea codului) și la raportarea altor valori semnificative, cum ar fi conformitatea cu standardele de codare și analiza codului static. Acest subiect a fost tratat anterior într-un alt articol, Crearea de microservicii determinate de performanță. Respectarea diligentă a calității se adaugă atunci când vorbim despre fiabilitate, deoarece cu cât investim mai mult în obținerea unor scoruri excelente, cu atât suntem mai încrezători că sistemul nu va eșua în condiții nefavorabile.
Echipa noastră are două tablouri de bord. One oferă toată vizibilitatea atât în SLI pentru consumatori, cât și în SLI pentru dependențe. Al doilea arată toate valorile de calitate. Lucrăm la îmbinarea totul într-un singur tablou de bord, astfel încât toate aspectele la care ne pasă să fie consolidate și gata să fie raportate în orice interval de timp dat.
Anticipați eșecul
Face Recenzii de arhitectură este o parte fundamentală a fi de încredere. În primul rând, determinăm dacă există redundanță și dacă serviciul are mijloacele de a supraviețui atunci când dependențele scad. Dincolo de ideile tipice de replicare, cele mai multe dintre serviciile noastre au aplicat tehnici îmbunătățite de hidratare a memoriei cache, strategii de recuperare duală (cum ar fi cozile locale de failover) sau strategii de pierdere a datelor (cum ar fi suportul tranzacțional). Aceste subiecte sunt suficient de extinse pentru a justifica o altă intrare pe blog, dar, în cele din urmă, cea mai bună recomandare este să implementați idei care să ia în considerare scenariile de dezastru și să minimizeze orice penalizare de performanță.
Un alt aspect important de anticipat este orice ar putea îmbunătăți conectivitatea. Aceasta înseamnă să fii agresiv cu privire la latența scăzută pentru clienți și să-i pregătești pentru trafic foarte mare folosind tehnici de control al cache-ului, sidecar-uri și politici performante pentru timeout-uri, întrerupătoare de circuit și reîncercări. Aceste practici se aplică oricărui client, inclusiv cache-urile, magazinele, cozile și clienții interdependenți în HTTP și gRPC. De asemenea, înseamnă îmbunătățirea semnalelor sănătoase de la servicii și înțelegerea faptului că controalele de sănătate joacă un rol important în orchestrarea tuturor containerelor. Cele mai multe dintre serviciile noastre fac semnale mai bune pentru degradare ca parte a feedback-ului privind verificarea sănătății și verifică că toate componentele critice sunt funcționale înainte de a trimite semnale sănătoase.
Împărțirea serviciilor în părți critice și non-critice s-a dovedit utilă pentru concentrarea asupra funcționalității care contează cel mai mult. Obișnuiam să aveam puncte finale numai pentru administrator în același serviciu și, deși nu erau folosite des, au afectat valorile generale de latență. Mutarea lor la propriul serviciu a afectat fiecare măsură într-o direcție pozitivă.
Evaluarea riscului de dependență este un instrument important pentru a identifica potențialele probleme cu dependențe. Aceasta înseamnă că identificăm dependențele cu SLI scăzut și solicităm alinierea SLA. Aceste dependențe au nevoie de o atenție specială în timpul etapelor de integrare, așa că alocăm timp suplimentar pentru a evalua și testa dacă noile dependențe sunt suficient de mature pentru planurile noastre. Un exemplu bun este adoptarea timpurie pe care am avut-o pentru Roblox Storage-as-a-Service. Integrarea cu acest serviciu a necesitat depunerea biletelor de eroare și întâlniri periodice de sincronizare pentru a comunica constatările și feedback-ul. Toate aceste lucrări folosesc eticheta „fiabilitate”, astfel încât să putem identifica rapid sursa și prioritățile acesteia. Caracterizarea s-a întâmplat adesea până când am avut încrederea că noua dependență era pregătită pentru noi. Această muncă suplimentară a ajutat la tragerea dependenței la nivelul necesar de fiabilitate pe care ne așteptăm să-l oferim, acționând împreună pentru un obiectiv comun.
Aduceți structura în haos
Nu este niciodată de dorit să avem incidente. Dar atunci când se întâmplă, există informații semnificative de colectat și din care să înveți pentru a fi mai de încredere. Echipa noastră are un raport de incident de echipă care este creat dincolo de raportul tipic la nivel de companie, așa că ne concentrăm asupra tuturor incidentelor, indiferent de amploarea impactului acestora. Invocăm cauza principală și acordăm prioritate tuturor lucrărilor pentru a o atenua în viitor. Ca parte a acestui raport, apelăm la alte echipe pentru a remedia incidentele de dependență cu prioritate ridicată, pentru a urmări cu o rezoluție adecvată, pentru a analiza retrospectiv și pentru a căuta modele care s-ar putea aplica în cazul nostru.
Echipa produce a Raport lunar de fiabilitate per serviciu care include toate SLI-urile explicate aici, toate biletele pe care le-am deschis din cauza fiabilității și eventualele incidente asociate cu serviciul. Suntem atât de obișnuiți cu generarea acestor rapoarte, încât următorul pas natural este să automatizăm extragerea lor. Efectuarea acestei activități periodice este importantă și este un memento că fiabilitatea este urmărită și luată în considerare în mod constant în dezvoltarea noastră.
Instrumentele noastre includ valori personalizate și alerte îmbunătățite, astfel încât să fim contactați cât mai curând posibil atunci când apar probleme cunoscute și așteptate. Toate alertele, inclusiv fals pozitive, sunt revizuite în fiecare săptămână. În acest moment, șlefuirea întregii documentații este importantă, astfel încât consumatorii noștri să știe la ce să se aștepte când se declanșează alertele și când apar erori, iar apoi toată lumea știe ce trebuie să facă (de exemplu, manualele și ghidurile de integrare sunt aliniate și actualizate des).
In cele din urma, adoptarea calității în cultura noastră este factorul cel mai critic și decisiv în atingerea unei fiabilități mai mari. Putem observa cum aceste practici aplicate muncii noastre de zi cu zi dau deja roade. Echipa noastră este obsedată de fiabilitate și este cea mai importantă realizare a noastră. Ne-am crescut conștientizarea impactului pe care l-ar putea avea potențialele defecte și când ar putea fi introduse. Serviciile care au implementat aceste practici au atins în mod constant SLO-urile și SLA-urile. Rapoartele de fiabilitate care ne ajută să urmărim toată munca pe care am făcut-o sunt o dovadă a muncii pe care a făcut-o echipa noastră și reprezintă lecții neprețuite pentru a informa și influența alte echipe. Acesta este modul în care cultura fiabilității atinge toate componentele platformei noastre.
Drumul către o fiabilitate mai mare nu este unul ușor, dar este necesar dacă doriți să construiți o platformă de încredere care să reimagineze modul în care oamenii se unesc.
Alberto este inginer principal software în echipa Account Identity de la Roblox. El a fost în industria jocurilor de mult timp, cu credite pentru multe titluri de jocuri AAA și platforme de social media, cu un accent puternic pe arhitecturi extrem de scalabile. Acum ajută Roblox să ajungă la creștere și maturitate prin aplicarea celor mai bune practici de dezvoltare.
Mesaj Oferă fiabilitate la scară largă a platformei a apărut în primul rând pe Blog Roblox.
- "
- a
- Despre Noi
- Cont
- Obține
- realizat
- activităţi de
- activitate
- plus
- Suplimentar
- Adoptare
- advers
- Acord
- TOATE
- deja
- analiză
- O alta
- anticipa
- aplicat
- Aplică
- Aplicarea
- abordare
- arhitectural
- în jurul
- articol
- asociate
- atenţie
- automatizarea
- disponibilitate
- disponibil
- gradului de conştientizare
- deoarece
- înainte
- fiind
- de mai jos
- Benchmark
- CEL MAI BUN
- Dincolo de
- Blog
- aduce
- Bug
- construi
- apel
- pasă
- cazuri
- Provoca
- Verificări
- clientii
- cod
- Codificare
- colecta
- cum
- comite
- angajament
- comise
- Comun
- comunica
- comparație
- conformitate
- componente
- Condiții
- încredere
- încrezător
- Conectați
- Suport conectare
- Lua în considerare
- mereu
- consumator
- Consumatorii
- Recipient
- Nucleu
- ar putea
- crea
- a creat
- credite
- critic
- Cultură
- personalizat
- clienţii care
- tablou de bord
- de date
- Mai adânc
- livrate
- livrarea
- Oferă
- cererile
- depinde de
- Determina
- Dezvoltare
- direcționa
- dezastru
- distribuite
- jos
- condus
- în timpul
- Devreme
- un capăt la altul
- inginer
- mai ales
- toată lumea
- tot
- exemplu
- excelent
- aștepta
- de aşteptat
- experienţă
- extensiv
- Eșec
- feedback-ul
- First
- Repara
- Concentra
- se concentrează
- concentrându-se
- urma
- următor
- formă
- găsit
- din
- Complet
- funcțional
- funcționalitate
- fundamental
- viitor
- joc
- porti
- generator
- scop
- bine
- Creștere
- garanta
- orientări
- întâmpla
- sa întâmplat
- Sănătate
- ajutor
- ajutor
- ajută
- aici
- Înalt
- superior
- highlights-uri
- extrem de
- Cum
- HTTPS
- idei
- identifica
- Identitate
- Impactul
- punerea în aplicare a
- implementat
- important
- îmbunătăţi
- îmbunătățit
- îmbunătățirea
- În altele
- include
- Inclusiv
- a crescut
- industrie
- influență
- informații
- Infrastructură
- integrare
- intenţie
- investind
- IT
- în sine
- Cunoaște
- cunoscut
- AFLAȚI
- Nivel
- mic
- local
- Lung
- Uite
- face
- potrivire
- materie
- matur
- scadență
- sens
- semnificativ
- mijloace
- măsura
- Mass-media
- reuniuni
- Metrici
- mixt
- mai mult
- cele mai multe
- în mişcare
- Natural
- necesar
- cu toate acestea
- funcionar
- operaţie
- orchestrație
- comandă
- Altele
- global
- propriu
- parte
- oameni
- performanță
- piese
- Planurile
- platformă
- Platforme
- Joaca
- Punct
- Punct de vedere
- Politicile
- pozitiv
- posibil
- potenţial
- putere
- practică
- prezenta
- Principal
- prioritate
- probleme
- proces
- calitate
- Rapid
- repede
- ajunge
- rezonabil
- Recupera
- recuperare
- reflecta
- cu privire la
- de încredere
- raportează
- Rapoarte
- cereri de
- necesar
- Resurse
- Recenzii
- Risc
- drum
- Roblox
- Rol
- rădăcină
- funcţionare
- acelaşi
- scalabil
- Scară
- sens
- serviciu
- Servicii
- asemănător
- întrucât
- singur
- So
- Social
- social media
- platforme de socializare
- Software
- Inginer Software
- unele
- special
- stand
- standard
- Stare
- magazine
- strategii
- puternic
- succes
- de succes
- a sustine
- sistem
- vorbesc
- echipă
- tehnici de
- termeni
- test
- prin urmare
- trei
- bilete
- timp
- interval de timp
- împreună
- toleranță
- instrument
- subiect
- subiecte
- urmări
- trafic
- înţelegere
- us
- valoare
- verifica
- Vizualizare
- vizibilitate
- săptămână
- Ce
- dacă
- în timp ce
- fără
- Apartamente
- de lucru
- ar