Kako naredimo Robloxovo infrastrukturo bolj učinkovito in odporno - Blog Roblox

Kako naredimo Robloxovo infrastrukturo bolj učinkovito in odporno – Blog Roblox

Izvorno vozlišče: 2998456

Ker je Roblox rasel v zadnjih 16+ letih, sta se povečala tudi obseg in kompleksnost tehnične infrastrukture, ki podpira milijone poglobljenih 3D soizkušenj. Število strojev, ki jih podpiramo, se je v zadnjih dveh letih več kot potrojilo, s približno 36,000 na dan 30. junija 2021 na skoraj 145,000 danes. Za podporo teh stalnih izkušenj za ljudi po vsem svetu je potrebnih več kot 1,000 notranjih storitev. Da bi nam pomagali nadzorovati stroške in zakasnitev v omrežju, uvajamo in upravljamo te naprave kot del po meri zgrajene in hibridne infrastrukture zasebnega oblaka, ki deluje predvsem na lokaciji.  

Naša infrastruktura trenutno podpira več kot 70 milijonov dnevno aktivnih uporabnikov po vsem svetu, vključno z ustvarjalci, ki se zanašajo na Roblox Gospodarstvo za svoja podjetja. Vsi ti milijoni ljudi pričakujejo zelo visoko stopnjo zanesljivosti. Glede na poglobljeno naravo naših izkušenj obstaja izjemno nizka toleranca za zakasnitve ali zakasnitve, kaj šele izpade. Roblox je platforma za komunikacijo in povezovanje, kjer se ljudje združujejo v poglobljenih 3D izkušnjah. Ko ljudje komunicirajo kot njihovi avatarji v poglobljenem prostoru, so tudi manjše zamude ali napake bolj opazne kot pri besedilni niti ali konferenčnem klicu.

Oktobra 2021 smo doživeli izpad celotnega sistema. Začelo se je majhno, s težavo v eni komponenti v enem podatkovnem centru. Vendar se je hitro razširilo, ko smo preiskovali, in na koncu povzročilo 73-urni izpad. Takrat sva si delila oboje podrobnosti o tem, kaj se je zgodilo in nekaj naših zgodnjih spoznanj iz te težave. Od takrat preučujemo ta spoznanja in si prizadevamo povečati odpornost naše infrastrukture na vrste okvar, ki se pojavljajo v vseh obsežnih sistemih zaradi dejavnikov, kot so ekstremni prometni skoki, vreme, okvare strojne opreme, programske napake ali samo ljudje, ki delajo napake. Kako zagotovimo, da se težava v posamezni komponenti ali skupini komponent ne razširi na celoten sistem, ko pride do teh napak? Na to vprašanje smo se osredotočali zadnji dve leti in medtem ko delo poteka, se to, kar smo naredili do zdaj, že obrestuje. Na primer, v prvi polovici leta 2023 smo prihranili 125 milijonov delovnih ur na mesec v primerjavi s prvo polovico leta 2022. Danes delimo delo, ki smo ga že opravili, in našo dolgoročnejšo vizijo gradnje bolj odporen infrastrukturni sistem.

Izdelava povratne zapore

V obsežnih infrastrukturnih sistemih se manjše okvare zgodijo večkrat na dan. Če ima en stroj težavo in ga je treba umakniti iz uporabe, je to obvladljivo, saj večina podjetij vzdržuje več primerkov svojih zalednih storitev. Torej, ko ena instanca odpove, drugi prevzamejo delovno obremenitev. Za odpravo teh pogostih napak so zahteve običajno nastavljene tako, da samodejno znova poskusijo, če dobijo napako.

To postane izziv, ko sistem ali oseba poskuša preveč agresivno, kar lahko postane način, da se te manjše napake razširijo po infrastrukturi na druge storitve in sisteme. Če omrežje ali uporabnik poskuša dovolj vztrajno, bo sčasoma preobremenilo vse primerke te storitve in potencialno druge sisteme na globalni ravni. Naš izpad leta 2021 je bil posledica nečesa, kar je precej običajno v velikih sistemih: okvara se začne kot majhna, nato se razširi po sistemu in tako hitro postane velika, da jo je težko rešiti, preden se vse pokvari. 

