Tietojenkäsittelyn alkuaikoina ei ollut tarvetta hajautetuille tapahtumille. Sovellusten määrän kasvaessa tietojen synkronoinnista tulee tärkeä kysymys. Yritykset maksoivat paljon synkronoitujen järjestelmien ylläpitämisestä tiedonkulun suhteen. Tämän seurauksena syntyi 2-vaiheinen sitoutumisprotokolla, jota kutsutaan nimellä XA (eXtended Architecture). Tämä protokolla tarjoaa ACID-kaltaisia ​​ominaisuuksia maailmanlaajuista tapahtumakäsittelyä varten. Tämän artikkelin aikana yritän selittää XA-tapahtumien yksityiskohtia ja XA-tapahtumien käyttöä Spring-kehyksessä.

2-vaiheinen sitoutumisprotokolla on hajautettujen järjestelmien atomisitoumusprotokolla. Tämä protokolla, kuten sen nimi kertoo, koostuu kahdesta vaiheesta. Ensimmäinen on commit-request -vaihe, jossa tapahtumanhallinta koordinoi kaikki tapahtumaresurssit sitoutumista tai keskeyttämistä varten. Toimitusvaiheessa tapahtumapäällikkö päättää lopettaa toiminnan sitomalla tai keskeyttämällä kunkin tapahtumaresurssin äänien mukaan. Seuraavaksi siirrymme 2PC-protokollan toteutusyksityiskohtiin.

Katso täältä resurssit Java + .NET -yhteentoimivuudesta 2PC:n kautta.

XA-tapahtumat tarvitsevat globaalin tapahtumatunnuksen ja paikallisen tapahtumatunnuksen (xid) jokaiselle XA-resurssille. Jokainen XA-resurssi kirjataan XA Manageriin start(xid)-menetelmällä. Tämä menetelmä kertoo, että XA Resource on mukana tapahtumassa (ole valmis toimintaan). Tämän jälkeen 2PC-protokollan ensimmäinen vaihe toteutetaan kutsumalla valmista(xid)-menetelmää. Tämä menetelmä pyytää OK- tai ABORT-ääntä XA-resurssilta. Saatuaan äänen jokaiselta XA-resurssilta, XA Manager päättää suorittaa commit(xid)-toiminnon, jos kaikki XA-resurssit lähettävät OK, tai päättää suorittaa palautuksen (xid), jos XA-resurssi lähettää ABORTin. Lopuksi end(xid)-menetelmää kutsutaan jokaiselle XA-resurssille, joka kertoo, että tapahtuma on suoritettu. Katso kuvaa ymmärtääksesi paremmin. Kun rakennamme taustaa XA-tapahtumien toteutuksessa, menemme seuraavaksi syvemmälle ja näemme kirjoittamalla tämän komennon tämä komento antaa virheitä ja mahdollisia ratkaisuja.


Vikoja voi ilmetä milloin tahansa verkon katkeamisen, koneen katkeamisen ja järjestelmänvalvojan virheiden vuoksi. XA-tapahtumassa luokittelemme nämä viat niiden esiintymisvaiheiden mukaan. Ensimmäinen epäonnistumisvaihe on ennen protokollan aloittamista. Tämä on yksinkertainen vika, jota järjestelmän ei tarvitse peruuttaa tai suorittaa minkäänlaista toimintaa. Emme vain tee operaatiota sillä hetkellä. Toinen kirjoita tämä komento tämä komento tämä epäonnistumiskomento voi tapahtua valmisteluvaiheessa (commit-request), joka voidaan helposti käsitellä palautuksilla aikakatkaisukäytäntöjen avulla. Viimeisenä mutta ei vähäisimpänä on commit-vaiheen epäonnistuminen, joka voi johtua epätäydellisistä palautuksista ja kaikista ketjun ongelmista. Kaikissa näissä yllä mainituissa tilanteissa tapahtumapäällikkö yrittää korjata ongelman. Seuraavaksi näemme, kuinka tapahtumapäällikkö yrittää voittaa epäonnistumiset.

