Szerkesztés

Megosztás a következőn keresztül:


Saga elosztott tranzakciók mintája

Azure

A Saga tervezési mintája segít fenntartani az adatok konzisztenciáját az elosztott rendszerekben a tranzakciók több szolgáltatás közötti koordinálásával. A saga helyi tranzakciók sorozata, ahol minden szolgáltatás végrehajtja a műveletet, és elindítja a következő lépést eseményeken vagy üzeneteken keresztül. Ha a sorozat egy lépése meghiúsul, a saga kompenzáló tranzakciókat hajt végre a befejezett lépések visszavonásához. Ez a megközelítés segít fenntartani az adatkonzisztenciát.

Környezet és probléma

A tranzakciós egy munkaegységet jelöl, amely több műveletet is tartalmazhat. Egy tranzakción belül egy esemény egy entitást érintő állapotváltozásra utal. A parancsok egy művelet végrehajtásához vagy egy későbbi esemény indításához szükséges összes információt beágyaznak.

A tranzakcióknak meg kell felelnie az atomiság, a konzisztencia, az elkülönítés és a tartósság (ACID) alapelveinek.

  • Atomitás: Minden művelet sikeres, vagy nincs sikeres művelet.
  • Konzisztencia: Az adatok áttűnnek egy érvényes állapotból egy másik érvényes állapotba.
  • Elkülönítés: Egyidejű tranzakciók ugyanazokat az eredményeket eredményezik, mint a szekvenciális tranzakciók.
  • tartósság: módosítások a véglegesítése után is megmaradnak, még akkor is, ha hibák lépnek fel.

Egyetlen szolgáltatásban a tranzakciók az ACID alapelveit követik, mivel egyetlen adatbázisban működnek. Azonban összetettebb lehet az ACID-megfelelőség elérése több szolgáltatásban.

A mikroszolgáltatás-architektúrák kihívásai

A mikroszolgáltatás-architektúrák általában egy dedikált adatbázist rendelnek az egyes mikroszolgáltatásokhoz. Ez a megközelítés számos előnnyel jár:

  • Minden szolgáltatás a saját adatait foglalja magában.
  • Minden szolgáltatás a legmegfelelőbb adatbázis-technológiát és sémát használhatja az adott igényeinek megfelelően.
  • Az egyes szolgáltatások adatbázisai egymástól függetlenül méretezhetők.
  • Az egyik szolgáltatás hibái el vannak különítve a többi szolgáltatástól.

Ezen előnyök ellenére ez az architektúra bonyolítja a szolgáltatásközi adatkonzisztenciát. A hagyományos adatbázis-garanciák, például az ACID nem alkalmazhatók közvetlenül több egymástól függetlenül felügyelt adattárra. Ezen korlátozások miatt a folyamatközi kommunikációra támaszkodó architektúrák vagy a hagyományos tranzakciómodellek, például a kétfázisú véglegesítési protokollok gyakran jobban megfelelnek a Saga-mintához.

Megoldás

A Saga-minta úgy kezeli a tranzakciókat, hogy helyi tranzakciók sorozatára.

saga áttekintését bemutató diagram.

Minden helyi tranzakció:

  1. A munkát atomi módon végzi el egyetlen szolgáltatáson belül.
  2. Frissíti a szolgáltatás adatbázisát.
  3. A következő tranzakciót eseményen vagy üzeneten keresztül kezdeményezi.

Ha egy helyi tranzakció meghiúsul, a saga kompenzáló tranzakciók sorozatát hajtja végre, az előző helyi tranzakciók módosításainak megfordításához.

A Saga-minta fő fogalmai

  • kompenzálható tranzakciók visszavonhatók vagy kompenzálhatók más, ellentétes hatású tranzakciók. Ha a saga egy lépése meghiúsul, a kompenzáló tranzakciók visszavonják a kompenzálható tranzakciók módosításait.

  • kimutatástranzakciók a saga visszatérési pontjaként szolgálnak. A kimutatástranzakció sikerességét követően a kompenzálható tranzakciók már nem relevánsak. Minden további műveletet végre kell hajtani ahhoz, hogy a rendszer konzisztens végső állapotot érjen el. A kimutatástranzakciók a saga folyamatától függően különböző szerepköröket feltételezhetnek:

    • visszavonhatatlan vagy nem kompenzálható tranzakciókat nem lehet visszavonni vagy újrapróbálni.

    • A visszavonható és a véglegesített közötti határ azt jelenti, hogy a kimutatástranzakció lehet az utolsó visszavonható vagy kompenzálható tranzakció. Vagy ez lehet a saga első újrapróbálkozási művelete.

  • újrapróbálkozható tranzakciók követni a kimutatást. Az újrapróbálkozható tranzakciók idempotensek, és segítenek biztosítani, hogy a saga elérje a végleges állapotát, még akkor is, ha átmeneti hibák történnek. Segítenek a saga végül elérni a konzisztens állapotot.

