Novinky / Hry

Poskytování spolehlivé platformy v měřítku – Roblox Blog

Poskytování spolehlivé platformy v měřítku – Roblox Blog

Provozování jakékoli škálovatelné distribuované platformy vyžaduje závazek spolehlivosti, aby zákazníci měli to, co potřebují, když to potřebují. Závislosti mohou být poměrně složité, zvláště s platformou tak velkou, jako je Roblox. Budování spolehlivých služeb znamená, že bez ohledu na složitost a stav závislostí bude daná služba nepřerušovaná (tj. dostupný), bude fungovat bez chyb (tj. kvalitě) a bez chyb (tj. odolnost proti chybám).

Proč na spolehlivosti záleží

Náš tým Account Identity se zavázal k dosažení vyšší spolehlivosti, protože služby dodržování předpisů, které jsme vytvořili, jsou hlavními součástmi platformy. Nedodržení může mít vážné následky. Náklady na zablokování přirozeného fungování Robloxu jsou velmi vysoké, s dodatečnými zdroji potřebnými k obnově po výpadku a kompromitované uživatelské zkušenosti.

Typický přístup ke spolehlivosti se zaměřuje především na dostupnost, ale v některých případech jsou pojmy zaměňovány a zneužívány. Většina metrik dostupnosti jednoduše posuzuje, zda jsou služby spuštěny a běží, zatímco aspekty jako tolerance a konzistence oddílů jsou někdy přehlíženy nebo nepochopeny.

Podle teorému CAP může každý distribuovaný systém zaručit pouze dva z těchto tří aspektů. Naše služby dodržování předpisů proto obětují určitou konzistenci, aby byly vysoce dostupné a odolné vůči oddílům. Naše služby však obětovaly jen málo a našly mechanismy k dosažení dobré konzistence s rozumnými architektonickými změnami vysvětlenými níže.

Proces k dosažení vyšší spolehlivosti je iterativní, s přesnými opatřeními odpovídajícími nepřetržité práci na prevenci, nalezení, detekci a nápravě poruch dříve, než dojde k incidentům. Náš tým identifikoval velkou hodnotu v následujících postupech:

  • Přesné měření – Vybudujte plnou sledovatelnost toho, jak je kvalita dodávána zákazníkům a jak nám kvalitu dodávají závislosti.
  • Proaktivní předvídání – Provádět činnosti, jako jsou architektonické revize a posouzení rizik závislosti.
  • Upřednostněte nápravu – Věnujte větší pozornost řešení hlášení incidentů pro službu a závislostí souvisejících s naší službou.

Budování větší spolehlivosti vyžaduje kulturu kvality. Náš tým již investoval do vývoje řízeného výkonem a ví, že úspěch procesu závisí na jeho přijetí. Tým přijal tento proces jako celek a aplikoval postupy jako standard. Následující schéma ukazuje součásti procesu:

Síla dobré míry

Než se ponoříme hlouběji do metrik, je zde rychlé vysvětlení týkající se metrik úrovně služeb.

  • Cíl SLO (Service Level Objective) je cíl spolehlivosti, který náš tým sleduje (99,999 %).
  • SLI (Service Level Indicator) je spolehlivost dosažená za dané období (tj. 99,975 % loni v únoru).
  • SLA (Service Level Agreement) je spolehlivost, kterou se zavazujeme poskytovat a kterou naši spotřebitelé očekávají v daném časovém rámci (tj. 99,99 % za týden).

SLI by měl odrážet dostupnost (žádné nespravované nebo chybějící odpovědi), odolnost proti chybám (žádné chyby služby) a dosaženou kvalitu (žádné neočekávané chyby). Proto jsme definovali naše SLI jako „úspěšnost“ úspěšných odpovědí vzhledem k celkovému počtu požadavků odeslaných službě. Úspěšné odpovědi jsou požadavky, které byly odeslány včas a ve formuláři, což znamená, že ne

došlo k chybě připojení, služby nebo neočekávaným chybám.

