Kuinka Postman Engineering käsittelee miljoonaa samanaikaista yhteyttä

Postmanin Server Foundation -tiimi jakaa Bifrost-verkkopisteen yhdyskäytävän alkuperätarinan

(22. joulukuuta 2020)

Marvel Cinematic Universumissa Bifrost on sateenkaarisillan nimi, joka mahdollistaa välittömän matkustamisen jumalat ja ihmiskunta. Vastaavasti ja yhtä maagisesti Bifrost-verkkoporttiyhdyskäytävän avulla Postman-asiakkaat voivat muodostaa hetkellisen yhteyden Postman-palveluihin.

Kuva: Toni Reed osoitteessa Unsplash

Kuten olen aiemmin jakanut julkaisussa (How Postman Engineering Does Microservices), kaikki ohjelmistoarkkitehtuurit ovat jatkuvaa työtä prosessissa. Reaalimaailmassa toimiminen tarkoittaa toisinaan vanhojen ajattelutapojen uudelleenarviointia sopeutuakseen uusiin olosuhteisiin. Se on ohjelmistosuunnittelun luonnollinen kehitys.

Tässä on tarina siitä, kuinka Postman-insinöörit kehittivät Bifrost-verkkopisteen yhdyskäytävän hakemalla liian suureksi kasvaneen palvelun.

Kehitystiimit osoitteessa Postman

Useimmat Postmanin kehitystiimit työskentelevät rajat ylittävissä ryhmissä, jotka keskittyvät yhteen ydinosaan, kuten dokumentaatioon tai versionhallintaan . verkkotunnuslähtöisen suunnittelun periaatteiden mukaisesti kukin joukko kehittää sisäisiä mikropalveluja ja Postman-ominaisuuksia Postman-käyttäjille.

Vaikka suurin osa insinööreistä työskentelee Joukot työskentelevät toiminnallisissa tiimeissä, jotka rakentavat komponentteja, jotka ovat jaettuja koko suunnitteluorganisaatiolle. Server Foundation -tiimi on esimerkki toiminnallisesta tiimistä Postmanissa. Nämä insinöörit luovat apuvälineitä, joita muut joukkueet käyttävät omien ominaisuuksiensa rakentamiseen, lähettämiseen ja tarkkailemiseen. Tämä tiimi on myös siellä asuvien AWS: n ja infrastruktuurin asiantuntijoiden asuinpaikka.

Server Foundation team on esimerkki toiminnallisesta Postman-tiimistä, joka luo ja hallitsee tavaroita, joita käytetään koko suunnitteluorganisaatiossa

Useimmat Postmanin mikropalvelut ovat löyhästi yhdistettynä, jotta he voivat kehittyä muista joukkueista riippumatta. Valitettavasti palvelu voi joskus kasvaa liian suureksi, ja se tarjoaa laajan valikoiman näennäisesti etuyhteydettömiä palveluja. Näiden palvelujen avulla joukkue voi toistaa nopeasti, mutta voi alkaa toimia enemmän kuin paisunut monoliitti, iso mutapallo tai mikä tahansa nimi, jota haluat kutsua näiksi raskaiksi olennoiksi.

Kun näin tapahtuu Postmannissa, monet insinöörit eri tiimit osallistuvat koodiin ja vaativat huolellista koordinointia jokaisen tiimin kesken jokaisen päivityksen yhteydessä.

Monoliittinen synkronointipalvelu

Yksi Postman-palveluista, joka kasvoi liian suureksi hallitaan tehokkaasti, kutsutaan synkronoinniksi. Sen tehtävänä on synkronoida kaikki paikallisen koneesi Postman-asiakkaan toimet Postman-palvelimien kanssa. Jokainen Postmanin käyttäjän toiminta johtaa sarjaan API-kutsuja, jotka käsitellään verkkopisteliitäntöjen kautta julkaisu-tilaus -mallin mukaisesti, jotta tieto kulkee reaaliajassa käyttäjien ja käyttäjien välillä. ryhmien kesken.

Näin tapahtuu esimerkiksi, kun kirjaudut Postmaniin ja päivität kokoelman:

  1. lisäät parametrin Postman-kokoelmaan.
  2. Postimies pitää kirjaa päivityksestä profiilisi kanssa tallennetussa versionhallinnassa.
  3. Postman näyttää uusimmat tiedot kokoelman katsojille reaaliajassa.

