V začiatkoch výpočtovej techniky nebola potreba distribuovaných transakcií. S rastúcim počtom aplikácií sa synchronizácia údajov stáva dôležitou otázkou. Spoločnosti zaplatili veľa za udržiavanie synchronizovaných systémov z hľadiska toku dát. V dôsledku toho vznikol dvojfázový protokol potvrdenia označovaný ako XA (eXtended Architecture). Tento protokol poskytuje vlastnosti podobné ACID pre globálne spracovanie transakcií. V tomto článku sa pokúsim vysvetliť podrobnosti o transakciách XA a používaní transakcií XA v rámci Spring.

2-fázový protokol potvrdenia je protokol atómového potvrdenia pre distribuované systémy. Tento protokol, ako už názov napovedá, pozostáva z dvoch fáz. Prvým je fáza potvrdenia a požiadavky, v ktorej manažér transakcií koordinuje všetky zdroje transakcie, ktoré sa majú potvrdiť alebo zrušiť. Vo fáze potvrdenia sa manažér transakcie rozhodne dokončiť operáciu potvrdením alebo prerušením podľa hlasov každého zdroja transakcie. Ďalej prejdeme k detailom implementácie protokolu 2PC.

Tu nájdete zdroje o interoperabilite Java + .NET prostredníctvom 2PC.

Transakcie XA potrebujú globálne ID transakcie a ID lokálnej transakcie (xid) pre každý zdroj XA. Každý prostriedok XA je zaradený do správcu XA metódou start(xid). Táto metóda hovorí, že XA Resource je zapojený do transakcie (buďte pripravení na operácie). Potom sa uskutoční prvá fáza protokolu 2PC volaním metódy Prepare(xid). Táto metóda vyžaduje hlasovanie OK alebo ABORT od XA Resource. Po prijatí hlasu od každého zdroja XA sa manažér XA rozhodne vykonať operáciu commit(xid), ak všetky zdroje XA pošlú OK, alebo sa rozhodne vykonať rollback(xid), ak zdroj XA pošle ABORT. Nakoniec sa pre každý zdroj XA zavolá metóda end(xid), ktorá oznamuje, že transakcia je dokončená. Pozrite sa na obrázok, aby ste to lepšie pochopili. Keď vytvárame pozadie implementácie transakcií XA, potom pôjdeme hlbšie a uvidíme, ako napísať tento príkaz tento príkaz tento príkazy zlyhaní a možných riešení.


Zlyhanie môže nastať kedykoľvek v dôsledku straty siete, výpadku počítača a nejakej chyby správcu. V transakcii XA tieto zlyhania kategorizujeme podľa fáz, v ktorých sa vyskytujú. Prvá fáza zlyhania je pred spustením protokolu. Ide o jednoduchú poruchu, pri ktorej sa systém nemusí vrátiť späť ani vykonať akýkoľvek druh operácie. Len nerobíme operáciu pre ten konkrétny moment. Druhý napíšte tento príkaz tento príkaz Tento príkaz zlyhanie môže nastať vo fáze prípravy (požiadanie o potvrdenie), čo sa dá ľahko zvládnuť vrátením späť pomocou politík časového limitu. V neposlednom rade sú zlyhania fázy odovzdania, ku ktorým môže dôjsť v dôsledku neúplných návratov a akéhokoľvek problému v reťazci. Vo všetkých vyššie uvedených situáciách sa manažér transakcií pokúša problém vyriešiť. Ďalej uvidíme, ako sa manažér transakcií pokúsi prekonať zlyhania.

Pri obnove volá manažér transakcií metódu obnovy každého prostriedku XA. Prostriedky XA sledujú protokoly a pokúšajú sa obnoviť ich najnovší stav. Transaction Manager zavolá potrebné operácie návratu a misia je splnená. Tento proces sa môže zdať ako šťastná cesta, ale existuje veľa výnimočných situácií, keď sú protokoly problematické, ako napríklad poškodenie. V takýchto situáciách manažér transakcií postupuje podľa určitej heuristiky na vyriešenie problému. Okrem toho proces obnovy závisí od protokolov zapisovania vopred, do ktorých zapisujete protokoly operácií pred aplikáciou. Pri problémoch s výkonom sú tieto protokoly napísané vo svojom vlastnom formáte (bez použitia serializácie) a systém by ich mal lepšie dávkovať, ak je to možné. Ďalej prejdeme k zábavnej časti, ktorou je podpora transakcií XA prostredníctvom rámca Spring.

Spring framework poskytuje rozsiahle prostredie na vývoj webových a samostatných aplikácií. Rovnako ako ostatné nástroje, ktoré poskytuje, aj transakcie XA podporuje Spring. Táto podpora však nie je natívnou implementáciou a vyžaduje hibernáciu, webový kontajner alebo rámec, ktorý poskytuje XA Transaction Management. Spring má JtaTransactionManager, ktorý poskytuje nástroje na správu transakcií a skrýva podrobnosti. Týmto spôsobom môžeme mať správu transakcií pre viacero DataSources, ktoré sa aktualizujú súčasne. Pokiaľ ide o používanie správy transakcií XA, hibernácia a podpora webových kontajnerov pre transakcie XA sú dobre zdokumentované, netreba ich spomínať. Práca s rámcom, ktorý poskytuje transakcie XA, však môže byť mätúca. Preto budem pokračovať v tomto príspevku predstavením Bitronix Transaction Manager.

Bitronix sa ľahko konfiguruje a zároveň poskytuje dobrú podporu pre správu transakcií. Bežne sa nepoužíva v samostatných aplikáciách, ale pokúsim sa poskytnúť konfiguráciu pre samostatnú aplikáciu nasledovne.

Teraz môžeme mať viacero zdrojov údajov, ktoré je možné nakonfigurovať nasledovne. Každý zdroj údajov by mal mať vlastnosť uniqueName, ktorá je jedinečná. Nižšie uvedená konfigurácia je pre Oracle, ostatné databázy môžu mať rôzne konfigurácie. Na akomkoľvek inom detaile si môžete pozrieť webovú stránku Bitronix.

Aby som to zhrnul, pokúsili sme sa vysvetliť, čo je XA Transactions, základné protokoly a integrácia Bitronix Transaction Management so Spring v samostatnej aplikácii. Na rozšírenie poskytuje XA Transactions úpravu rôznych zdrojov údajov súčasne. Okrem toho sú transakcie XA podporované webovými kontajnermi alebo rámcami podobnými režimu hibernácie. Napriek tomu možno budeme musieť integrovať správu transakcií do samostatnej aplikácie, v ktorej musíme nakonfigurovať správcu transakcií. V dôsledku toho transakcia XA poskytuje konzistentné operácie na viacerých zdrojoch údajov a spoločnosti ich využívajú.
Dúfame, že vám tento článok pomohol s Ako robiť transakcie XA (2-fázový záväzok): Jednoduchý sprievodca. Ak máte ďalšie otázky, radi vám odpovieme; kontaktujte nás v sekcii nižšie. Nezabudnite zdieľať signalfix.net so svojou rodinou a priateľmi!