Serverless

Lambda és a hidegindulás mérése: hogyan ne csald meg magad?

A p50 hazudik: a hidegindulás a farokban lakik. A p99 és a hideg/meleg hívások szétválasztása mutatja meg a valós felhasználói élményt — nem a kényelmes átlag.

Röviden: A p50 hazudik: a hidegindulás a farokban lakik. A p99 és a hideg/meleg hívások szétválasztása mutatja meg a valós felhasználói élményt — nem a kényelmes átlag.

A serverless teljesítménymérés tele van önbecsapási lehetőséggel. A leggyakoribb: megnézzük az átlagos vagy medián válaszidőt, látjuk, hogy szép, és megnyugszunk. Közben a felhasználók egy része érezhetően lassú élményt kap — pont azok, akiket hidegindulás vagy egy ritka, lassú útvonal ér. A becsületes mérés arról szól, hogy a farokba nézel, nem a kényelmes közepére.

Miért hazudik a p50?

A medián (p50) azt mondja meg, milyen a tipikus kérés. De a teljesítményproblémák definíció szerint nem tipikusak: a hidegindulás, a lassú downstream, a ritka nagy payload mind a kérések kis százalékát érinti. Ezek a p50-ben eltűnnek, a p95-ben és a p99-ben viszont ott vannak. Ha csak a mediánt nézed, pont a fájó eseteket hagyod figyelmen kívül.

Hideg és meleg szétválasztása

A Lambda-nál különösen fontos szétválasztani a hideg és a meleg hívásokat, mert ezek teljesen más eloszlást adnak. Ha összemosod őket, egy torz átlagot kapsz, ami egyikről sem mond igazat. A hideg hívásoknál az inicializálási idő a lényeg; a melegeknél a tiszta feldolgozás.

Mit nézz, és milyen sorrendben?

  1. Hideg hívások aránya — a teljes forgalom hány százaléka hideg? Ha töredék, a cold start nem a fő problémád.
  2. p99 latencia — a lassú farok. Itt derül ki, mit érez a felhasználók legrosszabbul kiszolgált része.
  3. Init időtartam — a hideg hívásoknál mennyi az inicializálás? Ez optimalizálható.
  4. Feldolgozási idő melegen — a tiszta üzleti logika ideje, downstream nélkül és azzal.

A realisztikus terhelés

A mérés csak akkor ér valamit, ha a valós használatot tükrözi. Egy szintetikus teszt, ami folyamatosan, egyenletesen hívja a függvényt, szinte mindig melegen fut — így a hidegindulás alig jelenik meg benne, és hamis biztonságérzetet ad. A valós forgalom lökésszerű és egyenetlen; a mérésnek is ezt kell utánoznia, vagy még jobb, ha éles forgalmon figyeled.

A downstream, ami nagyobb

Gyakran kiderül, hogy a mért lassúság nagyobb részét nem a hidegindulás, hanem a downstream hívások adják: egy lassú adatbázis-lekérdezés, egy sorosított külső API-hívás, egy agresszív retry. Ezek melegen is ott vannak, tehát minden hívásnál számítanak — szemben a hidegindulással, ami csak néha. Ezért a p99 lebontása (mennyi az init, mennyi a downstream) fontosabb, mint pusztán a cold start üldözése.

A percentilisek helyes olvasása

A teljesítménymérés legfontosabb fegyelme a percentilisek helyes használata. A p50 (medián) azt mondja meg, milyen a tipikus kérés — de a teljesítményproblémák definíció szerint nem tipikusak. A p99 mutatja meg, mit érez a felhasználók legrosszabbul kiszolgált egy százaléka, és pont ott lakik a hidegindulás, a lassú downstream, a ritka nagy payload. Ha csak a mediánt nézed, a fájó eseteket hagyod figyelmen kívül.

Érdemes a p99-et tovább bontani: mennyi belőle az inicializálás (a hideg hívások), és mennyi a downstream. Ez a bontás mutatja meg, hol érdemes optimalizálni — és gyakran kiderül, hogy nem a cold start a bűnös.

A hideg és meleg hívások szétválasztása

A Lambda-nál kritikus a hideg és meleg hívások szétválasztása, mert teljesen más eloszlást adnak. Ha összemosod őket, torz átlagot kapsz, ami egyikről sem mond igazat. A futtatási naplókban az inicializálási idő külön jelenik meg a hideg hívásoknál — ezt kigyűjtve pontosan megtudod, hány hívás volt valóban hideg, és mennyi volt az init.

  1. Gyűjtsd ki a hideg hívások arányát a naplókból.
  2. Mérd külön a hideg és a meleg hívások latenciáját.
  3. A p99-et bontsd init és downstream részekre.

A downstream mint valódi bűnös

A becsületes mérés általában azt mutatja, hogy a serverless rendszerek észlelt lassúságának nagyobb részét nem a hidegindulás, hanem a downstream adja: egy lassú lekérdezés, egy sorosított külső hívás, egy agresszív retry. Ezek melegen is ott vannak, tehát minden hívásnál számítanak — szemben a cold starttal, ami csak néha. Ezért a mérés célja nem a hidegindulás igazolása, hanem az, hogy megtaláld, hol vész el valójában az idő.

Mit jelent ez neked?

Ne a p50-re nézz, mert az elrejti a fájó eseteket: a hidegindulás és a lassú útvonalak a farokban élnek. Válaszd szét a hideg és meleg hívásokat, mérd a p99-et, és bontsd le, mennyi belőle az inicializálás és mennyi a downstream. Használj valós vagy legalább lökésszerű terhelést, ne folyamatosan meleg szintetikus tesztet. Így nem magadat csapod be egy szép átlaggal, hanem azt látod, amit a felhasználóid tényleg éreznek.