Synkronointi oli alun perin tarkoitettu käsittelemään tietokantatapahtumia, kuten kokoelman päivittäminen. Tällä kertaa viime vuonna Sync hallinnoi kuitenkin myös muita toimintoja, kuten ilmoittamista ja viimeisimmän version näyttämistä kaikille kokoelman tilaajille.

Synkronoi paineen alla

Autoa rakennettaessa kehys on tärkein tukirakenne, johon kaikki muut komponentit on kiinnitetty. Pieni halkeama kehyksessä ei ehkä näytä iso juttu. Se voi todennäköisesti jäädä huomaamatta ajaessasi pienillä nopeuksilla. Suuremmilla nopeuksilla on kuitenkin aaltoilu, joka kasvaa vääristymiä. Näennäisesti merkityksettömän halkeaman ansiosta tärinät voimistuvat koko muussa ajoneuvossa, kunnes se kasvaa palavaksi hylyksi.

”Juttu, joka jää huomaamatta pienemmissä järjestelmissä tulee väistämättömämmäksi monimutkaisemmissa järjestelmissä.”
Kunal Nagpal , Postmanin suunnittelupäällikkö

Sync oli Postmanin varhaisimpia palveluita, ja sen monoliittinen arkkitehtuuri antoi tiimille mahdollisuuden lähettää Postman-ominaisuuksia nopeasti. Ajan myötä se alkoi hoitaa yhä enemmän vastuuta. Tähän päivään saakka Sync-palvelulla on edelleen laaja vaikutusvalta koko suunnitteluorganisaatiossa, ja monet insinöörit kokevat tuskaa, kun Sync käyttäytyy odottamattomasti tai jos se on suunnitellut seisokkeja.

Vuonna 2019 Sync käsitteli sekä verkkopisteliitoksia että tietokantaa. liiketoimia. Tuolloin 11 miljoonan käyttäjän kesken tapahtui yhä enemmän yhteistyötä, Postman oli lähestymässä miljoonaa samanaikaista yhteyttä huippukuormituksella.

Lähes jokaisen Postmanin mikropalvelun perustana Sync-rasitus kasvoi.

  • Laskutusvirhe vastapaineesta johtuen: Jokainen synkronointiin liittyvä käyttöönotto johtaa Postman-asiakkaiden yhteyden katkaisemiseen verkkopistokkeiden kautta. Kun miljoona pistorasiaa muodostaa yhteyden uudelleen, palvelinresurssit heikkenevät, mikä voi johtaa enemmän katkaisuihin aiheuttaen ennustettavan, mutta väistämättömän nousun, jonka palautuminen voi kestää 6–8 tuntia.
  • Vaikuttava käyttökokemus: Vaikka sitä ei tapahtunut usein, katkenneet yhteydet merkitsivät ajoittaista viivettä uusimpien päivitysten ja aktiviteettien näkemisessä Tiimin työtilassa.
  • Korkeammat ylläpitokustannukset : Koska jokainen joukkue luotti synkronointiin, käytännössä jokaisen postimiehen insinöörin oli opittava käsitellä katkenneita yhteyksiä, aloittaa uusia ja sovittaa sitten kaikki ristiriidat tiedoissa.

Server Foundation -tiimi tiesi haluavansa lisätä verkkopisteliitäntöjen tehokkuutta ja käsitellä niitä myös erillään Synkronointipalvelu. Kohde oli selvä, mutta polku sinne ei.

“Tämä on ohjelmistosuunnittelun luonnollinen kehitys. Mikropalvelut alkavat ketterästi, mutta ne kertyvät ja ne on hajotettava takaisin. Halusimme erottaa pistorasioiden käsittelyn synkronoinnista, koska olimme aikeissa ottaa käyttöön paljon enemmän toimintoja. ”
Yashish Dua , ohjelmistoinsinööri Postimies

jotkut sisäiset palvelut kasvavat liian suuriksi, mikä edellyttää tiimien huolellista koordinointia

Näin tapahtui

Vaihe 1: Saimme organisaation sisäänosto

