Serverless

Step Functions vagy alkalmazáskód? Az orchestráció valódi ára

A vizuális workflow csábítóan átlátható, de az állapotgép díja és a hibakeresés komplexitása döntő lehet. Mikor éri meg a menedzselt orchestráció, és mikor a saját kód?

Röviden: A vizuális workflow csábítóan átlátható, de az állapotgép díja és a hibakeresés komplexitása döntő lehet. Mikor éri meg a menedzselt orchestráció, és mikor a saját kód?

Amint egy serverless folyamat túllép a „hívj meg egy függvényt” szinten, felmerül az orchestráció kérdése: hogyan fűzzük össze a lépéseket, kezeljük a hibákat, a retry-t és a párhuzamosságot? Két tábor alakul ki. Az egyik a menedzselt állapotgépet (Step Functions) választja, a másik a saját alkalmazáskódban tartja a vezérlést. Mindkettőnek megvan a helye — a tévedés az, ha divatból, nem a probléma alapján döntünk.

Mit ad a menedzselt állapotgép?

A Step Functions vizuálisan is követhető állapotgépet kínál: minden lépés, elágazás, retry és timeout deklaratívan le van írva. Ez több valódi előnyt hoz. A folyamat állapota látható és auditálható; a retry- és hibakezelési logikát nem neked kell kézzel megírnod; és a hosszan futó, több lépéses folyamatok koordinációja beépített.

Ahol a legerősebb

A menedzselt orchestráció ott ragyog, ahol a folyamat hosszú, több rendszert érint, és a megbízható újrapróbálkozás kritikus. Egy több lépéses rendelésfeldolgozás, egy jóváhagyási folyamat emberi várakozással, vagy egy adatpipeline, ahol minden lépés hibáját külön kell kezelni — ezek klasszikus jó illeszkedések.

Mit ad a saját alkalmazáskód?

A kódban tartott orchestráció rugalmasabb és gyakran olcsóbb. Nincs állapotátmenet-alapú díj, a logika ott van, ahol a fejlesztő megszokta, és a hibakeresés a megszokott eszközökkel megy. Cserébe neked kell megírnod és tesztelned a retry-t, a timeoutot és a részleges hibák kezelését — és pont ez az, amit könnyű alábecsülni.

Az ár, amit könnyű elnézni

A Step Functions díja állapotátmenet-alapú a standard módban. Egy ritkán futó, összetett folyamatnál ez elhanyagolható. Egy nagyon nagy volumenű, egyszerű folyamatnál viszont — ahol másodpercenként sok ezer átmenet történik — a díj gyorsan érdemi tétellé válhat. Ilyenkor vagy az express mód a válasz (más árazással), vagy a kódban tartott vezérlés.

SzempontMenedzselt állapotgépSaját alkalmazáskód
Retry/hibakezelésBeépített, deklaratívNeked kell megírnod
LáthatóságVizuális, auditálhatóLoggal, tracinggel
KöltségmodellÁtmenet-alapúCompute-alapú
RugalmasságKorlátozottabbTeljes
Hosszú, több lépéses folyamatIdeálisNehézkes

A hibrid, ami gyakran a helyes válasz

Nem kell egyetlen mintát ráerőltetni az egész rendszerre. Sok architektúrában jól működik, ha a magas szintű, üzletileg fontos, hosszú folyamatot menedzselt állapotgép koordinálja, az egyes lépéseken belüli szoros, teljesítménykritikus logika viszont sima kódban fut. Így megkapod a láthatóságot ott, ahol számít, és a rugalmasságot ott, ahol kell.

Döntési szempontok

  1. Mennyi ideig fut a folyamat? Percek-órák esetén a menedzselt állapotgép sokat segít.
  2. Mekkora a volumen? Nagyon nagy, egyszerű volumennél az átmenet-díj számít.
  3. Mennyire kritikus a láthatóság és az audit? Ha jogilag vagy üzletileg fontos, a deklaratív állapotgép előny.
  4. Mennyire összetett a hibakezelés? Sok elágazás és retry esetén a menedzselt megoldás megspórolja a saját hibakódot.

A tesztelhetőség kérdése

A két megközelítés tesztelhetősége eltér, és ez a döntés fontos, de gyakran elfelejtett szempontja. A saját kódban tartott orchestrációt a megszokott egységteszt-eszközökkel tudod tesztelni: mockolod a függőségeket, végigfuttatod a logikát, ellenőrzöd a hibaágakat. A menedzselt állapotgépnél a tesztelés más — az egyes lépéseket tesztelheted, de a teljes állapotgép viselkedését jellemzően integrációs szinten kell ellenőrizni.

Ha a csapatnak erős egységteszt-kultúrája van, és a logika bonyolult, ez a kódban tartott megoldás javára billenthet. Ha viszont a folyamat a lépések összefűzéséről szól, és a lépések maguk egyszerűek, az állapotgép átláthatósága nyer.

A megfigyelhetőség és az audit

A menedzselt állapotgép egyik legnagyobb, kevéssé hangsúlyozott előnye a beépített láthatóság. Minden futás nyomon követhető: látod, melyik lépésnél hol tartott, mi sikerült, mi bukott el. Ez auditálandó, üzletileg kritikus folyamatoknál (pénzügyi tranzakció, jóváhagyási lánc) hatalmas érték — nem kell magadnak megépítened a nyomkövetést.

A migráció iránya

Érdemes tudni, hogy a két megközelítés között nem lehetetlen később váltani, de nem is triviális. Egy jól strukturált, kis, tiszta lépésekre bontott kód könnyebben állapotgéppé emelhető, mint egy összegabalyodott monolit. Ezért még ha kóddal is kezded, tartsd a lépéseket lazán csatoltnak és idempotensnek — így megőrzöd a lehetőséget, hogy később menedzselt orchestrációra válts, ha a folyamat összetettsége azt indokolja.

Mit jelent ez neked?

Az orchestrációt a folyamat természete döntse el, ne a divat. Hosszú, több lépéses, auditálandó folyamatra a menedzselt állapotgép megspórolja a hibakezelő kódot és láthatóságot ad. Nagyon nagy volumenű, egyszerű vagy teljesítménykritikus logikára a saját kód olcsóbb és rugalmasabb — de csak akkor, ha az idempotenciát és a retry-t komolyan veszed. A legtöbb kiforrott rendszer végül a kettőt vegyíti.