A Saga implementálási megközelítései

A két tipikus saga megvalósítási megközelítés koreográfiai és vezénylési. Minden megközelítésnek megvannak a maga kihívásai és technológiái a munkafolyamat koordinálásához.

Koreográfia

A koreográfiai megközelítésben a szolgáltatások központosított vezérlő nélkül cserélik le az eseményeket. Koreográfiával minden helyi tranzakció olyan tartományi eseményeket tesz közzé, amelyek helyi tranzakciókat váltanak ki más szolgáltatásokban.

olyan diagram, amely koreográfiával ábrázol egy sagát.

A koreográfia előnyei A koreográfia hátrányai
Olyan egyszerű munkafolyamatokhoz használható, amelyek kevés szolgáltatással rendelkeznek, és nem igényelnek koordinációs logikát. A munkafolyamat zavaró lehet, ha új lépéseket ad hozzá. Nehéz nyomon követni, hogy az egyes saga-résztvevők mely parancsokra válaszolnak.
A koordinációhoz nincs szükség más szolgáltatásra. Fennáll a veszélye annak, hogy a saga résztvevői ciklikus függőséget jelentenek, mert egymás parancsait kell használniuk.
Nem vezet be egyetlen meghibásodási pontot, mert a felelősségek a saga résztvevői között oszlanak meg. Az integrációs tesztelés nehéz, mert minden szolgáltatásnak futnia kell egy tranzakció szimulálásához.

Hangszerelés

A vezénylés során egy központi vezérlő vagy vezénylőkezeli az összes tranzakciót, és tájékoztatja a résztvevőket, hogy események alapján melyik műveletet hajtják végre. A vezénylő sagakéréseket hajt végre, tárolja és értelmezi az egyes feladatok állapotát, és kompenzáló tranzakciók használatával kezeli a hibák helyreállítását.

vezénylést használó saga ábrázoló ábrája.

A vezénylés előnyei A vezénylés hátrányai
Összetett munkafolyamatokhoz vagy új szolgáltatások hozzáadásához jobban megfelel. A tervezés egyéb összetettsége megköveteli a koordinációs logika implementálását.
Elkerüli a ciklikus függőségeket, mert a vezénylő kezeli a folyamatot. Hibapontot vezet be, mert a vezénylő kezeli a teljes munkafolyamatot.
A felelősségek egyértelmű elkülönítése leegyszerűsíti a szolgáltatás logikáját.

Problémák és szempontok

Vegye figyelembe a következő szempontokat, amikor úgy dönt, hogy hogyan valósítja meg ezt a mintát:

  • Váltás a tervezési gondolkodásban: A Saga minta bevezetése más gondolkodásmódot igényel. Ehhez több mikroszolgáltatás tranzakciókoordinációjára és adatkonzisztenciájára kell összpontosítania.

  • hibakeresési saga összetettsége: hibakeresési saga összetett lehet, különösen a részt vevő szolgáltatások számának növekedésével.

  • Visszavonhatatlan helyi adatbázis-módosítások: Az adatok nem állíthatók vissza, mert a saga résztvevői módosításokat véglegesítettek a saját adatbázisaikban.

  • Átmeneti hibák és idempotencia kezelése: A rendszernek hatékonyan kell kezelnie az átmeneti hibákat, és biztosítania kell az idempotenciát, amikor ugyanazt a műveletet megismételi, nem változtatja meg az eredményt. További információ: Idempotens üzenetfeldolgozási.

  • A saga monitorozásának és nyomon követésének szükségessége: A saga munkafolyamatának monitorozása és nyomon követése alapvető feladat a működési felügyelet fenntartásához.

  • Kompenzáló tranzakciók korlátozásai: Kompenzáló tranzakciók nem mindig sikeresek, ami inkonzisztens állapotban hagyhatja a rendszert.

Lehetséges adatrendellenességek a saga-ban

Az adatrendellenességek inkonzisztenciák, amelyek akkor fordulhatnak elő, ha a sagak több szolgáltatás között működnek. Mivel minden szolgáltatás kezeli a saját adatait, az úgynevezett résztvevők adatait, nincs beépített elkülönítés a szolgáltatások között. Ez a beállítás adatkonzisztenciákat vagy tartóssági problémákat okozhat, például részben alkalmazott frissítéseket vagy a szolgáltatások közötti ütközéseket. Jellemző problémák a következők:

  • Elveszett frissítések: Ha az egyik saga módosítja az adatokat anélkül, hogy figyelembe venné egy másik saga módosításait, az felülírt vagy hiányzó frissítéseket eredményez.

  • Dirty olvas: Amikor egy saga vagy tranzakció olyan adatokat olvas be, amelyeket egy másik saga módosított, de a módosítás nem fejeződött be.

  • homályos vagy nem megismételhető olvasások: Ha a saga különböző lépései inkonzisztens adatokat olvasnak, mert frissítések történnek az olvasások között.