Ensimmäinen haaste, johon puututaan, ei ollut tekninen. Tämä ei ollut Postmanin ensimmäinen kunnianhimoinen käyttöönotto. Suunnittelu oli oppinut aikaisemmista lähtökohdista aloittaa ihmisten kanssa. Lokakuusta 2019 lähtien Server Foundation -insinöörit järjestivät useita arviointeja, joiden tarkoituksena oli kommunikoida tavoitteesta laajemmalle organisaatiolle ja selittää kaikkien riippuvien palveluiden edut.

Jos tämä uusi järjestelmä onnistui, katkaistujen yhteyksien käsittely ja jälkivaikutusten käsittely ei olisi enää yleistä. Tämä oli todellinen kannustin muille suunnittelutiimeille tukea ja siirtyä uuteen järjestelmään. Tämä avoin viestintä ja koordinointi jatkuisi koko projektin ajan.

Vaihe 2: Tunnistimme tuntemattomat tuntemattomat

Suunnittelu tiesi suunnan, johon he olivat menossa. Siitä huolimatta he ottivat aikaa miettiä kaikkia skenaarioita ja ymmärtää paremmin taustalla olevat käsitteet. Insinöörit suunnittelivat kokeilujaksoja muiden sidosryhmien kanssa tuntemattomien tuntemattomien tunnistamiseksi, odottamattomat olosuhteet, jotka voivat aiheuttaa suuremman riskin kuin tunnetut tunnetut.

Vaikka Postman-organisaatio on tottunut tutkimiseen ja suunnitteluun, tämä prosessin osa kesti paljon normaalia kauemmin muutoksen kriittisen luonteen vuoksi. He tutkivat erilaisia ​​vaihtoehtoja, harkitsivat lisävaatimuksia ja laativat suunnitelman kahden kuukauden aikana.

Vaihe 3: Rakensimme Bifrost-verkkopisteen yhdyskäytävän

Bifrost koostuu kaksi osaa:

  • Julkinen yhdyskäytävä : Yhdyskäytävä käyttää Fastify-verkkokehystä ja Amazon AWS: ää ElastiCache for Redis keskeisenä viestien välittäjänä kaikkien verkkopisteliittymien hallitsemiseksi.
  • Yksityinen sovellusliittymä : Sovellusliittymä käyttää myös Fastifyä matalana yleisenä verkkokehyksenä välityspalvelimena muihin sisäisiin Postman-palveluihin.

Bifrost koostuu kahdesta osasta: julkisesta yhdyskäytävästä ja yksityinen sovellusliittymä

Vaihe 4: Testasimme uuden yhdyskäytävän

Kun Postman-insinöörit ovat valmiita toimittamaan ominaisuuden, heidän odotetaan testaavan ominaisuus ja kaikki siihen liittyvät ominaisuudet. Koska melkein jokainen Postman-ominaisuus perustuu verkkopistokkeisiin, tämä tarkoitti, että jokainen ominaisuus oli testattava tälle julkaisulle. Lisäksi web-pistorasioiden automaattisen testauksen kehystä ei ollut vielä määritetty Postmanissa, joten kaikki testit valmistuivat manuaalisesti ennen Bifrostia voitaisiin käyttää tuotannossa.

Tämä oli raskas matka, mutta tammikuun 2020 loppuun mennessä suunnittelulla oli toimiva todiste konseptista.

Vaihe 5: Siirtyimme uuteen yhdyskäytävä

Kaikki Postman-asiakkaat, kuten Electron-sovellus tai verkko, luottavat ensimmäiseen käynnistyspuheluun toiseen ydinpalveluun nimeltä Godserver. Tämä palvelin määrittää asiakkaiden pääsyn ja kokoonpanon, ja miten suunnittelu ohjaa tuotteiden asteittaista käyttöönottoa. Koska Godserver määritteli tämän kaiken ennalta ja hallitsi sen, siirtyminen Bifrost-yhdyskäytävään ei vaadi yhtä Postman-asiakaskoodin päivitystä.

