Jak Postman Engineering zpracovává milion souběžných připojení

Tým Server Foundation ve společnosti Postman sdílí příběh o původu brány Bifrost pro websocket

(22. prosince 2020)

V Marvel Cinematic Universe je Bifrost název duhového mostu, který umožňuje okamžité cestování mezi říšemi bohové a lidstvo. Podobně a stejně magicky naše brána websocket Bifrost umožňuje klientům Postmana okamžitě se připojit ke službám Postman.

Fotografie Toni Reed při Unsplash

Jak jsem již dříve uvedl (How Postman Engineering Does Microservices), všechny softwarové architektury jsou neustálým procesem. Působení v reálném světě znamená občasné přehodnocení starých způsobů myšlení, aby se přizpůsobily novým okolnostem. To je přirozený vývoj softwarového designu.

Zde je příběh o tom, jak inženýři Postmanu vyvinuli bránu websocket Bifrost tím, že odštěpili příliš velkou službu.

Vývojové týmy na Postman

Většina vývojových týmů ve společnosti Postman pracuje v mezifunkčních jednotkách zaměřených na jednu základní doménu, jako je dokumentace nebo řízení verzí . Na základě principů designu založeného na doméně vyvíjí každá jednotka pro uživatele Postmana interní mikroslužby a funkce Postmana.

Zatímco většina inženýrů pracuje v jednotky fungují ve funkčních týmech, které vytvářejí komponenty sdílené napříč celou inženýrskou organizací. Tým Server Foundation je příkladem funkčního týmu ve společnosti Postman. Tito inženýři vytvářejí nástroje, které používají ostatní jednotky k vytváření, přepravě a sledování jejich vlastních funkcí. V tomto týmu také sídlí rezidentní odborníci na AWS a infrastrukturu.

Server Foundation team je příkladem funkčního týmu v Postmanu, který vytváří a spravuje věci používané v celé inženýrské organizaci

Většina mikroslužeb v Postmanu je volně spojené, aby se mohly vyvíjet nezávisle na ostatních týmech. Bohužel služba může někdy růst příliš velká a poskytovat šíři zdánlivě nesouvisejících služeb. Tyto služby umožňují týmu rychle iterovat, ale mohou se začít chovat spíše jako nafouklý monolit, velká koule bláta nebo jakkoli chcete těmto těžkopádným tvorům říkat.

Když k tomu dojde u Postmana, mnoho techniků napříč různými týmy nakonec přispívají ke kódu a vyžadují pečlivou koordinaci mezi každým týmem pro každou aktualizaci.

Monolitická služba Sync

Jedna ze služeb Postman, která se příliš zvětšila na být efektivně spravován se nazývá Sync. Má skličující úkol synchronizovat veškerou aktivitu v klientovi Postman na místním počítači se servery Postman. Každá akce uživatele v aplikaci Postman má za následek řadu volání API zpracovávaných prostřednictvím připojení websocket podle vzoru publikování a odběru , takže informace mezi uživateli a napříč týmy.

Například toto se stane, když se přihlásíte do Postmana a aktualizujete kolekci:

  1. Do kolekce Postman přidáte parametr.
  2. Pošťák uchovává záznam o aktualizaci v řízení verzí uložených ve vašem profilu.
  3. Pošťák zobrazuje nejnovější informace divákům sbírky v reálném čase.

Synchronizace byla původně určena ke zpracování databázových transakcí, jako je aktualizace kolekce. Tentokrát však Sync v loňském roce zvládl i další aktivity, například upozorňování a zobrazování nejnovější verze všem přihlášeným k odběru kolekce.

Synchronizace pod tlakem

Při stavbě automobilu je rám hlavní nosnou konstrukcí, ke které mají všechny ostatní součásti jsou připojeny. Malá prasklina v rámu se nemusí zdát jako velký problém. Pravděpodobně by to mohlo zůstat bez povšimnutí při nízké rychlosti. Při vyšších rychlostech však dochází k zvlnění, které stupňuje vychýlení. Zdánlivě bezvýznamná trhlina umožňuje vibracím zesílit celý zbytek vozidla, dokud se nezmění v planoucí vrak.

