Minkä tahansa skaalautuvan hajautetun alustan käyttäminen edellyttää sitoutumista luotettavuuteen, jotta asiakkaat saavat tarvitsemansa silloin, kun he sitä tarvitsevat. Riippuvuudet voivat olla melko monimutkaisia, varsinkin niin suurella alustalla kuin Roblox. Luotettavien palveluiden rakentaminen tarkoittaa, että riippuvuuksien monimutkaisuudesta ja tilasta riippumatta mikään palvelu ei keskeydy (eli erittäin saatavissa), toimii virheettömästi (eli korkealla laatu) ja ilman virheitä (esim vikasietoisuus).
Miksi luotettavuus on tärkeää
Account Identity -tiimimme on sitoutunut saavuttamaan korkeamman luotettavuuden, koska rakentamamme vaatimustenmukaisuuspalvelut ovat alustan ydinkomponentteja. Laiminlyönnillä voi olla vakavia seurauksia. Robloxin luonnollisen toiminnan estämisen kustannukset ovat erittäin korkeat, ja vian ja heikentyneen käyttökokemuksen jälkeen palautumiseen tarvitaan lisäresursseja.
Tyypillinen lähestymistapa luotettavuuteen keskittyy ensisijaisesti saatavuuteen, mutta joissain tapauksissa termejä sekoitetaan ja käytetään väärin. Useimmat käytettävyyden mittaukset vain arvioivat, ovatko palvelut käynnissä, kun taas osioiden sietokyvyn ja johdonmukaisuuden kaltaiset näkökohdat unohdetaan tai ymmärretään väärin.
CAP-teoreeman mukaisesti mikä tahansa hajautettu järjestelmä voi taata vain kaksi näistä kolmesta näkökulmasta, joten vaatimustenmukaisuuspalvelumme uhraavat jonkin verran johdonmukaisuutta ollakseen erittäin saatavilla ja osioita sietäviä. Palvelumme uhrasivat kuitenkin vähän ja löysivät mekanismeja hyvän johdonmukaisuuden saavuttamiseksi alla selostettujen järkevien arkkitehtonisten muutosten kanssa.
Prosessi korkeamman luotettavuuden saavuttamiseksi on iteratiivinen, ja tiukat mittaukset sopivat jatkuvaan työskentelyyn vikojen ehkäisemiseksi, löytämiseksi, havaitsemiseksi ja korjaamiseksi ennen onnettomuuksia. Tiimimme tunnisti vahvan arvon seuraavista käytännöistä:
- Oikea mittaus – Rakenna täysi havaittavuus sen ympärille, kuinka laatu toimitetaan asiakkaille ja kuinka riippuvuudet tuovat laatua meille.
- Ennakoiva ennakointi – Suorittaa toimintoja, kuten arkkitehtuurikatselmuksia ja riippuvuusriskien arviointeja.
- Priorisoi korjaus – Kiinnitä enemmän huomiota palvelun tapaturmailmoitusten ratkaisuun ja palveluumme liittyviin riippuvuuksiin.
Korkeamman luotettavuuden rakentaminen vaatii laatukulttuuria. Tiimimme investoi jo suorituskykyyn perustuvaan kehitykseen ja tietää, että prosessin onnistuminen riippuu sen käyttöönotosta. Tiimi otti tämän prosessin käyttöön kokonaan ja sovelsi käytäntöjä standardina. Seuraava kaavio korostaa prosessin komponentteja:
Oikean mittauksen voima
Ennen kuin sukeltaa syvemmälle mittareihin, on tehtävä nopea selvitys palvelutason mittauksista.
- SLO (Service Level Objective) on se luotettavuustavoite, johon tiimimme pyrkii (eli 99.999 %).
- SLI (Service Level Indicator) on saavutettu luotettavuus tietyllä aikavälillä (eli 99.975 % viime helmikuussa).
- SLA (Service Level Agreement) on luotettavuus, joka on sovittu toimitettavaksi ja jonka kuluttajat odottavat tietyllä aikavälillä (eli 99.99 % viikossa).
SLI:n tulee heijastaa saatavuutta (ei käsittelemättömiä tai puuttuvia vastauksia), vikasietoisuutta (ei palveluvirheitä) ja saavutettua laatua (ei odottamattomia virheitä). Siksi määritimme SLI:mme onnistuneiden vastausten "onnistumissuhteeksi" verrattuna palveluun lähetettyjen pyyntöjen kokonaismäärään. Onnistuneet vastaukset ovat pyynnöt, jotka on lähetetty ajallaan ja muodossa, eli ei yhteys, palvelu tai odottamattomia virheitä.
Tämä SLI eli Success Ratio kerätään kuluttajien (eli asiakkaiden) näkökulmasta. Tarkoituksena on mitata kuluttajillemme toimitettua todellista päästä päähän -kokemusta, jotta voimme luottaa siihen, että SLA-sopimukset täyttyvät. Jos näin ei tehdä, se loisi väärän luotettavuuden tunteen, joka jättää huomioimatta kaikki infrastruktuurihuolet asiakkaidemme yhteydenpidosta. Kuluttajien SLI:n tapaan keräämme riippuvuus-SLI:n mahdollisten riskien seuraamiseksi. Käytännössä kaikkien riippuvuussopimusten tulee olla linjassa palvelun SLA:n kanssa, ja niihin liittyy suora riippuvuus. Yhden epäonnistuminen merkitsee kaikkien epäonnistumista. Seuraamme ja raportoimme myös itse palvelun (eli palvelimen) mittareita, mutta tämä ei ole käytännöllinen lähde korkealle luotettavuudelle.
SLI:iden lisäksi jokainen koontiversio kerää laatumittareita, jotka CI-työnkulkumme raportoivat. Tämä käytäntö auttaa voimakkaasti valvomaan laatuportteja (eli koodin kattavuutta) ja raportoimaan muita merkityksellisiä mittareita, kuten koodausstandardien noudattamista ja staattista koodianalyysiä. Tätä aihetta käsiteltiin aiemmin toisessa artikkelissa, Suorituskykyisten mikropalvelujen rakentaminen. Ahkera laadun huomioiminen lisää luotettavuudesta puhuttaessa, sillä mitä enemmän panostamme erinomaisten pisteiden saavuttamiseen, sitä varmempia olemme, että järjestelmä ei petä vaikeissa olosuhteissa.
Tiimillämme on kaksi kojelautaa. Yksi tarjoaa kaiken näkyvyyden sekä Consumers SLI:lle että Dependencies SLI:lle. Toinen näyttää kaikki laatumittarit. Pyrimme yhdistämään kaiken yhdeksi kojelautaksi, jotta kaikki meille tärkeät näkökohdat ovat konsolidoituja ja valmiita raportoitaviksi mihin tahansa aikaväliin mennessä.
Ennakoi epäonnistuminen
Doing Arkkitehtiarvostelut on olennainen osa luotettavuutta. Ensin määritämme, onko olemassa redundanssia ja onko palvelulla keinoja selviytyä riippuvuuksien vähentyessä. Tyypillisten replikointiideoiden lisäksi suurin osa palveluistamme sovelsi parannettuja kaksoisvälimuistin hydratointitekniikoita, kaksoispalautusstrategioita (kuten vikasietoisia paikallisia jonoja) tai tiedonhävitysstrategioita (kuten tapahtumatuki). Nämä aiheet ovat niin laajoja, että ne ansaitsevat uuden blogimerkinnän, mutta viime kädessä paras suositus on toteuttaa ideoita, jotka huomioivat katastrofiskenaariot ja minimoivat mahdolliset suoritusrangaistukset.
Toinen tärkeä ennakoitava näkökohta on kaikki, mikä voisi parantaa yhteyksiä. Tämä tarkoittaa aggressiivisuutta asiakkaiden alhaisen latenssin suhteen ja niiden valmistamista erittäin suureen liikenteeseen käyttämällä välimuistin ohjaustekniikoita, sivuvaunuja ja suorituskykyisiä aikakatkaisuja, katkaisijoita ja uudelleenyrityksiä koskevia käytäntöjä. Nämä käytännöt koskevat kaikkia asiakkaita, mukaan lukien välimuistit, varastot, jonot ja toisistaan riippuvaiset asiakkaat HTTP:ssä ja gRPC:ssä. Se tarkoittaa myös palveluiden terveellisten signaalien parantamista ja sen ymmärtämistä, että terveystarkastuksilla on tärkeä rooli kaikessa kontin orkestroinnissa. Suurin osa palveluistamme antaa parempia signaaleja huononemisesta osana terveystarkastuspalautetta ja varmistaa, että kaikki kriittiset komponentit toimivat ennen terveiden signaalien lähettämistä.
Palveluiden jakaminen kriittisiin ja ei-kriittisiin osiin on osoittautunut hyödylliseksi keskittyessä tärkeimpiin toimintoihin. Meillä oli aiemmin vain järjestelmänvalvojalle tarkoitettuja päätepisteitä samassa palvelussa, ja vaikka niitä ei käytetty usein, ne vaikuttivat yleisiin latenssimittareihin. Niiden siirtäminen omaan palveluun vaikutti jokaiseen mittariin positiiviseen suuntaan.
Riippuvuusriskin arviointi on tärkeä työkalu mahdollisten riippuvuusongelmien tunnistamiseen. Tämä tarkoittaa, että tunnistamme riippuvuudet, joilla on alhainen SLI, ja pyydämme SLA-kohdistusta. Nämä riippuvuudet vaativat erityistä huomiota integrointivaiheissa, joten käytämme ylimääräistä aikaa vertaillaksemme ja testataksemme, ovatko uudet riippuvuudet riittävän kypsiä suunnitelmiamme varten. Yksi hyvä esimerkki on Roblox Storage-as-a-Servicen varhainen käyttöönotto. Integrointi tähän palveluun vaati virheilmoitusten arkistointia ja säännöllisiä synkronointikokouksia havaintojen ja palautteen välittämiseksi. Kaikki tämä työ käyttää "luotettavuus" -tunnistetta, jotta voimme nopeasti tunnistaa sen lähteen ja prioriteetit. Karakterisointia tapahtui usein, kunnes saimme varmuuden siitä, että uusi riippuvuus oli meille valmis. Tämä lisätyö auttoi saamaan riippuvuuden vaaditulle luotettavuustasolle, jonka odotamme toimimalla yhdessä yhteisen päämäärän eteen.
Tuo rakenne kaaokseen
Tapauksia ei ole koskaan toivottavaa. Mutta kun ne tapahtuvat, on hyödyllistä tietoa kerättävä ja opittava, jotta voidaan olla luotettavampia. Tiimillämme on tiimin tapausraportti, joka luodaan tyypillisen koko yrityksen raportin yläpuolelle, joten keskitymme kaikkiin tapauksiin niiden vaikutusten laajuudesta riippumatta. Selvitämme perimmäisen syyn ja asetamme etusijalle kaiken sen lieventämisen tulevaisuudessa. Osana tätä raporttia kutsumme muita tiimejä korjaamaan riippuvuustapaukset ensisijaisesti, seuraamaan asianmukaista ratkaisua, katsomaan taaksepäin ja etsimään malleja, jotka saattavat koskea meitä.
Ryhmä tuottaa a Kuukausittainen luotettavuusraportti palvelua kohti joka sisältää kaikki tässä selitetyt SLI:t, kaikki luotettavuuden vuoksi avaamamme liput ja kaikki mahdolliset palveluun liittyvät tapahtumat. Olemme niin tottuneet luomaan näitä raportteja, että seuraava luonnollinen askel on automatisoida niiden poimiminen. Tämän säännöllisen toiminnan tekeminen on tärkeää, ja se on muistutus siitä, että luotettavuutta seurataan ja huomioidaan jatkuvasti kehityksessämme.
Instrumentointimme sisältää mukautettuja mittareita ja parannettuja hälytyksiä, jotta meidät haetaan mahdollisimman pian, kun tunnettuja ja odotettuja ongelmia ilmenee. Kaikki hälytykset, myös väärät positiiviset, tarkistetaan joka viikko. Tässä vaiheessa kaiken dokumentaation hiominen on tärkeää, jotta kuluttajamme tietävät, mitä odottaa, kun hälytykset laukeavat ja milloin virheitä tapahtuu, ja sitten kaikki tietävät, mitä tehdä (esim. pelikirjat ja integrointiohjeet kohdistetaan ja päivitetään usein).
Lopulta, laadun omaksuminen kulttuurissamme on kriittisin ja ratkaisevin tekijä korkeamman luotettavuuden saavuttamisessa. Voimme havaita, kuinka nämä päivittäisessä työssämme sovelletut käytännöt tuottavat jo tulosta. Tiimimme on pakkomielle luotettavuudesta ja se on tärkein saavutuksemme. Olemme lisänneet tietoisuuttamme mahdollisten vikojen vaikutuksista ja siitä, milloin ne voidaan ottaa käyttöön. Palvelut, jotka ottavat käyttöön näitä käytäntöjä, ovat saavuttaneet jatkuvasti SLO- ja SLA-sopimuksensa. Luotettavuusraportit, jotka auttavat meitä seuraamaan kaikkea tekemäämme työtä, ovat osoitus tiimimme tekemästä työstä ja ovat korvaamattomia oppitunteja muille ryhmille tiedottamisessa ja vaikuttamisessa. Näin luotettavuuskulttuuri koskettaa kaikkia alustamme komponentteja.
Tie korkeampaan luotettavuuteen ei ole helppo, mutta se on välttämätöntä, jos haluat rakentaa luotettavan alustan, joka kuvittelee uudelleen ihmisten tapaa kokoontua yhteen.
Alberto on johtava ohjelmistosuunnittelija Robloxin Account Identity -tiimissä. Hän on työskennellyt pelialalla pitkään, ja hän on saanut krediittejä monista AAA-peleistä ja sosiaalisen median alustoista keskittyen voimakkaasti erittäin skaalautuviin arkkitehtuureihin. Nyt hän auttaa Robloxia saavuttamaan kasvun ja kypsyyden parhaiden kehityskäytäntöjen avulla.
Viesti Laajamittaisen alustan luotettavuus ilmestyi ensin Roblox-blogi.
- "
- a
- Meistä
- Tili
- Saavuttaa
- saavutettu
- toiminta
- toiminta
- Lisäksi
- lisä-
- Hyväksyminen
- haitallinen
- sopimus
- Kaikki
- jo
- analyysi
- Toinen
- ennakoida
- sovellettu
- käyttää
- Hakeminen
- lähestymistapa
- arkkitehtuurin
- noin
- artikkeli
- liittyvä
- huomio
- automatisoida
- saatavuus
- saatavissa
- tietoisuus
- koska
- ennen
- ovat
- alle
- benchmark
- PARAS
- Jälkeen
- Blogi
- tuoda
- Vika
- rakentaa
- soittaa
- joka
- tapauksissa
- Aiheuttaa
- Tarkastukset
- asiakkaat
- koodi
- Koodaus
- kerätä
- Tulla
- sitoutumaan
- sitoutuminen
- sitoutunut
- Yhteinen
- tiedottaa
- verrattuna
- noudattaminen
- osat
- olosuhteet
- luottamus
- luottavainen
- kytkeä
- Liitännät
- Harkita
- alituisesti
- kuluttaja
- Kuluttajat
- Kontti
- Ydin
- voisi
- luoda
- luotu
- Laajuus
- kriittinen
- Kulttuuri
- asiakassuhde
- Asiakkaat
- kojelauta
- tiedot
- syvempää
- toimitettu
- tuottaa
- Antaa
- vaatii
- riippuu
- Määrittää
- Kehitys
- ohjata
- katastrofi
- jaettu
- alas
- ajanut
- aikana
- Varhainen
- päittäin
- insinööri
- erityisesti
- jokainen
- kaikki
- esimerkki
- erinomainen
- odottaa
- odotettu
- experience
- laaja
- Epäonnistuminen
- palaute
- Etunimi
- Korjata
- Keskittää
- keskittyy
- tarkennus
- seurata
- jälkeen
- muoto
- löytyi
- alkaen
- koko
- toiminnallinen
- toiminnallisuus
- perus-
- tulevaisuutta
- peli
- Gates
- tuottaa
- tavoite
- hyvä
- Kasvu
- taata
- suuntaviivat
- tapahtua
- tapahtui
- terveys
- auttaa
- auttaa
- auttaa
- tätä
- Korkea
- korkeampi
- raidat
- erittäin
- Miten
- HTTPS
- ideoita
- tunnistaa
- Identiteetti
- Vaikutus
- toteuttaa
- täytäntöön
- tärkeä
- parantaa
- parani
- parantaminen
- Muilla
- sisältää
- Mukaan lukien
- kasvoi
- teollisuus
- vaikutus
- tiedot
- Infrastruktuuri
- integraatio
- Tarkoitus
- investoimalla
- IT
- itse
- Tietää
- tunnettu
- OPPIA
- Taso
- vähän
- paikallinen
- Pitkät
- katso
- tehdä
- matching
- Matters
- kypsä
- kypsyys
- merkitys
- mielekäs
- välineet
- mitata
- Media
- kokoukset
- Metrics
- sekoitettu
- lisää
- eniten
- liikkuvat
- Luonnollinen
- välttämätön
- silti
- käyttää
- toiminta
- orkestrointi
- tilata
- Muut
- yleinen
- oma
- osa
- Ihmiset
- suorituskyky
- kappaletta
- suunnitelmat
- foorumi
- Platforms
- Pelaa
- Kohta
- Näkökulma
- politiikkaa
- positiivinen
- mahdollinen
- mahdollinen
- teho
- harjoitusta.
- esittää
- Pääasiallinen
- prioriteetti
- ongelmia
- prosessi
- laatu
- nopea
- nopeasti
- tavoittaa
- kohtuullinen
- toipua
- elpyminen
- heijastaa
- suhteen
- luotettava
- raportti
- Raportit
- pyynnöt
- tarvitaan
- Esittelymateriaalit
- Arvostelut
- Riski
- tie
- Roblox
- Rooli
- juuri
- juoksu
- sama
- skaalautuva
- Asteikko
- tunne
- palvelu
- Palvelut
- samankaltainen
- koska
- single
- So
- sosiaalinen
- sosiaalinen media
- sosiaalisen median alustoja
- Tuotteemme
- Software Engineer
- jonkin verran
- erityinen
- seistä
- standardi
- Tila
- varastot
- strategiat
- vahva
- menestys
- onnistunut
- tuki
- järjestelmä
- puhuminen
- joukkue-
- tekniikat
- ehdot
- testi
- -
- siksi
- kolmella
- liput
- aika
- aikaikkuna
- yhdessä
- toleranssi
- työkalu
- aihe
- Aiheet
- raita
- liikenne
- ymmärtäminen
- us
- arvo
- todentaa
- Näytä
- näkyvyys
- viikko
- Mitä
- onko
- vaikka
- ilman
- Referenssit
- työskentely
- olisi