Palauttaessa tapahtumanhallinta kutsuu kunkin XA-resurssin palautusmenetelmää. XA Resources jäljittää lokit ja yrittää palauttaa sen uusimman kunnon. Transaction Manager kutsuu tarvittavat palautustoiminnot ja tehtävä on suoritettu. Tämä prosessi voi tuntua onnelliselta tieltä, mutta on monia poikkeuksellisia tilanteita, joissa lokit ovat ongelmallisia, kuten vioittuminen. Tällaisissa tilanteissa tapahtumapäällikkö noudattaa heuristiikkaa ongelman ratkaisemiseksi. Lisäksi palautusprosessi riippuu kirjoituslokeista, joihin kirjoitat toimintalokeja ennen hakemuksen tekemistä. Suorituskykyongelmista nämä lokit kirjoitetaan omaan muotoonsa (ei käytä sarjoitusta), ja järjestelmän pitäisi parantaa niitä, jos mahdollista. Seuraavaksi siirrymme hauskaan osaan, joka on Spring frameworkin XA-tapahtumatuki.

Spring Framework tarjoaa laajan ympäristön web- ja itsenäisten sovellusten kehittämiseen. Kuten muutkin sen tarjoamat apuohjelmat, Spring tukee myös XA-tapahtumia. Tämä tuki ei kuitenkaan ole natiivi toteutus, ja se vaatii horrostilan, verkkosäiliön tai puitteet, jotka tarjoavat XA Transaction Managementin. Keväällä on JtaTransactionManager, joka tarjoaa tapahtumanhallintaapuohjelmia ja piilottaa yksityiskohdat. Tällä tavalla meillä voi olla tapahtumien hallintaa useille tietolähteille, jotka päivitetään samanaikaisesti. Mitä tulee XA Transaction Managementin käyttöön, lepotila- ja verkkosäilöjen tuki XA-tapahtumille on dokumentoitu hyvin, ei tarvitse mainita. XA-tapahtumia tarjoavan kehyksen kanssa työskentely voi kuitenkin olla hämmentävää. Siksi jatkan tätä viestiä esittelemällä Bitronix Transaction Managerin.

Bitronix on helppo konfiguroida samalla kun se tarjoaa hyvän tuen tapahtumien hallintaan. Sitä ei yleisesti käytetä itsenäisissä sovelluksissa, mutta yritän antaa erillisen sovelluksen asetukset seuraavasti.

Meillä voi nyt olla useita tietolähteitä, jotka voidaan määrittää seuraavasti. Jokaisella tietolähteellä tulee olla ainutlaatuinen Name-ominaisuus, joka on ainutlaatuinen. Alla olevat asetukset koskevat Oraclen asetuksia, muilla tietokannoilla voi olla erilaisia ​​kokoonpanoja. Muiden yksityiskohtien osalta voit tarkistaa Bitronixin verkkosivuilta.

Yhteenvetona olemme yrittäneet selittää, mikä on XA Transactions, taustalla olevat protokollat ​​ja Bitronix Transaction Management -integraatio Springin kanssa erillisessä sovelluksessa. Laajentamiseksi XA Transactions tarjoaa eri tietolähteiden muokkaamisen samanaikaisesti. Lisäksi XA-tapahtumia tukevat verkkosäilöt tai lepotilan kaltaiset puitteet. Siitä huolimatta saatamme joutua integroimaan tapahtumien hallinnan erilliseksi sovellukseksi, jossa meidän on määritettävä tapahtumien hallinta. Tämän seurauksena XA-tapahtuma tarjoaa johdonmukaisen toiminnan useille tietolähteille, ja yritykset käyttävät niitä.
Toivomme, että tämä artikkeli auttoi sinua Kuinka tehdä XA Transactions (2 Phase Commit): Yksinkertainen opas. Jos sinulla on muita kysymyksiä, vastaamme mielellämme kysymyksiisi; ota meihin yhteyttä alla olevassa osiossa. Älä unohda jakaa signalfix.net perheesi ja ystäviesi kanssa!