„Věc, která v menších systémech zůstává bez povšimnutí, ve složitějších systémech se stává nevyhnutelným.”
Kunal Nagpal , technický manažer ve společnosti Postman

Sync byla jednou z prvních služeb společnosti Postman a její monolitická architektura umožňovala týmu rychle dodávat funkce Postmana. Postupem času to začalo zvládat stále více povinností. K dnešnímu dni má služba Sync stále rozsáhlý vliv napříč inženýrskou organizací a spousta techniků cítí bolest, když se Sync chová neočekávaně nebo je naplánovaný výpadek.

V roce 2019 Sync zpracovával jak připojení websocket, tak databázi transakce. Vzhledem k tomu, že v té době mezi našimi 11 miliony uživatelů probíhalo stále více spolupráce, Postman se blížil k milionu souběžných připojení při špičkovém zatížení.

Jako základ pro prakticky každou mikroslužbu v Postmanu rostlo napětí na Sync.

  • Selhání kaskády z důvodu protitlaku: Každé nasazení k synchronizaci má za následek odpojení připojených klientů Postman přes webové zásuvky. Když se milion zásuvek znovu připojí, dojde k degradaci prostředků serveru, což může mít za následek další odpojení, což způsobí předvídatelný, ale nevyhnutelný nárůst, jehož obnovení může trvat 6 až 8 hodin.
  • Dopad na uživatelskou zkušenost: I když se to nestávalo často, přerušení připojení znamenalo občasné zpoždění při zobrazení nejnovějších aktualizací a aktivity v týmovém pracovním prostoru.
  • Vyšší náklady na údržbu : Protože každý tým spoléhal na Sync, musel se prakticky každý inženýr v Postmanu naučit, jak zpracovat přerušená připojení, zahájit nová a poté smířit všechny konflikty v datech.

Tým Server Foundation věděl, že chce zvýšit efektivitu připojení websocket, a také je řešit odděleně od Služba synchronizace. Cíl byl jasný, cesta tam však nebyla.

„Toto je přirozený vývoj softwarového designu. Mikroslužby začínají hbitě, ale hromadí se a je třeba je rozebrat. Chtěli jsme oddělit manipulaci s paticemi od Sync, protože jsme se chystali představit mnohem více funkcí. “
Yashish Dua , softwarový inženýr společnosti Pošťák

některé interní služby rostou příliš velké a vyžadují pečlivou koordinaci mezi týmy

Co se stalo

Krok 1: Získali jsme organizační vstup

První výzva k řešení nebyla technická. Nebylo to první ambiciózní vydání Postmana. Inženýrství se z minulých průjezdů naučilo začít u lidí. Počínaje říjnem 2019 uspořádali inženýři Server Foundation sérii recenzí věnovaných komunikaci cíle s širší organizací a vysvětlení výhod pro všechny závislé služby.

Pokud tento nový systém uspěl, zpracování přerušených připojení a řešení následků by už nebylo běžné. Pro ostatní technické týmy to byla skutečná pobídka k podpoře a migraci na nový systém. Tato otevřená komunikace a koordinace bude pokračovat po celou dobu trvání tohoto projektu.

Krok 2: Identifikovali jsme neznámé neznámé

Inženýrství vědělo, jakým směrem se ubírají. Přesto se vydali nějaký čas na promyšlení všech scénářů a lepší pochopení základních konceptů. Inženýři naplánovali průzkumná setkání s dalšími zúčastněnými stranami za účelem identifikace neznámých neznámých, nepředvídatelných podmínek, které mohou představovat větší riziko než známé známé.

I když je organizace Postman zvyklá na průzkum a plánování, tato část procesu kvůli kritické povaze této změny trvalo mnohem déle než obvykle. Zkoumali různé možnosti, zvažovali pomocné požadavky a během dvou měsíců přišli s plánem.

Krok 3: Postavili jsme bránu Bifrost websocket