Server Foundation -tiimi esitteli ryhmien siirtymävaiheet, vaaditut koodimuutokset ja määritykset hakea. Muutaman viikon aikana riippuvaiset palvelut alkoivat siirtyä synkronoinnista Bifrost-pohjaiseen verkkoyhteysyhteyksien käsittelyyn. Godserver ohjasi yhä enemmän liikennettä uuteen verkkopisteen yhdyskäytävään nähdäkseen, kuinka Bifrost käsitteli kuormaa ja reagoi reunatapauksiin.

”Se on kuin moottorin vaihtaminen lentokoneessa keskellä lento. ”
Numaan Ashraf , Postmanin suunnittelupäällikkö

Vaihe 6: Me skaalasi palvelun

Bifrost-yhdyskäytävä toimi!

Mutta Postman oli hankkinut noin miljoona käyttäjää, kun yhdyskäytävä oli suunnittelussa ja kehittämisessä. Ja muut suunnitteluryhmät eivät olleet keskeyttäneet omaa työtään tänä aikana. Uudet yhteistyöominaisuudet, kuten versionhallinta ja roolipohjainen käyttöoikeus (RBAC) , luotti voimakkaasti verkkosivustoissa tietojen päivittämiseksi reaaliajassa. Tulevia tuotejulkaisuja oli tulvissa, jotka todella testaisivat uutta yhdyskäytävää.

Bifrost oli valmis tukemaan lisääntyneitä vaatimuksia ja laajentamaan verkkopistorasioiden käsittelyä.

  • Vaakasuuntainen skaalaus : Suurimman osan ajasta Postman-palvelut käsittelevät lisääntynyttä käyttöä joko skaalauttamalla suurempiin kapasiteettikohteisiin tai lisäämällä laivastoon lisää laskennan esiintymiä. Joten Postmanin insinöörit yleensä skaalavat ylös palvelun lisäämällä AWS EC2: n kokoa ja laskentatehoa esimerkiksi käyttämällä AWS Elastic Beanstalkia. Mutta Bifrostille verkkopisteen käsittelyasteikko out käyttämällä lisää koneita. Sen optimaalinen hyötysuhde saavutetaan, kun pienempiä instansseja käytetään paljon. Tämän tyyppinen hyperhorisontaalinen skaalaus toimii hyvin Bifrostille, koska asiakkaat eivät vaadi suurta verkon läpimenoa, ja rajoittamalla jokaisen koneen vähemmän yhteyksiä rajoitetaan vikojen räjähdyssäde.
  • CPU: n ja muistin uusi latauskerroin : Suurin osa Postman-palveluista voi tehokkaasti skaalata yhdellä ulottuvuudella skaalausmittarilla, kuten suorittimella, muistilla tai viiveellä. Bifrostin kohdalla asiat muuttuvat kuitenkin hieman vivahteikkaammiksi, koska sekä muistin että suorittimen käytöllä on erilaiset vaikutukset toimintoihin eri suoritustasoilla. Tämän huomioon ottamiseksi Bifrost käyttää mukautettua skaalausmittaria, joka perustuu kuormitustekijään. Kuormitustekijä on moniulotteinen laskelma, joka antaa mukautetun epälineaarisen skaalausprofiilin.

Kaivetaan Postmanin suunnittelun tekemiin arkkitehtonisiin ja teknologisiin päätöksiin.

Bifrost-arkkitehtuuri ja tekninen pino

Bifrost-järjestelmä on kaksi pääkomponenttia – yhdyskäytävä ja sovellusliittymä. Tämä kaksiosainen arkkitehtuuri on salainen kastike järjestelmän vakaudelle ja skaalautuvuudelle.

Yhdyskäytävä toimii kaikkien verkkopisteliitäntöjen päätepisteenä. Vaikka kaupallisia yhdyskäytäviä on ostettavissa, oli tärkeää säilyttää vuosien optimoinnin aikana kertynyt perinteinen liiketoimintalogiikka. Postimiesinsinöörit halusivat myös hallita täysin verkkopistokkeiden käsittelyä, esimerkiksi jos he halusivat hyödyntää protokollan kättelyä. Bifrost-yhdyskäytävässä he käyttivät Amazon ElastiCache for Redis -ohjelmaa, jolloin he pystyivät kyselemään Redis-välimuistia lukija- ja kirjoitussolmuilla.Liikenteen jakaminen kahteen solmuun luku- ja kirjoitustoimintoja varten antaa tiimille mahdollisuuden optimoida suorituskyky entisestään.

