Kétfázisú tranzakció-jóváhagyás

A Wikipédiából, a szabad enciklopédiából

A kétfázisú tranzakció-jóváhagyás az informatikában - elsősorban az adatbázisokhoz kapcsolódó területeken - használatos protokoll, mely segítségével a tranzakciók atomi műveletként viselkednek. Az ilyen protokollokat összefoglaló néven atomi jóváhagyó protokolloknak (angolul ACP) nevezik. Ez a protokoll egy elosztott algoritmust ír le, amely a tranzakcióban részt vevő összes erőforrással kapcsolatban áll, és jóváhagyhatja, illetve visszavonhatja az aktuális tranzakciót. A protokoll célja, hogy egy tranzakció - amely tartalmazhat több, egymástól független műveletet - atomi műveletként viselkedjen. Ehhez alapvetően két feltételnek kell teljesülnie:

  • Ha a tranzakció valamely elemén végbement a tranzakció által definiált változás, akkor az összes elemen menjen végbe.
  • Ha valamilyen okból a tranzakció valamely része elbukik, akkor a tranzakció által érintett erőforrások közül egyik se változzon.

Motiváció[szerkesztés]

A kétfázisú tranzakció-jóváhagyás fontosságának megértéséhez nézzük a következő eseménysorozatot. Elkezdődik egy tranzakció, de mielőtt befejeződhetne, valamilyen hiba keletkezik a rendszerben. Ez a hiba lehet szoftveres hiba, egy hardver elem meghibásodása, vagy akár egy áramszünet. Mivel a tranzakció nem tudott befejeződni, ezért az adatbázisunk egyes adatai változtak, míg más adatok - melyeknek változniuk kellett volna - az eredeti állapotukban maradtak. Így az adatbázisunk elveszíti a konzisztenciáját, hiszen a tárolt adatok már nem a megfelelő információt tartalmazzák. Azonban ha alkalmazzuk a kétfázisú tranzakció jóváhagyást (vagy valamilyen más ACP eljárást), akkor az adatok mindig megfelelő állapotban maradnak.

Elméleti algoritmus[szerkesztés]

Az eljárásban mindig van egy koordinátor és dolgozók. Az utóbbiak felelősek a tranzakció által megkövetelt változások végrehajtásáért, míg az előbbi feladata felügyelni a műveletet. Az eljárás - mint ahogy a nevéből is sejthető - két fázisra osztható:

  • Az első fázis a szavazási fázis. Ebben a koordinátor "felszólítja" a dolgozókat, hogy végezzék el a jóváhagyáshoz és a megszakításhoz szükséges műveleteket. Ezzel tehát felkészül a rendszer arra, hogy a koordinátor jóváhagyja, vagy megszakítsa a tranzakciót. Ezután a dolgozók szavaznak, azaz "igen" értéket küldenek a koordinátorhoz, hogyha készek a jóváhagyásra, és "nem" értéket különben.
  • A második fázis a jóváhagyási fázis. Ez az első fázis eredményét felhasználva működik. Ha a koordinátor azt látja, hogy az összes dolgozó "igen"-nel tért vissza, akkor, és csak akkor felszólítja a dolgozókat, hogy hajtsák végre a már előkészített jóváhagyás műveletüket. Ha csak egy dolgozó is "nem" értékkel tér vissza, akkor a koordinátor a megszakítás művelet végrehajtására ad ki utasítást.

Ahhoz, hogy ez a módszer működjön, szükség van a rendszer állapotának tárolására. Erre általában valamilyen naplózási technikát használnak. A naplózás lassú, de a legtöbb rendszerhibát átvészeli.

Az eljárás hátránya[szerkesztés]

A legnagyobb hátrány, hogy a kétfázisú tranzakció-jóváhagyás egy blokkoló eljárás. Ez azt jelenti, hogy adott esetben végtelen hosszú ideig blokkolhatja a rendszer működését. Ez az eset akkor fordul elő, ha a koordinátor véglegesen leáll a két fázis határán. Ekkor a dolgozók elküldték a szavazatukat, és blokkolt állapotba kerülnek. Ez a blokkolt állapot csak akkor ér véget, ha a koordinátor utasítja őket valamelyik művelet végrehajtására, azonban a koordinátor leállt, ezért a dolgozók végérvényesen blokkolva maradnak. Ezen hiba elkerülése végett fejlesztették ki - többek között - a háromfázisú tranzakció-jóváhagyás protokollt, amely egy nem blokkoló protokoll.