Bifrost se skládá z dvě části:

  • Veřejná brána : Brána používá webový rámec Fastify a Amazon AWS ElastiCache pro Redis jako centrální zprostředkovatel zpráv pro správu všech připojení websocket.
  • Soukromé API : API také používá Fastify jako webový rámec s nízkou režií pro provoz proxy pro další interní služby Postman.
Bifrost se skládá ze dvou částí: veřejné brány a private API

Krok 4: Testovali jsme novou bránu

Když jsou inženýři Postmanu připraveni dodat funkci, Očekává se od nich, že funkci otestují spolu s veškerými souvisejícími funkcemi. Protože téměř každá funkce Postmana spoléhá na webové zásuvky, znamenalo to, že každá tato funkce musela být pro toto vydání testována. Navíc u společnosti Postman nebyl dosud nastaven rámec pro automatizované testování webových zásuvek, takže všechny testy byly dokončeny ručně před Bifrostem mohly být použity ve výrobě.

Byla to náročná cesta, ale do konce ledna 2020 mělo strojírenství funkční důkaz konceptu.

Krok 5: Přestěhovali jsme se do nového gateway

Všichni klienti Postman, jako je aplikace Electron nebo web, se spoléhají na počáteční zaváděcí volání jiné základní služby s názvem Godserver. Tento server určuje přístup a konfiguraci klientů a je způsob, jakým inženýrství řídí postupné zavádění produktů. Protože to všechno bylo předem určeno a řízeno Godserverem, migrace na bránu Bifrost by nevyžadovala aktualizaci kódu klienta Postman.

Tým Server Foundation načrtl kroky migrace oddílů, požadované změny a konfiguraci kódu použít. V průběhu několika týdnů začaly závislé služby přecházet od spoléhání se na synchronizaci s jejich websocket připojením založeným na Bifrostu. Godserver přesměroval stále více provozu na novou bránu websocket, aby zjistil, jak Bifrost zvládl zatížení a reagoval na okrajové případy.

„Je to jako měnit motor na letadle uprostřed flight. “
Numaan Ashraf , technický ředitel společnosti Postman

Krok 6: My škálovali službu

Bifrost gateway fungovala!

Ale Postman získal dalších zhruba milion uživatelů, zatímco brána byla v plánování a vývoji. A ostatní inženýrské týmy během této doby nezastavily svou vlastní práci. Nové funkce spolupráce, jako řízení verzí a řízení přístupu na základě rolí (RBAC) , se spoléhaly těžce na webových zásuvkách, aby byly informace aktualizovány v reálném čase. Nastala záplava nadcházejících vydání produktu, která by skutečně otestovala novou bránu.

Bifrost byl připraven podporovat zvýšené požadavky a škálovat manipulaci s websocketem.

  • Horizontální škálování : Služby Postmana většinou zpracovávají zvýšené využití buď škálováním na instance s vyšší kapacitou, nebo přidáním více výpočetních instancí do flotily. Inženýři v Postmanu tedy obvykle up službu zvětšují a zvyšují výpočetní výkon AWS EC2 instance, například pomocí AWS Elastic Beanstalk. Ale pro Bifrost váhy pro manipulaci s websocketem out pomocí další stroje. Jeho optimální účinnosti je dosaženo, když jsou menší instance používány ve velkém počtu. Tento typ hyper-horizontálního škálování funguje pro Bifrost dobře, protože klienti nevyžadují vysokou propustnost sítě a omezení každého počítače na méně připojení omezuje rádius selhání.
  • Nový faktor vytížení CPU a paměti : Většina služeb Postman může efektivně škálovat pomocí jediné dimenze měřítka metriky, jako je CPU, paměť nebo latence. U Bifrostu se však věci trochu odliší, protože využití paměti i CPU mají různé dopady na operace na různých úrovních propustnosti. Bifrost k tomu používá vlastní metriku škálování založenou na faktoru zatížení. Faktor zatížení je vícerozměrný výpočet, který poskytuje vlastní nelineární profil škálování.

Pojďme se ponořit do architektonických a technologických rozhodnutí učiněných Postman Engineering.