“Bifrost on yhdyskäytävä kaikille verkkopisteliitännöille. Se on välityspalvelin kaikille Postman-asiakkaille ja vastuussa sisäisten Postman-palveluiden matalan tason pistorasiatoimintojen käsittelystä. ”
Mudit Mehta , ohjelmistoinsinööri Postmanissa

Useimmat muut Postmanin palvelut käyttävät Purjeita reaaliaikaisena MVC-kehyksenä Node.js: lle . Bifrost-yhdyskäytävää varten insinöörit tarvitsivat kuitenkin suorituskykyisen taustarakenteen, joka pystyy käsittelemään suuria määriä nopeasti ja optimoidulla muistin käytöllä. Jälleen kerran he halusivat mennä syvemmälle pistorasiakerrokseen, Sailsin tarjoamien korkeamman tason abstraktioiden alapuolelle. Joten he kääntyivät Fastify : n puoleen ja haaroittivat -socketio-sovitin -väliohjelmiston optimoimaan omaan käyttöönsä. tapauksia.

Bifrost-yhdyskäytävä käytti AWS-, Redis- ja Fastify-toimintoja verkkoliittimien käsittelemiseksi / em>

Yhdyskäytävän lisäksi Bifrostin toinen komponentti on yksityinen sovellusliittymä, joka välittää liikenteen muihin Postman-palveluihin. Se perustuu joustaviin liiketoimintasääntöihin, ja sitä arvioidaan siten jatkuvasti uudelleen siitä, miten ja mihin tulevaa liikennettä edelleen ohjataan. Monimutkainen logiikka. ”
Kunal Nagpal , Postmanin suunnittelupäällikkö

Molemmille komponenteille suunnittelutiimi päätti kääntää omansa. Vaikka Bifrostin yhdyskäytäväosaa ei päivitetä usein, tiimillä on täysi hallinta siitä, mitä tapahtuu verkkopisteen käsittelyn syvemmissä kerroksissa. Bifrostin API-osa on toiminnan aivot ja muuntaa saapuvat reaaliaikaiset viestit tavallisiksi HTTP-puheluiksi. Se voidaan myös päivittää nopeammin erillisenä komponenttina Syncistä ja Bifrost-yhdyskäytävästä.

Muistatko salaisen kastikkeen? Bifrostin irrottaminen näistä kahdesta erillisestä järjestelmästä antaa molemmille osille mahdollisuuden optimoida omiin tavoitteisiinsa.

Matka ei ole vielä kaukana

Kuten kaikkien mehukkaiden insinööritarinoiden kohdalla, tämä ei ole loppu . Jätän sinulle muutaman kallionmiehen siitä, mitä Postmanin suunnittelussa on tulossa.

  • Rakenna ylimääräinen redundanssi : Redis-välimuisti on keskeinen viestien välittäjä . Verkkopistokäsittely riippuu edelleen yhdestä epäonnistumispisteestä, joten mitä tapahtuu, jos välimuisti koskaan katoaa?
  • Lisää kaistanleveyttä ja läpimenoa : Yhdyskäytävä pystyy tällä hetkellä käsittelemään 10x samanaikaisuuden, mutta Postman-yhteisö kasvaa nopeasti ja suunnittelu rakentaa lisää yhteistyöominaisuuksia. Tarve käsitellä lisää verkkoliikenneliikennettä tulee nopeasti esiin.
  • Jatka monoliitin hajottamista: Synkronointipalvelu sisältää sekoituksen muita palveluja, jotka ovat kietoutuneet sen koodipohjaan. Pistorasioiden käsittelyn irrotus Syncistä irrottaa tartuntansa muista palveluista, joten muut palvelut voidaan nyt irrottaa helpommin.

Tämä oli toinen kulissien takana oleva kurkistus Postman-tekniikan toimintaan. Pysy kuulolla lisää tarinoita kaivannoista.

🙏🏼 Tekninen arvostelu, kirjoittanut Kunal Nagpal, Yashish Dua, Mudit Mehta ja Shamasis Bhattacharya.

Alun perin julkaistu osoitteessa https://blog.postman.com 22. joulukuuta 2020.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *