XA specifikācija
XA ir saskarnes specifikācija (t.i., saskarnes funkcija) starp transakciju starpprogrammatūru un X/Open DTP definēto datu bāzi, ko transakciju starpprogrammatūra izmanto, lai paziņotu datu bāzei par darījumu sākumu, beigām, izpildi, atcelšanu utt. XA interfeisa funkcijas nodrošina datu bāzes piegādātāji. Otrās kārtas iesniegšanas līgums un trešās kārtas iesniegšanas līgums tika iegūti no šīs idejas. Var teikt, ka divpakāpju saistības faktiski ir atslēga XA sadalīto darījumu ieviešanai (precīzāk: divpakāpju saistības galvenokārt nodrošina sadalīto darījumu atomiskumu: tas ir, visi mezgli vai nu dara visu, vai neko)
2 gab
Divfāžu apņemšanās attiecas uz algoritmu, kas izstrādāts, lai saglabātu konsekvenci darījumu saistībās visiem mezgliem, pamatojoties uz izkliedētās sistēmas arhitektūru datortīklu un datu bāzu jomā. Bieži vien divpakāpju saistības tiek sauktas arī par protokolu. Izkliedētā sistēmā katrs mezgls var zināt savas darbības panākumus vai neveiksmes, bet tas nevar zināt citu mezglu darbību panākumus vai neveiksmes. Ja darījums aptver vairākus mezglus, lai saglabātu darījuma ACID īpašības, ir jāievieš komponents, kas darbojas kā koordinators, lai kontrolētu visu mezglu rezultātus (sauktos par dalībniekiem) un galu galā uzdotu šiem mezgliem faktiski iesniegt rezultātus (piemēram, rakstīt atjauninātus datus diskā utt.). Tāpēc divpakāpju iesniegšanas algoritma ideju var apkopot šādi: dalībnieki paziņos koordinatoram par operācijas panākumiem vai neveiksmēm, un pēc tam koordinators izlems, vai iesniegt operāciju vai pārtraukt operāciju, pamatojoties uz visu dalībnieku atgriezenisko saiti. Tā sauktie divi posmi ir: pirmais posms: sagatavošanas posms (balsošanas posms) un otrais posms: iesniegšanas posms (izpildes posms).
Sagatavošanas posms
Darījumu koordinators (darījumu pārvaldnieks) nosūta ziņojumu Sagatavot katram dalībniekam (resursu pārvaldniekam), un katrs dalībnieks vai nu tieši atgriež kļūmi (piemēram, neveiksmīgu atļaujas pārbaudi), vai izpilda darījumu lokāli, raksta vietējos atsaukšanas un atsaukšanas žurnālus, bet neapņemas un sasniedz stāvokli "viss ir gatavs, tikai austrumu vējš ir parādā".
Sagatavošanas posmu var iedalīt šādos trīs posmos:
1) Koordinatora mezgls jautā visiem dalībnieku mezgliem, vai viņi var veikt balsošanu, un sāk gaidīt atbildi no katra dalībnieka mezgla.
2) Dalībnieka mezgls veic visas darījumu operācijas, līdz vaicājums tiek uzsākts, un žurnālā ieraksta informāciju Atsaukt un Atsaukt informāciju. (Piezīme: ja tas ir veiksmīgs, katrs dalībnieks jau ir veicis darījuma operāciju)
3) Katrs dalībnieka mezgls atbild uz koordinatora mezgla ierosināto pieprasījumu. Ja dalībnieka mezgla darījuma operācija faktiski tiek veiksmīgi izpildīta, tā atgriež ziņojumu "Piekrītu"; Ja dalībnieka mezgla transakcijas operācija faktiski neizdodas, tas atgriež ziņojumu "pārtraukts".
Iesniegšanas posms Ja koordinators saņem kļūmes ziņojumu vai taimautu no dalībnieka, tas nosūtīs atcelšanas ziņojumu tieši katram dalībniekam. Pretējā gadījumā nosūtiet Commit ziņojumu; Dalībnieki veic saistību vai atcelšanas operācijas saskaņā ar koordinatora norādījumiem, lai atbrīvotu visus bloķēšanas resursus, kas tiek izmantoti transakcijas procesā. (Piezīme: bloķēšanas resursi ir jāatbrīvo pēdējā posmā)
Tālāk iesniegšanas posma process tiek apspriests atsevišķi divos gadījumos.
Ja atbilstošais ziņojums, ko koordinatora mezgls saņem no visiem dalībnieku mezgliem, ir Piekrītu:
Iesniegšanas posms Ja koordinators saņem kļūmes ziņojumu vai taimautu no dalībnieka, tas nosūtīs atcelšanas ziņojumu tieši katram dalībniekam. Pretējā gadījumā nosūtiet Commit ziņojumu; Dalībnieki veic saistību vai atcelšanas operācijas saskaņā ar koordinatora norādījumiem, lai atbrīvotu visus bloķēšanas resursus, kas tiek izmantoti transakcijas procesā. (Piezīme: bloķēšanas resursi ir jāatbrīvo pēdējā posmā)
Tālāk iesniegšanas posma process tiek apspriests atsevišķi divos gadījumos.
Ja atbilstošais ziņojums, ko koordinatora mezgls saņem no visiem dalībnieku mezgliem, ir Piekrītu:
1) Koordinatora mezgls izdod "commit" pieprasījumu visiem dalībnieku mezgliem.
2) Dalībnieka mezgls oficiāli pabeidz operāciju un atbrīvo resursus, kas aizņemti visā darījuma periodā.
3) Dalībnieka mezgls nosūta ziņojumu "Gatavs" uz koordinatora mezglu.
4) Koordinatora mezgls pabeidz darījumu pēc ziņojuma "Gatavs" atgriezeniskās saites saņemšanas no visiem dalībnieku mezgliem. Ja kāds no dalībnieku mezgliem pirmajā fāzē atgriež atbildes ziņojumu "Pārtraukts" vai ja koordinatora mezgls nevar saņemt atbildes ziņojumu par visiem dalībnieku mezgliem pirms vaicājuma taimauta pirmajā fāzē:
1) Koordinatora mezgls izdod "atcelšanas" pieprasījumu visiem dalībnieku mezgliem.
2) Dalībnieka mezgls izmanto iepriekš rakstīto atsaukšanas informāciju, lai veiktu atcelšanu un atbrīvotu resursus, kas aizņemti visā darījuma periodā.
3) Dalībnieka mezgls nosūta ziņojumu "atcelšana pabeigta" koordinatora mezglam.
4) Koordinatora mezgls atceļ darījumu pēc tam, kad saņēmis atgriezenisko saiti "Atcelšana pabeigta" no visiem dalībnieku mezgliem. Neatkarīgi no gala rezultāta otrais posms izbeidz pašreizējo darījumu. Šķiet, ka 2. fāzes saistības nodrošina atomoperācijas, bet diemžēl 2. posma saistībām joprojām ir daži trūkumi:
1. Sinhronās bloķēšanas problēma. Izpildes laikā visi iesaistītie mezgli bloķē darījumus. Ja dalībnieks aizņem publisku resursu, citiem trešo pušu mezgliem ir jābloķē piekļuve publiskajam resursam.
2. Viens kļūmes punkts. Sakarā ar koordinatora nozīmi, tiklīdz koordinators neizdodas. Dalībnieki turpinās bloķēt bloķēšanu. Īpaši otrajā posmā, ja koordinators neizdodas, visi dalībnieki joprojām ir bloķēti darījumu resursi un nevar turpināt pabeigt darījumu operācijas. (Ja koordinators uzliek, jūs varat atkārtoti ievēlēt koordinatoru, bet tas nevar atrisināt problēmu, ka dalībnieks ir bloķēts koordinatora darbības dēļ)
3. Datu neatbilstība. Otrā posma otrajā posmā, kad koordinators nosūta dalībniekam saistību pieprasījumu, rodas vietējā tīkla izņēmums vai koordinators neizdodas saistību pieprasījuma procesā, kā rezultātā tikai daži dalībnieki pieņem saistību pieprasījumu. Pēc apņemšanās pieprasījuma saņemšanas šie dalībnieki veiks saistību darbību. Tomēr citas mašīnas, kas nesaņem commit pieprasījumu, nevar izpildīt transakcijas izpildi. Tā rezultātā datu nodaļas konsekvence notiek visā izplatītajā sistēmā.
4. Problēmas, kuras nevar atrisināt otrajā posmā: Koordinators iet uz leju pēc apņemšanās ziņojuma nosūtīšanas, un vienīgais dalībnieks, kurš saņem šo ziņojumu, arī ir uz leju. Tātad, pat ja koordinators izvēlas jaunu koordinatoru, izmantojot vēlēšanu līgumu, darījuma statuss ir neskaidrs, un neviens nezina, vai darījums ir iesniegts. Sakarā ar otrā iesniegšanas posma defektiem, piemēram, sinhronu bloķēšanu, viena punkta problēmu un sadalītām smadzenēm, pētnieki veica uzlabojumus, pamatojoties uz otro iesniegšanas posmu, un ierosināja trīs posmu iesniegšanu.
3 gab
Trīsfāžu apņemšanās, kas pazīstama arī kā trīsfāžu commit protokols, ir uzlabota divfāžu commit (2PC) versija.
Atšķirībā no divpakāpju saistībām, ir divas izmaiņas trīspakāpju saistībām.
1. Ieviesiet taimauta mehānismu. Tajā pašā laikā gan koordinatoram, gan dalībniekiem tiek ieviests taimauta mehānisms. 2. Pirmajā un otrajā posmā ievietojiet sagatavošanas posmu. Tas nodrošina, ka visu iesaistīto mezglu stāvoklis ir konsekvents līdz pēdējam izpildes posmam. Citiem vārdiem sakot, papildus taimauta mehānisma ieviešanai 3PC vēlreiz sadala 2PC sagatavošanas posmu divās daļās, lai trīs apņemšanās posmos būtu trīs CanCommit, PreCommit un DoCommit posmi.
CanCommit posms
3PC CanCommit posms faktiski ir ļoti līdzīgs 2PC sagatavošanas posmam. Koordinators nosūta dalībniekam saistību pieprasījumu, kurš atgriež atbildi "Jā", ja viņš var uzņemties, vai atbildi "Nē". 1. Darījuma pieprasījums Koordinators nosūta dalībniekam CanCommit pieprasījumu. Jautājiet, vai varat veikt transakcijas izpildes operāciju. Pēc tam sāciet gaidīt atbildi no dalībniekiem. 2. Atbildes atsauksmes Pēc CanCommit pieprasījuma saņemšanas dalībnieks atgriezīs atbildi "Jā" un nonāks gatavības stāvoklī, ja uzskatīs, ka darījumu var izpildīt nevainojami. Pretējā gadījumā atsauksmes Nē
Pirmssaistību fāze
Veicinātājs izlemj, vai iegaumēt transakcijas PreCommit operāciju, pamatojoties uz dalībnieka atbildi. Atkarībā no atbildes ir divas iespējas. Ja atgriezeniskā saite, ko koordinators saņem no visiem dalībniekiem, ir atbilde "Jā", tad tiek veikta darījuma pirmsizpilde.
1. Nosūtiet PreCommit pieprasījumu Koordinators nosūta dalībniekam PreCommit pieprasījumu un pāriet uz sagatavošanas posmu.
2. Darījuma iepriekšēja apņemšanās Pēc tam, kad dalībnieks ir saņēmis PreCommit pieprasījumu, tas veic darījuma operāciju un ieraksta atsaukšanas un atsaukšanas informāciju darījumu žurnālā.
3. Atbildes atgriezeniskā saite Ja dalībnieks veiksmīgi izpilda darījuma operāciju, ACK atbilde tiek atgriezta, sākot gaidīt galīgo instrukciju. Ja kāds dalībnieks nosūta koordinatoram atbildi "Nē" vai gaida taimautu, bet koordinators nesaņem atbildi no dalībnieka, tad darījums tiek pārtraukts.
1. Pārtraukuma pieprasījuma nosūtīšana Koordinators nosūta pārtraukšanas pieprasījumu visiem dalībniekiem.
2. Pārtraukt darījumu Pēc tam, kad dalībnieks ir saņēmis ABORT pieprasījumu no koordinatora (vai pēc taimauta nav saņemts koordinatora pieprasījums), darījuma pārtraukšana tiek izpildīta. doCommit fāze
Šo reālā darījuma izpildes posmu var iedalīt arī šādās divās situācijās.
Saistību veikšana
1. Nosūtiet apņemšanās pieprasījumu Koordinācija saņem dalībnieka nosūtīto ACK atbildi, pēc tam viņš pāriet no pirmssaistību stāvokļa uz saistību stāvokli. un nosūtiet doCommit pieprasījumu visiem dalībniekiem.
2. Darījuma iesniegšana Pēc doCommit pieprasījuma saņemšanas dalībnieks izpilda oficiālo darījuma apņemšanos. un atbrīvojiet visus transakcijas resursus pēc darījuma pabeigšanas.
3. Atbildiet uz atsauksmēm Pēc darījuma iesniegšanas nosūtiet Ack atbildi koordinatoram.
4. Pabeidziet darījumu Pēc tam, kad koordinators ir saņēmis ACK atbildi no visiem dalībniekiem, darījums ir pabeigts. Pārtraukt darījumus
Ja koordinators nesaņem ACK atbildi no dalībnieka (tā var nebūt ACK atbilde no saņēmēja, vai arī atbildei var būt iestājies taimauts), tad pārtraukuma darījums tiek izpildīts.
1. Pārtraukuma pieprasījuma nosūtīšana Koordinators nosūta pārtraukšanas pieprasījumu visiem dalībniekiem
2. Transakcijas atcelšana Pēc ABORT pieprasījuma saņemšanas dalībnieks izmanto 2. fāzē reģistrēto atsaukšanas informāciju, lai veiktu transakcijas atcelšanas operāciju, un pēc atcelšanas pabeigšanas atbrīvo visus transakcijas resursus.
3. Atsauksmju rezultāti Kad dalībnieks ir pabeidzis transakcijas atcelšanu, nosūtiet ACK ziņojumu koordinatoram
4. Pārtrauciet darījumu Pēc tam, kad koordinators ir saņēmis ACK ziņojumu no dalībnieka, darījums tiek pārtraukts. DoCommit fāzē, ja dalībnieks nevar savlaicīgi saņemt doCommit vai rebort pieprasījumu no koordinatora, darījums tiks turpināts iesniegt pēc taimauta gaidīšanas. (Faktiski tas jānosaka, pamatojoties uz varbūtību, ieejot trešajā posmā, tas nozīmē, ka dalībnieks ir saņēmis PreCommit pieprasījumu otrajā posmā, tāpēc priekšnoteikums, lai koordinators ģenerētu PreCommit pieprasījumu, ir tas, ka viņš saņem Yes CanCommit atbildi no visiem dalībniekiem pirms otrā posma sākuma.) (Kad dalībnieks saņem PreCommit, tas nozīmē, ka viņš zina, ka visi faktiski piekrīt modifikācijai) Tātad, vārdu sakot, ieejot trešajā posmā, tīkla taimautu un citu iemeslu dēļ, lai gan dalībnieks nesaņēma atbildi par saistību vai pārtraukšanu, viņam ir iemesls uzskatīt, ka veiksmīgas apņemšanās varbūtība ir ļoti augsta. )
Atšķirība starp 2PC un 3PC
Salīdzinot ar 2PC, 3PC galvenokārt atrisina viena kļūmes punkta problēmu un samazina bloķēšanu, jo, tiklīdz dalībnieks savlaicīgi nesaņem ziņojumu no koordinatora, viņš izpilda apņemšanos pēc noklusējuma. Tā vietā, lai visu laiku turētu darījumu resursus un atrastos bloķēšanas stāvoklī. Bet šis mehānisms rada arī datu konsekvences problēmas, jo koordinatora nosūtīto pārtraukšanas atbildi dalībnieks tīkla iemeslu dēļ nesaņem savlaicīgi, tad dalībnieks izpilda saistību operāciju pēc taimauta gaidīšanas. Tādējādi tiek radītas datu neatbilstības ar citiem dalībniekiem, kuri saņem pārtraukšanas komandu un veic atcelšanu.
|