Architektura a technologický zásobník Bifrost

Systém Bifrost má dvě hlavní součásti – bránu a API. Tato dvoudílná architektura je tajnou omáčkou pro stabilitu a škálovatelnost systému.

Brána funguje jako koncový bod pro všechna připojení websocket. I když jsou komerční brány k dispozici ke koupi, bylo důležité zachovat starší obchodní logiku nahromaděnou v průběhu let optimalizace. Inženýři pošťáků také chtěli plně ovládat, jak se zachází s websockety, například pokud chtěli využít protokol handshake. Pro bránu Bifrost použili Amazon ElastiCache pro Redis, což jim umožnilo dotazovat se na mezipaměť Redis pomocí uzlů čtečky a zapisovače.Rozdělení provozu na dva uzly pro operace čtení a zápisu dále umožňuje týmu optimalizovat výkon.

„Bifrost je naše brána pro všechna připojení websocket. Je to proxy pro všechny klienty Postman a odpovídá za zpracování operací soketů nízké úrovně pro interní služby Postman. “
Mudit Mehta , software engineer ve společnosti Postman

Většina všech ostatních služeb ve společnosti Postman používá Sails jako rámec MVC v reálném čase pro Node.js . Pro bránu Bifrost však inženýři potřebovali výkonný backendový rámec schopný zvládnout velké objemy rychlostí a optimalizovaným využitím paměti. Znovu chtěli jít hlouběji do vrstvy soketu, pod abstrakce vyšší úrovně poskytované Sails. Obrátili se tedy na Fastify a vidlicovali socketio-adaptér middleware, aby jej optimalizovali pro vlastní použití případech.

brána Bifrost používala ke zpracování webových zásuvek AWS, Redis a Fastify

Kromě brány je další komponentou Bifrostu soukromé rozhraní API, které zprostředkovává provoz jiným poštovním službám. Je založen na flexibilních obchodních pravidlech, a proto neustále přehodnocován, jak a kam předávat příchozí provoz.

„Jednoduché komponenty. Komplexní logika. “
Kunal Nagpal , technický manažer ve společnosti Postman

U obou komponent technický tým se rozhodl zavést vlastní. Přestože brána v Bifrostu není často aktualizována, tým má plnou kontrolu nad tím, co se děje v hlubších vrstvách manipulace s websocketem. Část API Bifrostu je mozkem operace a převádí příchozí zprávy v reálném čase na standardní volání HTTP. Lze jej také rychleji aktualizovat jako nezávislou součást od Sync a brány Bifrost.

Pamatujete si tu tajnou omáčku? Oddělení Bifrostu do těchto dvou diskrétních systémů umožňuje oběma částem optimalizovat jejich vlastní cíle.

Cesta ještě zdaleka neskončila

Stejně jako u všech šťavnatých technických příběhů, to není konec . Nechám vás s několika cliffhangers o tom, co přijde dál pro Postman Engineering.

  • Vytvoření další redundance : Mezipaměť Redis je centrálním zprostředkovatelem zpráv . Manipulace s websocketem se stále spoléhá na jediný bod selhání, tak co se stane, když mezipaměť někdy spadne?
  • Zvýšit šířku pásma a propustnost : Brána je v současné době schopna zvládnout 10x souběžnost, ale komunita poštovních doručovatelů rychle roste a inženýrství vytváří další funkce spolupráce. Potřeba zvládnout větší provoz websocket se objevuje rychle.
  • Pokračujte v rozbíjení monolitu: Služba synchronizace obsahuje hromadu dalších služeb propletených v rámci její kódové základny. Odpojení manipulace se sokety od Sync uvolňuje jeho přilnavost k dalším službám, takže další služby lze nyní snáze odloupnout.

Toto byl další pohled do zákulisí fungování Postman Engineering. Zůstaňte naladěni na další příběhy ze zákopů.

🙏🏼 Technická recenze Kunal Nagpal, Yashish Dua, Mudit Mehta a Shamasis Bhattacharya.

Původně publikováno na https://blog.postman.com 22. prosince 2020.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *