Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az elosztott rendszerek adatkonzisztenciájának fenntartása a helyi tranzakciók több szolgáltatás közötti összehangolásával. 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 egy lépés meghiúsul, a kompenzáló tranzakciók sorozata visszavonja a végrehajtott lépéseket.
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 adat egyik érvényes állapotból egy másik érvényes állapotba kerül át.
- 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 azokat egymást követő helyi tranzakciókra bontja.
Minden helyi tranzakció:
- A munkát atomi módon végzi el egyetlen szolgáltatáson belül.
- Frissíti a szolgáltatás adatbázisát.
- 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 más, ellentétes hatású tranzakciók által kompenzálható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.
Pivottranzakciók jelentik azt a pontot a sagában, ahonnan nincs visszatérés. A pivottranzakció sikeres végrehajtása után 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 pivot tranzakció a saga folyamatától függően különböző szerepköröket tölthet be:
visszavonhatatlan vagy nem kompenzálható tranzakciókat nem lehet visszavonni vagy újrapróbálni.
A visszavonható és a végleges közötti határ azt jelenti, hogy a pivottranzakció lehet az utolsó visszavonható, illetve kompenzálható tranzakció. Vagy ez lehet a saga első újrapróbálkozási művelete.
Újrapróbálkozható tranzakciók követik a sarkalatos tranzakciót. A megismételhető tranzakciók idempotensek, és segítenek biztosítani, hogy a saga elérhesse a végső állapotát, még átmeneti hibák fellépése esetén is. Segítenek abban, hogy a saga végül elérje a konzisztens állapotot.
A Saga implementálási megközelítései
A saga megvalósításának két tipikus megközelítése a koreográfia és az orkesztráció. 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áfia esetén minden helyi tranzakció doméneseményeket tesz közzé, amelyek más szolgáltatásokban helyi tranzakciókat váltanak ki.
| 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 kockázata annak, hogy ciklikus függőség alakul ki a saga résztvevői között, mert fel kell dolgozniuk egymás parancsait. |
| 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.
| Az orchesztráció előnyei | Az orchesztráció 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 fogyasztói minta.
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.
Piszkos olvasás: Amikor egy saga vagy tranzakció olyan adatokat olvas, amelyeket egy másik saga módosított, de a módosítás még 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: Használjon alkalmazásszintű zárolásokat, amikor egy saga kompenzálható tranzakciója szemafort használ annak jelzésére, hogy egy 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 az előző állapotot, vagy kompenzálnia kell, ha a műveletsor 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
Kapcsolódó erőforrások
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 Circuit Breaker minta olyan hibákat kezel, amelyek helyreállítása változó időt vesz igénybe, 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.