V času našega izpada smo imeli en aktiven podatkovni center (s komponentami v njem, ki delujejo kot rezerva). Potrebovali smo zmožnost ročnega preklopa na nov podatkovni center, ko je zaradi težave prišlo do izpada obstoječega. Naša prva prednostna naloga je bila zagotoviti varnostno uvedbo Robloxa, zato smo to varnostno kopijo zgradili v novem podatkovnem centru, ki se nahaja v drugi geografski regiji. To je dodalo zaščito za najslabši možni scenarij: izpad, ki se razširi na dovolj komponent v podatkovnem centru, da postane popolnoma nedelujoč. Zdaj imamo en podatkovni center, ki obravnava delovne obremenitve (aktiven), in enega v pripravljenosti, ki služi kot rezerva (pasivno). Naš dolgoročni cilj je preiti iz te aktivno-pasivne konfiguracije v aktivno-aktivno konfiguracijo, v kateri oba podatkovna centra upravljata z delovnimi obremenitvami, z izravnalnikom obremenitve, ki porazdeljuje zahteve med njima na podlagi zakasnitve, zmogljivosti in zdravja. Ko bo to vzpostavljeno, pričakujemo še višjo zanesljivost za ves Roblox in možnost odpovedi skoraj v trenutku in ne v nekaj urah.

Prehod na mobilno infrastrukturo

Naša naslednja prednostna naloga je bila ustvariti močne protivlomne zidove znotraj vsakega podatkovnega centra, da bi zmanjšali možnost okvare celotnega podatkovnega centra. Celice (nekatera podjetja jim pravijo grozdi) so v bistvu niz strojev in tako ustvarjamo te stene. Storitve posnemamo znotraj in med celicami za dodatno redundanco. Navsezadnje želimo, da vse storitve v Robloxu delujejo v celicah, tako da lahko izkoristijo tako močne zaščite pred udarci kot tudi redundanco. Če celica ne deluje več, jo je mogoče varno deaktivirati. Podvajanje v celicah omogoča, da storitev deluje, medtem ko je celica popravljena. V nekaterih primerih lahko popravilo celice pomeni popolno ponovno pripravo celice. V celotni panogi je brisanje in ponovna oskrba posameznega stroja ali majhnega niza strojev dokaj običajno, vendar to za celotno celico, ki vsebuje približno 1,400 strojev, ni. 

Da bi to delovalo, morajo biti te celice v veliki meri enotne, tako da lahko hitro in učinkovito premikamo delovne obremenitve iz ene celice v drugo. Postavili smo določene zahteve, ki jih morajo izpolnjevati storitve, preden se izvajajo v celici. Na primer, storitve morajo biti zaprte v vsebnike, zaradi česar so veliko bolj prenosljive in preprečujejo, da bi kdorkoli spreminjal konfiguracijo na ravni OS. Za celice smo sprejeli filozofijo infrastrukture kot kode: v našem repozitoriju izvorne kode smo vključili definicijo vsega, kar je v celici, tako da jo lahko hitro znova zgradimo iz nič z avtomatiziranimi orodji. 

Vse storitve trenutno ne izpolnjujejo teh zahtev, zato smo si prizadevali pomagati lastnikom storitev, da jih izpolnijo, kjer je to mogoče, in zgradili nova orodja, ki olajšajo selitev storitev v celice, ko so pripravljene. Na primer, naše novo orodje za uvajanje samodejno »razporedi« uvajanje storitve po celicah, tako da lastnikom storitev ni treba razmišljati o strategiji podvajanja. Zaradi te stopnje strogosti je proces selitve veliko bolj zahteven in dolgotrajen, vendar bo dolgoročno izplačilo sistem, kjer: 

  • Veliko lažje je omejiti okvaro in preprečiti njeno širjenje na druge celice; 
  • Naši infrastrukturni inženirji so lahko učinkovitejši in se premikajo hitreje; in 
  • Inženirjem, ki gradijo storitve na ravni izdelka, ki so na koncu nameščene v celicah, ni treba vedeti ali skrbeti, v katerih celicah se njihove storitve izvajajo.

Reševanje večjih izzivov

