Barabás Ákos

· 1 perc olvasás

Az 'Exactly Once' feldolgozás többnyire csak illúzió

A legtöbb elosztott rendszer nem garantálja, hogy egy üzenet pontosan egyszer kerül feldolgozásra. A valódi kihívás az, hogy a rendszer ettől még helyesen működjön.

Az elosztott rendszerekkel kapcsolatban az egyik leggyakoribb tévhit, hogy minden üzenet pontosan egyszer kerül feldolgozásra.

A valóságban a legtöbb üzenetsor ezt nem is próbálja garantálni. Egy üzenet újra kézbesíthető, egy sikertelen feldolgozás után ismét sorba kerülhet, vagy akár később érkezhet meg, mint egy másik. Hálózati hibák, időtúllépések és worker összeomlások mind a rendszer természetes működésének részei.

A duplikált feldolgozás teljes kizárása általában indokolatlanul bonyolult rendszerekhez vezet.

Sokkal egyszerűbb elfogadni, hogy a duplikáció időnként előfordul, és ennek megfelelően megtervezni az alkalmazást.

Ez a gyakorlatban legtöbbször idempotens műveleteket jelent. Ha ugyanannak az üzenetnek a többszöri feldolgozása ugyanahhoz az eredményhez vezet, mint az egyszeri feldolgozás, akkor az újrapróbálkozások már nem jelentenek valódi kockázatot. A worker nyugodtan újraindulhat, az üzenetsor ismét kézbesítheti az eseményt, a rendszer pedig továbbra is konzisztensen működik.

Ez természetesen nem old meg minden problémát. A feldolgozási sorrend, a részleges hibák és a hosszú ideig futó feladatok továbbra is körültekintő tervezést igényelnek.

Viszont ha elfogadjuk, hogy a hibák elkerülhetetlenek, teljesen más szemlélettel kezdünk rendszereket tervezni.

A megbízható rendszerek nem attól lesznek megbízhatóak, hogy soha semmi nem romlik el.

Hanem attól, hogy akkor is helyesen működnek, amikor mégis.