Tento SLI nebo Success Ratio je shromažďován z pohledu spotřebitelů (tj. zákazníků). Záměrem je měřit skutečnou komplexní zkušenost poskytovanou našim spotřebitelům, abychom měli jistotu, že jsou dodržovány smlouvy SLA. Pokud tak neučiníte, vznikne falešný pocit spolehlivosti, který ignoruje všechny problémy s infrastrukturou pro spojení s našimi zákazníky. Podobně jako u spotřebitelských SLI shromažďujeme závislostní SLI, abychom mohli sledovat jakékoli potenciální riziko. V praxi se všechny SLA pro závislost musí shodovat se SLA služeb a existuje na nich přímá závislost. Selhání jednoho znamená selhání všech. Sledujeme a hlásíme také metriky ze samotné služby (tj. serveru), ale to není praktický zdroj vysoké spolehlivosti.

Kromě SLI každé sestavení shromažďuje metriky kvality, které jsou hlášeny naším pracovním postupem CI. Tato praxe může silně prosazovat bariéry kvality (tj. pokrytí kódem) a vykazovat další smysluplné metriky, jako je dodržování standardů kódování a statická analýza kódu. Toto téma již bylo zmíněno v jiném článku, Vytvářejte mikroslužby řízené výkonem. Pečlivé dodržování kvality přispívá ke spolehlivosti, protože čím více investujeme do dosažení vynikajících výsledků, tím více věříme, že systém za nepříznivých podmínek neselže.

Náš tým má dva řídicí panely. Jeden poskytuje plnou viditelnost spotřebitelského SLI a závislého SLI. Druhý ukazuje všechny metriky kvality. Pracujeme na tom, abychom vše sloučili do jediného dashboardu, aby byly všechny aspekty, na kterých nám záleží, konsolidované a připravené k reportování kdykoli.

Předvídat selhání

Akce Architektonické recenze je základním prvkem spolehlivosti. Nejprve určíme, zda je přítomna redundance a zda má služba prostředky k přežití, když závislost poklesne. Kromě typických nápadů replikace používá většina našich služeb vylepšené techniky hydratace dvojité mezipaměti, strategie dvojité obnovy (jako jsou místní fronty s převzetím služeb při selhání) nebo strategie ztráty dat (jako je podpora transakcí). Tato témata jsou dostatečně obsáhlá, aby si zasloužila další příspěvek na blogu, ale nakonec je nejlepším doporučením implementovat nápady, které zohledňují katastrofické scénáře a minimalizují jakékoli snížení výkonu.

Dalším důležitým aspektem, který je třeba předvídat, je cokoli, co by mohlo zlepšit konektivitu. To znamená být agresivní vůči klientům s nízkou latencí a připravit je na velmi vysoký provoz pomocí technik řízení mezipaměti, postranních vozíků a zásad výkonu pro časové limity, jističe a opakování. Tyto postupy platí pro všechny klienty, včetně mezipamětí, obchodů, front a vzájemně závislých klientů v HTTP a gRPC. Znamená to také zlepšit signály zdravých služeb a pochopit, že kontroly stavu hrají důležitou roli ve veškeré orchestraci kontejnerů. Většina našich služeb poskytuje lepší degradované signály jako součást zpětné vazby pro kontrolu stavu a před odesláním zdravých signálů ověřuje, že všechny kritické komponenty jsou funkční.

Rozdělení služeb na kritické a nekritické prvky se ukázalo jako užitečné při zaměření na funkce, které jsou nejdůležitější. Dříve jsme měli ve stejné službě koncové body pouze pro správce, a přestože se nepoužívaly často, měly dopad na celkové metriky latence. Jejich přesun do vlastních služeb měl pozitivní dopad na každou metriku.