Az adatrendellenességek kezelésére vonatkozó stratégiák

Ezeknek az anomáliáknak a csökkentéséhez vagy megelőzéséhez vegye figyelembe a következő ellenintézkedéseket:

  • Szemantikai zárolás: Alkalmazásszintű zárolások használata, ha egy saga kompenzálható tranzakciója egy szemaphore használatával jelzi, hogy a frissítés folyamatban van.

  • Ingmutatív frissítések: Tervfrissítések, hogy bármilyen sorrendben alkalmazhatók legyenek, miközben továbbra is ugyanazt az eredményt eredményezik. Ez a megközelítés segít csökkenteni a saga-k közötti ütközéseket.

  • pesszimista nézet: átrendezi a saga sorrendjét, hogy az adatfrissítések újrapróbálkozási tranzakciókban történjenek a piszkos olvasások kiküszöbölése érdekében. Ellenkező esetben az egyik saga beolvashatja a piszkos adatokat, vagy nem véglegesített módosításokat, míg egy másik saga egyszerre hajt végre egy kompenzálható tranzakciót a frissítések visszaállításához.

  • Újraolvasási értékek: Ellenőrizze, hogy az adatok nem változnak-e a frissítések megkezdése előtt. Ha az adatok megváltoznak, állítsa le az aktuális lépést, és szükség szerint indítsa újra a saga-t.

  • Verziófájlok: Egy rekordon végrehajtott összes művelet naplójának karbantartása, és az ütközések elkerülése érdekében győződjön meg arról, hogy azok a megfelelő sorrendben vannak végrehajtva.

  • kockázatalapú egyidejűség érték alapján: Dinamikusan válassza ki a megfelelő egyidejűségi mechanizmust a lehetséges üzleti kockázat alapján. Használjon például saga-t alacsony kockázatú frissítésekhez és elosztott tranzakciókhoz a magas kockázatú frissítésekhez.

Mikor érdemes használni ezt a mintát?

Használja ezt a mintát a következő esetekben:

  • Szoros összekapcsolás nélkül kell biztosítania az adatok konzisztenciáját egy elosztott rendszerben.
  • Vissza kell állítania vagy kompenzálnia kell, ha a sorozat egyik művelete meghiúsul.

Ez a minta nem feltétlenül megfelelő, ha:

  • A tranzakciók szorosan kapcsolódnak egymáshoz.
  • A kompenzáló tranzakciók a korábbi résztvevőknél fordulnak elő.
  • Vannak ciklikus függőségek.

Következő lépés

  • Natív felhőbeli adatminták

A minta megvalósításakor a következő minták lehetnek relevánsak:

  • A koreográfiai minta a rendszer minden összetevője részt vesz egy üzleti tranzakció munkafolyamatával kapcsolatos döntéshozatali folyamatban, ahelyett, hogy központi ellenőrzési pontra támaszkodik.

  • A kompenzáló tranzakcióminta visszavonja a lépések sorozata által végzett munkát, és végül konzisztens műveletet határoz meg, ha egy vagy több lépés meghiúsul. Az összetett üzleti folyamatokat és munkafolyamatokat megvalósító felhőalapú alkalmazások gyakran követik ezt a végleges konzisztenciamodellt.

  • Az Újrapróbálkozási minta lehetővé teszi, hogy az alkalmazás kezelje az átmeneti hibákat, amikor megpróbál csatlakozni egy szolgáltatáshoz vagy hálózati erőforráshoz a sikertelen művelet transzparens újrapróbálkozásával. Ez a minta javíthatja az alkalmazás stabilitását.

  • A megszakító minta kezeli azokat a hibákat, amelyekből változó ideig tart a helyreállítás, amikor távoli szolgáltatáshoz vagy erőforráshoz csatlakozik. Ez a minta javíthatja az alkalmazások stabilitását és rugalmasságát.

  • Az állapotvégpont monitorozási mintája olyan alkalmazásokban implementálja a funkcionális ellenőrzéseket, amelyekhez külső eszközök rendszeres időközönként hozzáférhetnek a közzétett végpontokon keresztül. Ez a minta segíthet ellenőrizni, hogy az alkalmazások és szolgáltatások megfelelően teljesítenek-e.