Podobno kot se protipožarna vrata uporabljajo za zadrževanje ognja, celice delujejo kot močni razstrelitveni zidovi v naši infrastrukturi, da pomagajo zajeziti kakršno koli težavo, ki sproži okvaro znotraj ene celice. Sčasoma bodo vse storitve, ki sestavljajo Roblox, redundantno nameščene znotraj in med celicami. Ko je to delo končano, bi se lahko težave še vedno razširile dovolj široko, da bi celotna celica onemogočila delovanje, vendar bi bilo izjemno težko, da bi se težava razširila izven te celice. In če nam uspe narediti celice zamenljive, bo okrevanje bistveno hitrejše ker bomo lahko preklopili na drugo celico in preprečili, da bi težava vplivala na končne uporabnike. 

Kjer to postane težavno, je dovolj ločiti te celice, da se zmanjša možnost širjenja napak, medtem ko stvari ostanejo zmogljive in funkcionalne. V zapletenem infrastrukturnem sistemu morajo storitve komunicirati med seboj, da si delijo poizvedbe, informacije, delovne obremenitve itd. Ko te storitve posnemamo v celice, moramo premisliti, kako upravljamo navzkrižno komunikacijo. V idealnem svetu preusmerjamo promet iz ene nezdrave celice v druge zdrave celice. Toda kako naj rešimo "vprašanje o smrti" - to je povzroča celica biti nezdrava? Če to poizvedbo preusmerimo v drugo celico, lahko povzroči, da ta celica postane nezdrava na način, ki se mu poskušamo izogniti. Najti moramo mehanizme za preusmeritev »dobrega« prometa iz nezdravih celic, hkrati pa zaznati in zatreti promet, ki povzroča, da celice postanejo nezdrave. 

Kratkoročno smo namestili kopije računalniških storitev v vsako računalniško celico, tako da lahko večino zahtev podatkovnemu centru oskrbi ena sama celica. Prav tako uravnavamo obremenitev prometa med celicami. Če pogledamo dlje, smo začeli graditi postopek odkrivanja storitev naslednje generacije, ki ga bo izkoristila mreža storitev, za katerega upamo, da ga bomo dokončali leta 2024. To nam bo omogočilo izvajanje prefinjenih politik, ki bodo omogočale komunikacijo med celicami le, ko ne bo negativno vplivalo na preklopne celice. Leta 2024 bo na voljo tudi metoda za usmerjanje odvisnih zahtev k različici storitve v isti celici, kar bo zmanjšalo promet med celicami in s tem zmanjšalo tveganje širjenja napak med celicami.

Na vrhuncu se več kot 70 odstotkov prometa naših zalednih storitev izvaja iz celic in naučili smo se veliko o tem, kako ustvariti celice, vendar pričakujemo več raziskav in testiranj, ko nadaljujemo s selitvijo naših storitev do leta 2024 in onstran. Ko napredujemo, bodo ti udarni zidovi postajali vse močnejši.

Selitev vedno vklopljene infrastrukture

Roblox je globalna platforma, ki podpira uporabnike po vsem svetu, zato ne moremo premikati storitev v času izven obremenitve ali v času nedelovanja, kar dodatno otežuje proces selitve vseh naših strojev v celice in izvajanje naših storitev v teh celicah. . Imamo na milijone vedno vključenih izkušenj, ki jih je treba še naprej podpirati, tudi ko premaknemo stroje, na katerih delujejo, in storitve, ki jih podpirajo. Ko smo začeli s tem procesom, nismo imeli na desettisoče strojev, ki bi samo sedeli neuporabljeni in bili na voljo za selitev teh delovnih obremenitev. 

Imeli pa smo majhno število dodatnih strojev, ki smo jih kupili v pričakovanju prihodnje rasti. Za začetek smo z uporabo teh strojev zgradili nove celice, nato pa vanje prenesli delovne obremenitve. Cenimo učinkovitost in zanesljivost, zato smo namesto, da bi šli ven in kupili več strojev, ko nam je zmanjkalo »rezervnih« strojev, zgradili več celic z brisanjem in ponovnim zagotavljanjem strojev, iz katerih smo prešli. Nato smo delovne obremenitve prenesli na te znova pripravljene stroje in postopek začeli znova. Ta proces je zapleten – ko se stroji zamenjajo in sprostijo za vgradnjo v celice, se ne sprostijo na idealen in urejen način. Fizično so razdrobljeni po podatkovnih dvoranah, tako da jih moramo zagotavljati po delih, kar zahteva postopek defragmentacije na ravni strojne opreme, da so lokacije strojne opreme usklajene z obsežnimi domenami fizičnih napak. 

