Prípadové štúdie · Cestovné médiá

Holiday Weather: z Heroku na serverless AWS — a 4× rýchlejšie pri najpomalších požiadavkách

Nezdokumentované Java „mikroslužby“ na Heroku sa stali TypeScript serverless platformou na AWS. Medián odozvy klesol z 334 ms na 207 ms a najpomalšia požiadavka z 2,3 s na 0,3 s.

Služba
AWS konfigurácia a škálovanie
Odvetvie
Cestovné médiá
Klient
Holiday Weather ↗
Rok
2020
334 → 207 msmedián odozvy
2,3 s → 0,3 snajpomalšia požiadavka
−77 %latencia p90
Problém

Holiday Weather — web s počasím, predpoveďami a priemermi pre dovolenkové destinácie — bežal ako sada Java/Spring „mikroslužieb“ na Heroku bez dokumentácie, so zamotanými vzájomnými závislosťami a slabou podporou pôvodného tímu. Každá zmena bola riziková a 90. percentil odozvy presahoval 1,3 sekundy.

Čo sme urobili

Najprv sme navrhli presun na AWS ECS bez zmeny kódu, potom sme obhájili prepis — TypeScript na Lambde, DynamoDB so streamami, SQS, S3 a Redis cache pred webom — a postavili ho. Dáta o počasí prichádzajú cez FTP podľa harmonogramu, lokality sa spravujú cez admin API a každý krok je viditeľný v CloudWatch.

Čo sa zmenilo

Nová platforma obslúži medián požiadavky za 207 ms (predtým 334 ms) a najpomalšiu za 302 ms (predtým 2 290 ms) — a keď bola stabilná, zdedené sťahovanie cez FTP sme nahradili API poskytovateľa.

Východisková situácia

Holiday Weather poskytuje britským dovolenkárom aktuálne počasie, predpovede a mesačné priemery pre stovky destinácií — Malorka, Tenerife, Maldivy, Cancún. Za webom bežala Java (Spring) aplikácia na Heroku, rozdelená na „mikroslužby“, ktoré boli viac zamotané než modulárne: bez dokumentácie, vzájomne závislé, s Redisom v pozadí a len sporadickou podporou tímu, ktorý ich postavil.

Pre majiteľov to znamenalo tri problémy naraz: nikto nevedel systém bezpečne meniť, prevádzka stála viac, než mala, a používatelia to cítili — 90. percentil odozvy bol 1,3 sekundy a najpomalšie požiadavky trvali vyše dvoch.

Dva návrhy

Prvý návrh — lift and shift. Zabaliť existujúce Java služby do kontajnerov a spustiť ich na AWS ECS. Na papieri najmenšie riziko, ale nezdokumentovaná zložitosť by sa len presťahovala na novú faktúru.

Druhý návrh — prepis pre platformu. Nanovo implementovať dátovú pipeline a API v TypeScripte na AWS Lambda, ukladať lokality a predpovede do DynamoDB a zmeny distribuovať cez DynamoDB Streams, oddeliť kroky pomocou SQS, archivovať surové dáta do S3 a pred web dať Redis cache. Viac práce na začiatku; systém, ktorému tím klienta potom naozaj rozumie a vie ho prevádzkovať.

Klient si vybral prepis.

Výsledná architektúra

Krok Čo beží
Príjem dát Predpovede prichádzajú z API poskytovateľa (pôvodne plánované sťahovanie zazipovaných súborov cez FTP — pozri nižšie)
Lokality Admin API definuje, ktoré destinácie existujú; sú uložené v DynamoDB
Spracovanie Lambda funkcie parsujú dáta, filtrujú ich podľa zoznamu lokalít a posielajú prácu do SQS
Úložisko Spracované predpovede v DynamoDB; surové súbory archivované v S3
Servírovanie Web číta z Redis cache, ktorú pipeline priebežne obnovuje

Všetko je infraštruktúra ako kód a každý krok reportuje do CloudWatch, takže chybný feed alebo pomalý poskytovateľ sa ukáže ako graf, nie ako sťažnosť zákazníka.

Čísla

Rovnaká záťaž proti obom platformám (ApacheBench, časy v ms):

Heroku (staré) AWS (nové)
Priemer 521 216
Medián 334 207
90. percentil 1 316 297
99. percentil 2 290 302
Najdlhšia požiadavka 2 290 302

Príbeh je v chvoste: najpomalšia požiadavka na novej platforme je rýchlejšia než medián na starej.

A potom sme položili správnu otázku

Pipeline stále začínala plánovaným sťahovaním zazipovaných súborov z FTP servera poskytovateľa dát — lebo tak sa to robilo odjakživa. Keď bola platforma stabilná, vrátili sme sa k poskytovateľovi a spýtali sa, čo ešte ponúka. Mali riadne API. Sťahovanie cez FTP sme nahradili priamou integráciou na API: predpovede prichádzajú vo chvíli, keď sú publikované, nie podľa časovača, kód na príjem dát sa scvrkol na zlomok a z pohotovostného zoznamu zmizla ďalšia pohyblivá súčiastka.

Poučenie, ktoré si odvtedy berieme do každej migrácie: prestavajte platformu, ale spochybnite aj vstupy, ktoré ste zdedili.

← Ďalšie prípadové štúdie

Kontakt

Konzultácia priamo s naším inžinierom

Napíšte, čo riešite. Do dvoch pracovných dní dostanete konkrétny návrh s rozsahom a cenou.

  • Odpovedá senior inžinier alebo lead audítor, nie account manažér
  • Pevný rozsah a cena skôr, než sa začne pracovať
  • Procesy certifikované podľa ISO 9001 a ISO 27001, NDA na požiadanie