Hodnocení rizika závislosti je důležitým nástrojem pro identifikaci potenciálních problémů se závislostí. To znamená, že identifikujeme závislosti s nízkým SLI a požadujeme sladění SLA. Tyto závislosti vyžadují během integračních kroků zvláštní pozornost. Trávíme tedy více času hodnocením a testováním, zda jsou nové závislosti dostatečně vyspělé pro naše plány. Dobrým příkladem je brzké přijetí Roblox Storage-as-a-Service. Integrace s touto službou vyžadovala podávání záznamů o chybách a pravidelné synchronizační schůzky za účelem sdělování výsledků a zpětné vazby. Veškerá tato práce využívá značku „reliability“, abychom mohli rychle identifikovat její zdroj a priority. Charakterizace často probíhala, dokud jsme si nebyli jisti, že nová závislost je pro nás připravena. Tato dodatečná práce pomohla dostat závislost na požadovanou úroveň spolehlivosti, kterou očekáváme, že poskytneme společným jednáním pro společný cíl.

Strukturujte chaos

Nikdy není žádoucí mít incidenty. Ale když k nim dojde, je třeba shromáždit smysluplné informace a využít je, aby byly spolehlivější. Náš tým má týmovou zprávu o incidentu, která je vytvořena nad rámec typické celopodnikové zprávy, takže se zaměřujeme na všechny incidenty bez ohledu na velikost jejich dopadu. Odvoláváme se na hlavní příčinu a upřednostňujeme veškerou práci na jejím zmírnění v budoucnu. V rámci této zprávy zapojujeme další týmy, aby řešily incidenty závislostí s vysokou prioritou, sledovaly je s vhodným řešením, provedly retrospektivu a hledaly vzory, které by se nás mohly týkat.

Tým vyrábí a Měsíční zpráva o spolehlivosti podle servisu to zahrnuje všechny SLI vysvětlené zde, všechny vstupenky, které jsme otevřeli kvůli spolehlivosti, a všechny možné incidenty spojené se službou. Na generování těchto zpráv jsme si tak zvykli, že přirozeným dalším krokem je automatizace jejich extrakce. Pravidelné provádění této činnosti je důležité a připomínáme, že spolehlivost je neustále monitorována a zohledňována při našem vývoji.

Naše vybavení zahrnuje vlastní metriky a vylepšená upozornění, abychom byli co nejdříve informováni, když nastanou známé a očekávané problémy. Všechna upozornění, včetně falešně pozitivních, jsou kontrolována každý týden. V tuto chvíli je důležité vypilovat veškerou dokumentaci, aby naši spotřebitelé věděli, co mohou očekávat, když se spustí výstrahy a když se vyskytnou chyby, a aby pak každý věděl, co má dělat (např. integrace příruček a pokynů jsou sladěny a často aktualizovány).

konečně, Začlenění kvality do naší kultury je nejdůležitějším a rozhodujícím faktorem pro dosažení vyšší spolehlivosti. Můžeme pozorovat, jak tyto praktiky aplikované na naši každodenní práci již přinášejí ovoce. Náš tým je posedlý spolehlivostí a to je náš nejdůležitější úspěch. Zvýšili jsme naše povědomí o tom, jaký dopad by mohly mít potenciální nedostatky a kdy by mohly být zavedeny. Služby, které zavedly tyto postupy, důsledně plnily své SLO a SLA. Zprávy o spolehlivosti, které nám pomáhají sledovat veškerou práci, kterou jsme udělali, jsou důkazem práce našeho týmu a jsou neocenitelnými lekcemi pro informování a ovlivňování ostatních týmů. Takto se kultura spolehlivosti dotýká všech součástí naší platformy.

Cesta k větší důvěře není snadná, ale je nezbytná, pokud chcete vytvořit platformu důvěry, která znovu objeví způsob, jakým se lidé scházejí.


Alberto je senior softwarový inženýr v týmu Account Identity ve společnosti Roblox. Má dlouhou historii v herním průmyslu, s kredity na mnoha herních titulech AAA a platformách sociálních médií se silným zaměřením na vysoce škálovatelné architektury. Nyní pomáhá Robloxu dosáhnout růstu a zralosti tím, že aplikuje osvědčené postupy vývoje.