Del naše ekipe inženirjev za infrastrukturo je osredotočen na selitev obstoječih delovnih obremenitev iz našega podedovanega ali »predceličnega« okolja v celice. To delo se bo nadaljevalo, dokler ne bomo preselili na tisoče različnih infrastrukturnih storitev in na tisoče zalednih storitev v novo zgrajene celice. Pričakujemo, da bo to zaradi nekaterih zapletenih dejavnikov trajalo vse naslednje leto in po možnosti v 2025. Prvič, to delo zahteva izdelavo robustnega orodja. Na primer, potrebujemo orodje za samodejno ponovno uravnoteženje velikega števila storitev, ko uvedemo novo celico – brez vpliva na naše uporabnike. Videli smo tudi storitve, ki so bile zgrajene na podlagi predpostavk o naši infrastrukturi. Te storitve moramo revidirati, da ne bodo odvisne od stvari, ki bi se lahko spremenile v prihodnosti, ko se preselimo v celice. Implementirali smo tudi način iskanja znanih vzorcev načrtovanja, ki ne bodo dobro delovali s celično arhitekturo, kot tudi metodični postopek testiranja za vsako storitev, ki je bila preseljena. Ti postopki nam pomagajo preprečiti morebitne težave, s katerimi se soočajo uporabniki, ki jih povzroči nezdružljivost storitve s celicami.

Danes skoraj 30,000 strojev upravljajo celice. To je le delček naše celotne flote, vendar je bil prehod do zdaj zelo gladek brez negativnega vpliva na igralce. Naš končni cilj je, da naši sistemi vsak mesec dosežejo 99.99-odstotni čas delovanja uporabnikov, kar pomeni, da ne bi motili več kot 0.01 odstotka delovnih ur. Izpadov v celotni panogi ni mogoče popolnoma odpraviti, vendar je naš cilj zmanjšati vse izpade Robloxa do stopnje, da je skoraj neopazna.

Pripravljenost na prihodnost, ko se širimo

Čeprav so se naša zgodnja prizadevanja izkazala za uspešna, naše delo na celicah še zdaleč ni končano. Ker se Roblox še naprej širi, si bomo še naprej prizadevali izboljšati učinkovitost in odpornost naših sistemov s to in drugimi tehnologijami. Sčasoma bo platforma postajala vse bolj odporna na težave in vse težave, ki se pojavijo, bi morale postopoma postajati manj vidne in moteče za ljudi na naši platformi.

Če povzamemo, do danes imamo: 

  • Zgrajen je bil drugi podatkovni center in uspešno dosežen aktivni/pasivni status. 
  • Ustvarili smo celice v naših aktivnih in pasivnih podatkovnih centrih in v te celice uspešno preselili več kot 70 odstotkov prometa naših zalednih storitev.
  • Določite zahteve in najboljše prakse, ki jih bomo morali upoštevati, da bodo vse celice enotne, ko nadaljujemo s selitvijo preostale naše infrastrukture. 
  • Začel neprekinjen proces gradnje močnejših "eksplozivnih sten" med celicami. 

Ko bodo te celice bolj zamenljive, bo med celicami manj preslušavanja. To nam odpira nekaj zelo zanimivih priložnosti v smislu povečanja avtomatizacije pri spremljanju, odpravljanju težav in celo samodejnem prestavljanju delovnih obremenitev. 

Septembra smo začeli izvajati tudi aktivne/aktivne poskuse v naših podatkovnih centrih. To je še en mehanizem, ki ga preizkušamo, da bi izboljšali zanesljivost in zmanjšali čase preklopa. Ti poskusi so pomagali identificirati številne vzorce načrtovanja sistema, predvsem okoli dostopa do podatkov, ki jih moramo predelati, ko si prizadevamo postati popolnoma aktivni-aktivni. Na splošno je bil poskus dovolj uspešen, da je deloval za promet omejenega števila naših uporabnikov. 

Navdušeni smo, da nadaljujemo s tem delom, da platformi zagotovimo večjo učinkovitost in odpornost. To delo na celicah in aktivno-aktivni infrastrukturi, skupaj z našimi drugimi prizadevanji, nam bo omogočilo, da zrastemo v zanesljiv, visoko zmogljiv pripomoček za milijone ljudi in da se še naprej širimo, ko si prizadevamo resnično povezati milijardo ljudi. čas.

Časovni žig:

Več od Roblox