Å kjøre en hvilken som helst skalerbar distribuert plattform krever en forpliktelse til pålitelighet, for å sikre at kundene har det de trenger når de trenger det. Avhengighetene kan være ganske intrikate, spesielt med en plattform så stor som Roblox. Å bygge pålitelige tjenester betyr at, uavhengig av kompleksiteten og statusen til avhengigheter, vil enhver gitt tjeneste ikke bli avbrutt (dvs. tilgjengelig), vil fungere feilfritt (dvs. høy kvalitet) og uten feil (dvs feiltoleranse).
Hvorfor pålitelighet er viktig
Kontoidentitetsteamet vårt er forpliktet til å oppnå høyere pålitelighet, siden samsvarstjenestene vi bygde er kjernekomponenter til plattformen. Brudd etterlevelse kan få alvorlige konsekvenser. Kostnaden for å blokkere Roblox sin naturlige drift er svært høy, med ekstra ressurser som er nødvendige for å komme seg etter en feil og en svekket brukeropplevelse.
Den typiske tilnærmingen til pålitelighet fokuserer først og fremst på tilgjengelighet, men i noen tilfeller er begreper blandet og misbrukt. De fleste målinger for tilgjengelighet vurderer bare om tjenester er oppe og går, mens aspekter som partisjonstoleranse og konsistens noen ganger blir glemt eller misforstått.
I samsvar med CAP-teoremet kan ethvert distribuert system bare garantere to av disse tre aspektene, så våre compliance-tjenester ofrer litt konsistens for å være svært tilgjengelige og partisjonstolerante. Ikke desto mindre ofret våre tjenester lite og fant mekanismer for å oppnå god konsistens med rimelige arkitektoniske endringer forklart nedenfor.
Prosessen for å oppnå høyere pålitelighet er iterativ, med tette målinger som matcher kontinuerlig arbeid for å forhindre, finne, oppdage og fikse feil før hendelser oppstår. Teamet vårt identifiserte sterk verdi i følgende praksis:
- Riktig måling – Bygg full observerbarhet rundt hvordan kvalitet leveres til kunder og hvordan avhengigheter leverer kvalitet til oss.
- Proaktiv forventning – Utføre aktiviteter som arkitektoniske vurderinger og avhengighetsrisikovurderinger.
- Prioriter korrigering – Gi større oppmerksomhet til hendelsesrapportløsning for tjenesten og avhengigheter som er knyttet til vår tjeneste.
Å bygge høyere pålitelighet krever en kvalitetskultur. Teamet vårt investerte allerede i ytelsesdrevet utvikling og vet at suksessen til en prosess avhenger av at den tas i bruk. Teamet vedtok denne prosessen i sin helhet og brukte praksisen som en standard. Følgende diagram fremhever komponentene i prosessen:
Kraften til riktig måling
Før du dykker dypere inn i beregninger, er det en rask avklaring å gjøre angående servicenivåmålinger.
- SLO (Service Level Objective) er pålitelighetsmålet vårt team sikter mot (dvs. 99.999%).
- SLI (Service Level Indicator) er den oppnådde påliteligheten gitt en tidsramme (dvs. 99.975 % i februar i fjor).
- SLA (Service Level Agreement) er påliteligheten som er avtalt å levere og forventes av våre forbrukere på en gitt tidsramme (dvs. 99.99 % i uken).
SLI-en skal gjenspeile tilgjengeligheten (ingen ubehandlede eller manglende svar), feiltoleransen (ingen tjenestefeil) og oppnådd kvalitet (ingen uventede feil). Derfor definerte vi vår SLI som "suksessforholdet" for vellykkede svar sammenlignet med det totale antallet forespørsler sendt til en tjeneste. Vellykkede svar er de forespørslene som ble sendt i tid og form, som betyr nei tilkobling, service eller uventede feil skjedde.
Denne SLI-en eller suksessforholdet er samlet fra forbrukernes synspunkt (dvs. klienter). Hensikten er å måle den faktiske ende-til-ende-opplevelsen levert til våre forbrukere, slik at vi føler oss trygge på at SLAer blir oppfylt. Å ikke gjøre det vil skape en falsk følelse av pålitelighet som ignorerer alle infrastrukturproblemer for å få kontakt med kundene våre. I likhet med forbruker-SLI, samler vi inn avhengighets-SLI for å spore potensiell risiko. I praksis bør alle avhengighets-SLA-er samsvare med tjeneste-SLA, og det er en direkte avhengighet med dem. Feilen av én innebærer feil for alle. Vi sporer og rapporterer også beregninger fra selve tjenesten (dvs. serveren), men dette er ikke den praktiske kilden for høy pålitelighet.
I tillegg til SLI-ene, samler hver bygg inn kvalitetsmålinger som rapporteres av CI-arbeidsflyten vår. Denne praksisen bidrar til sterkt å håndheve kvalitetsporter (dvs. kodedekning) og rapportere andre meningsfulle beregninger, for eksempel overholdelse av kodestandarder og statisk kodeanalyse. Dette emnet ble tidligere dekket i en annen artikkel, Bygge mikrotjenester drevet av ytelse. Iherdig overholdelse av kvalitet legger seg når man snakker om pålitelighet, for jo mer vi investerer i å oppnå gode skårer, desto tryggere er vi på at systemet ikke vil svikte under ugunstige forhold.
Teamet vårt har to dashbord. Man leverer all synlighet i både Consumers SLI og Dependencies SLI. Den andre viser alle kvalitetsmålinger. Vi jobber med å slå sammen alt til ett enkelt dashbord, slik at alle aspektene vi bryr oss om er konsolidert og klare til å bli rapportert innen en gitt tidsramme.
Forutse fiasko
Driver med Arkitektoniske anmeldelser er en grunnleggende del av å være pålitelig. Først avgjør vi om redundans er til stede og om tjenesten har midler til å overleve når avhengighetene går ned. Utover de typiske replikeringsideene, brukte de fleste av tjenestene våre forbedrede teknikker for dobbel cache-hydrering, doble gjenopprettingsstrategier (som for eksempel failover lokale køer) eller strategier for tap av data (som transaksjonsstøtte). Disse emnene er omfattende nok til å rettferdiggjøre et nytt blogginnlegg, men til syvende og sist er den beste anbefalingen å implementere ideer som vurderer katastrofescenarier og minimerer ytelsesstraff.
Et annet viktig aspekt å forutse er alt som kan forbedre tilkoblingen. Det betyr å være aggressiv når det gjelder lav ventetid for klienter og forberede dem på svært høy trafikk ved å bruke hurtigbufferkontrollteknikker, sidevogner og ytelsespolicyer for tidsavbrudd, kretsbrytere og nye forsøk. Disse praksisene gjelder for enhver klient, inkludert cacher, butikker, køer og gjensidig avhengige klienter i HTTP og gRPC. Det betyr også å forbedre sunne signaler fra tjenestene og forstå at helsesjekker spiller en viktig rolle i all containerorkestrering. De fleste av tjenestene våre gir bedre signaler for forringelse som en del av tilbakemeldingen på helsesjekken og verifiserer at alle kritiske komponenter er funksjonelle før de sender sunne signaler.
Å bryte ned tjenester i kritiske og ikke-kritiske deler har vist seg nyttig for å fokusere på funksjonaliteten som betyr mest. Vi pleide å ha endepunkter bare for administratorer i den samme tjenesten, og selv om de ikke ble brukt ofte, påvirket de den generelle ventetiden. Å flytte dem til sin egen tjeneste påvirket hver beregning i positiv retning.
Risikovurdering av avhengighet er et viktig verktøy for å identifisere potensielle problemer med avhengigheter. Dette betyr at vi identifiserer avhengigheter med lav SLI og ber om SLA-justering. Disse avhengighetene trenger spesiell oppmerksomhet under integreringstrinn, så vi bruker ekstra tid på å måle og teste om de nye avhengighetene er modne nok for planene våre. Et godt eksempel er den tidlige bruken av Roblox Storage-as-a-Service. Integrasjonen med denne tjenesten krevde innlevering av feilbilletter og periodiske synkroniseringsmøter for å kommunisere funn og tilbakemeldinger. Alt dette arbeidet bruker «pålitelighet»-taggen slik at vi raskt kan identifisere kilden og prioriteringene. Karakterisering skjedde ofte inntil vi hadde tillit til at den nye avhengigheten var klar for oss. Dette ekstraarbeidet bidro til å trekke avhengigheten til det nødvendige nivået av pålitelighet vi forventer å levere sammen for et felles mål.
Bring struktur til kaos
Det er aldri ønskelig med hendelser. Men når de skjer, er det meningsfull informasjon å samle inn og lære av for å være mer pålitelig. Teamet vårt har en teamhendelsesrapport som er laget utover den typiske bedriftsomfattende rapporten, så vi fokuserer på alle hendelser uavhengig av omfanget av deres innvirkning. Vi nevner årsaken og prioriterer alt arbeid for å avbøte det i fremtiden. Som en del av denne rapporten kaller vi inn andre team for å fikse avhengighetshendelser med høy prioritet, følge opp med riktig løsning, tilbakeblikk og se etter mønstre som kan gjelde oss.
Teamet produserer en Månedlig pålitelighetsrapport per tjeneste som inkluderer alle SLI-ene som er forklart her, alle billetter vi har åpnet på grunn av pålitelighet og eventuelle hendelser knyttet til tjenesten. Vi er så vant til å generere disse rapportene at det neste naturlige trinnet er å automatisere utvinningen. Å gjøre denne periodiske aktiviteten er viktig, og det er en påminnelse om at pålitelighet hele tiden spores og vurderes i vår utvikling.
Instrumenteringen vår inkluderer tilpassede beregninger og forbedrede varsler slik at vi blir søkt så snart som mulig når kjente og forventede problemer oppstår. Alle varsler, inkludert falske positiver, gjennomgås hver uke. På dette tidspunktet er det viktig å polere all dokumentasjon slik at forbrukerne våre vet hva de kan forvente når varsler utløses og når feil oppstår, og da vet alle hva de skal gjøre (f.eks. blir håndbøker og integrasjonsretningslinjer justert og oppdatert ofte).
Til syvende og sist, bruk av kvalitet i vår kultur er den mest kritiske og avgjørende faktoren for å oppnå høyere pålitelighet. Vi kan se hvordan denne praksisen som brukes i vårt daglige arbeid allerede gir resultater. Teamet vårt er besatt av pålitelighet og det er vår viktigste prestasjon. Vi har økt bevisstheten vår om virkningen som potensielle defekter kan ha og når de kan bli introdusert. Tjenester som implementerte disse praksisene har konsekvent nådd sine SLOer og SLAer. Pålitelighetsrapportene som hjelper oss å spore alt arbeidet vi har gjort, er et bevis på arbeidet vårt team har gjort, og står som uvurderlige lærdommer for å informere og påvirke andre team. Slik berører pålitelighetskulturen alle komponentene i plattformen vår.
Veien til høyere pålitelighet er ikke enkel, men den er nødvendig hvis du vil bygge en pålitelig plattform som gjeninnstiller hvordan mennesker kommer sammen.
Alberto er hovedprogramvareingeniør i Account Identity-teamet hos Roblox. Han har vært i spillindustrien lenge, med studiepoeng på mange AAA-spilltitler og sosiale medieplattformer med sterkt fokus på svært skalerbare arkitekturer. Nå hjelper han Roblox med å nå vekst og modenhet ved å bruke beste utviklingspraksis.
Innlegget Leverer pålitelig plattform i stor skala dukket først på Roblox blogg.
- "
- a
- Om oss
- Logg inn
- Oppnå
- oppnådd
- Aktiviteter
- aktivitet
- tillegg
- Ytterligere
- Adopsjon
- uheldig
- Avtale
- Alle
- allerede
- analyse
- En annen
- forutse
- anvendt
- Påfør
- påføring
- tilnærming
- arkitektonisk
- rundt
- Artikkel
- assosiert
- oppmerksomhet
- automatisere
- tilgjengelighet
- tilgjengelig
- bevissthet
- fordi
- før du
- være
- under
- benchmark
- BEST
- Beyond
- Blogg
- bringe
- Bug
- bygge
- ring
- hvilken
- saker
- Årsak
- Sjekker
- klienter
- kode
- Koding
- samle
- Kom
- forplikte
- engasjement
- forpliktet
- Felles
- kommunisere
- sammenlignet
- samsvar
- komponenter
- forhold
- selvtillit
- trygg
- Koble
- Tilkobling
- Vurder
- stadig
- forbruker
- Forbrukere
- Container
- Kjerne
- kunne
- skape
- opprettet
- studiepoeng
- kritisk
- Kultur
- skikk
- Kunder
- dashbord
- dato
- dypere
- levert
- levere
- leverer
- krav
- avhenger
- Bestem
- Utvikling
- direkte
- katastrofe
- distribueres
- ned
- drevet
- under
- Tidlig
- ende til ende
- ingeniør
- spesielt
- alle
- alt
- eksempel
- utmerket
- forvente
- forventet
- erfaring
- omfattende
- Failure
- tilbakemelding
- Først
- Fix
- Fokus
- fokuserer
- fokusering
- følge
- etter
- skjema
- funnet
- fra
- fullt
- funksjonelle
- funksjonalitet
- fundamental
- framtid
- spill
- Gates
- genererer
- mål
- god
- Vekst
- garantere
- retningslinjer
- skje
- skjedde
- Helse
- hjelpe
- hjelpe
- hjelper
- her.
- Høy
- høyere
- striper
- svært
- Hvordan
- HTTPS
- Ideer
- identifisere
- Identitet
- Påvirkning
- iverksette
- implementert
- viktig
- forbedre
- forbedret
- bedre
- I andre
- inkluderer
- Inkludert
- økt
- industri
- påvirke
- informasjon
- Infrastruktur
- integrering
- Intensjon
- investere
- IT
- selv
- Vet
- kjent
- LÆRE
- Nivå
- lite
- lokal
- Lang
- Se
- gjøre
- matchende
- Saker
- moden
- modenhet
- betyr
- meningsfylt
- midler
- måle
- Media
- møter
- Metrics
- blandet
- mer
- mest
- flytting
- Naturlig
- nødvendig
- likevel
- betjene
- drift
- orkestre
- rekkefølge
- Annen
- samlet
- egen
- del
- Ansatte
- ytelse
- stykker
- planer
- plattform
- Plattformer
- Spille
- Point
- Synspunkt
- Politikk
- positiv
- mulig
- potensiell
- makt
- praksis
- presentere
- Principal
- prioritet
- problemer
- prosess
- kvalitet
- Rask
- raskt
- å nå
- rimelig
- Gjenopprette
- utvinning
- reflektere
- om
- pålitelig
- rapporterer
- Rapporter
- forespørsler
- påkrevd
- Ressurser
- Anmeldelser
- Risiko
- vei
- Roblox
- Rolle
- root
- rennende
- samme
- skalerbar
- Skala
- forstand
- tjeneste
- Tjenester
- lignende
- siden
- enkelt
- So
- selskap
- sosiale medier
- sosiale medieplattformer
- Software
- Software Engineer
- noen
- spesiell
- stå
- Standard
- status
- butikker
- strategier
- sterk
- suksess
- vellykket
- støtte
- system
- snakker
- lag
- teknikker
- vilkår
- test
- De
- derfor
- tre
- billetter
- tid
- tidsramme
- sammen
- toleranse
- verktøy
- Tema
- temaer
- spor
- trafikk
- forståelse
- us
- verdi
- verifisere
- Se
- synlighet
- uke
- Hva
- om
- mens
- uten
- Arbeid
- arbeid
- ville