Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11764|Atsakyti: 0

2PC &&&3PC paskirstytų operacijų

[Kopijuoti nuorodą]
Paskelbta 2021-03-17 10:15:10 | | |
XA specifikacija

XA yra sąsajos specifikacija (t. y. sąsajos funkcija) tarp sandorio tarpinės programinės įrangos ir X/Open DTP apibrėžtos duomenų bazės, kurią transakcijų tarpinė programinė įranga naudoja pranešti duomenų bazei apie operacijų pradžią, pabaigą, vykdymą, atšaukimą ir kt. XA sąsajos funkcijas teikia duomenų bazių pardavėjai.
Iš šios idėjos kilo antros eilės pateikimo sutartis ir trečios eilės pateikimo sutartis. Galima sakyti, kad dviejų pakopų įsipareigojimai iš tikrųjų yra raktas į XA paskirstytų operacijų įgyvendinimą (tiksliau: dviejų pakopų įsipareigojimai daugiausia užtikrina paskirstytų sandorių atomiškumą: tai yra, visi mazgai arba viską daro, arba nieko)

2 vnt.

Dviejų fazių įsipareigojimas reiškia algoritmą, skirtą išlaikyti visų mazgų operacijų įsipareigojimų nuoseklumą, pagrįstą paskirstytos sistemos architektūra kompiuterių tinklų ir duomenų bazių srityje. Dažnai dviejų pakopų įsipareigojimas taip pat vadinamas protokolu. Paskirstytoje sistemoje kiekvienas mazgas gali žinoti savo operacijos sėkmę ar nesėkmę, bet negali žinoti kitų mazgų operacijų sėkmės ar nesėkmės. Kai sandoris apima kelis mazgus, norint išlaikyti operacijos ACID charakteristikas, reikia įvesti komponentą, kuris veikia kaip koordinatorius, kuris kontroliuotų visų mazgų (vadinamų dalyvių) rezultatus ir galiausiai nurodytų šiems mazgams faktiškai pateikti rezultatus (pvz., įrašyti atnaujintus duomenis į diską ir pan.). Todėl dviejų etapų pateikimo algoritmo idėją galima apibendrinti taip: dalyviai praneš koordinatoriui apie operacijos sėkmę ar nesėkmę, o tada koordinatorius nuspręs, ar pateikti operaciją, ar nutraukti operaciją, remdamasis visų dalyvių grįžtamuoju ryšiu.
Vadinamieji du etapai yra: pirmasis etapas: parengiamasis etapas (balsavimo etapas) ir antrasis etapas: pateikimo etapas (vykdymo etapas).

Pasirengimo etapas

Operacijų koordinatorius (operacijų valdytojas) siunčia pranešimą "Prepare" kiekvienam dalyviui (išteklių valdytojui), o kiekvienas dalyvis arba tiesiogiai grąžina gedimą (pvz., nepavykusį leidimo patvirtinimą), arba vykdo operaciją vietoje, rašo vietinius perdarymo ir anuliavimo žurnalus, bet neįsipareigoja ir pasiekia būseną "viskas paruošta, skolingas tik rytų vėjas".

Paruošimo etapą galima suskirstyti į šiuos tris etapus:

1) Koordinatoriaus mazgas klausia visų dalyvių mazgų, ar jie gali balsuoti, ir pradeda laukti atsakymo iš kiekvieno dalyvio mazgo.

2) Dalyvio mazgas atlieka visas operacijų operacijas, kol užklausa inicijuojama, ir įrašo Anuliavimo informaciją ir Perdaryti informaciją į žurnalą. (Pastaba: jei sėkminga, kiekvienas dalyvis jau atliko operacijos operaciją)

3) Kiekvienas dalyvio mazgas atsako į koordinatoriaus mazgo inicijuotą užklausą. Jei dalyvio mazgo operacijos operacija iš tikrųjų sėkmingai įvykdyta, ji grąžina pranešimą "Sutinku"; Jei dalyvio mazgo operacijos operacija iš tikrųjų nepavyksta, jis pateikia pranešimą "nutraukta".

Pateikimo etapas
Jei koordinatorius gauna pranešimą apie gedimą arba skirtąjį laiką iš dalyvio, jis išsiųs atšaukimo pranešimą tiesiai kiekvienam dalyviui. Kitu atveju siųskite pranešimą "Commit"; Dalyviai atlieka įsipareigojimo arba atšaukimo operacijas pagal koordinatoriaus nurodymus, kad atlaisvintų visus operacijos procese naudojamus užrakto išteklius. (Pastaba: užrakto ištekliai turi būti atlaisvinti paskutiniame etape)

Toliau pateikimo etapo procesas atskirai aptariamas dviem atvejais.

Kai atitinkamas pranešimas, kurį koordinatoriaus mazgas gauna iš visų dalyvių mazgų, yra Sutinku:

Pateikimo etapas
Jei koordinatorius gauna pranešimą apie gedimą arba skirtąjį laiką iš dalyvio, jis išsiųs atšaukimo pranešimą tiesiai kiekvienam dalyviui. Kitu atveju siųskite pranešimą "Commit"; Dalyviai atlieka įsipareigojimo arba atšaukimo operacijas pagal koordinatoriaus nurodymus, kad atlaisvintų visus operacijos procese naudojamus užrakto išteklius. (Pastaba: užrakto ištekliai turi būti atlaisvinti paskutiniame etape)

Toliau pateikimo etapo procesas atskirai aptariamas dviem atvejais.

Kai atitinkamas pranešimas, kurį koordinatoriaus mazgas gauna iš visų dalyvių mazgų, yra Sutinku:

1) Koordinatoriaus mazgas išduoda "įsipareigojimo" užklausą visiems dalyvių mazgams.

2) Dalyvio mazgas oficialiai užbaigia operaciją ir išleidžia išteklius, užimtus per visą sandorio laikotarpį.

3) Dalyvio mazgas siunčia pranešimą "Atlikta" koordinatoriaus mazgui.

4) Koordinatoriaus mazgas užbaigia operaciją gavęs pranešimą "Atlikta" iš visų dalyvių mazgų.
Jei kuris nors dalyvio mazgas pateikia atsakymo pranešimą "Nutraukta" pirmajame etape arba jei koordinatoriaus mazgas negali gauti atsakymo pranešimo apie visus dalyvių mazgus prieš užklausos skirtąjį laiką pirmajame etape:

1) Koordinatoriaus mazgas išduoda "atšaukimo" užklausą visiems dalyvių mazgams.

2) Dalyvio mazgas naudoja anksčiau parašytą anuliavimo informaciją, kad atliktų atšaukimą ir išleistų išteklius, užimtus per visą operacijos laikotarpį.

3) Dalyvio mazgas siunčia pranešimą "atšaukimas baigtas" koordinatoriaus mazgui.

4) Koordinatoriaus mazgas atšaukia operaciją gavęs pranešimą "Atšaukimas baigtas" iš visų dalyvių mazgų.
Nepriklausomai nuo galutinio rezultato, antrasis etapas užbaigia dabartinį sandorį.
Atrodo, kad 2 fazės įsipareigojimai teikia atomines operacijas, bet, deja, 2 etapo įsipareigojimai vis dar turi keletą trūkumų:


1. Sinchroninio blokavimo problema. Vykdymo metu visi dalyvaujantys mazgai blokuoja operacijas. Kai dalyvis užima viešąjį išteklių, kitiems trečiųjų šalių mazgams turi būti užblokuota prieiga prie viešųjų išteklių.

2. Vienas gedimo taškas. Dėl koordinatoriaus svarbos, kai koordinatorius nepavyksta. Dalyviai ir toliau blokuos užsikimšimą. Ypač antrajame etape, jei koordinatorius nepavyksta, visi dalyviai vis dar yra užrakinti operacijų išteklius ir negali tęsti operacijų operacijų. (Jei koordinatorius pakabina, galite perrinkti koordinatorių, bet tai negali išspręsti problemos, kad dalyvis yra užblokuotas dėl koordinatoriaus neveikia)

3. Duomenų nenuoseklumas. Antrajame antrojo įsipareigojimo etapo etape, kai koordinatorius siunčia dalyviui įsipareigojimo užklausą, įvyksta vietinio tinklo išimtis arba koordinatorius nepavyksta įsipareigojimo užklausos proceso metu, todėl tik kai kurie dalyviai priima įsipareigojimo užklausą. Gavę patvirtinimo užklausą, šie dalyviai atliks patvirtinimo operaciją. Tačiau kiti įrenginiai, kurie negauna įsipareigojimo užklausos, negali vykdyti operacijos įsipareigojimo. Dėl to duomenų skyriaus nuoseklumas atsiranda visoje paskirstytoje sistemoje.

4. Problemos, kurių negalima išspręsti antrajame etape: Koordinatorius nusileidžia išsiuntęs įsipareigojimo pranešimą, o vienintelis dalyvis, kuris gauna šią žinutę, taip pat neveikia. Taigi, net jei tarpininkas pasirenka naują tarpininką pagal rinkimų susitarimą, sandorio statusas yra neaiškus ir niekas nežino, ar sandoris buvo pateiktas.
Dėl antrojo pateikimo etapo trūkumų, tokių kaip sinchroninis blokavimas, vieno taško problema ir smegenų suskaidymas, tyrėjai patobulino antrąjį pateikimo etapą ir pasiūlė trijų etapų pateikimą.

3 vnt.

Trifazis įsipareigojimas, taip pat žinomas kaip trifazis įsipareigojimo protokolas, yra patobulinta dviejų fazių įsipareigojimo (2PC) versija.


Skirtingai nuo dviejų etapų įsipareigojimų, yra du trijų etapų įsipareigojimų pakeitimai.

1. Įveskite skirtojo laiko mechanizmą. Tuo pačiu metu tiek vedėjui, tiek dalyviams įdiegiamas skirtojo laiko mechanizmas.
2. Įterpkite parengiamąjį etapą į pirmąjį ir antrąjį etapus. Tai užtikrina, kad visų dalyvaujančių mazgų būsena būtų nuosekli iki galutinio įsipareigojimo etapo.
Kitaip tariant, be skirtojo laiko mechanizmo įvedimo, 3PC dar kartą padalija 2PC pasirengimo etapą į dvi dalis, todėl trijuose įsipareigojimo etapuose yra trys "CanCommit", "PreCommit" ir "DoCommit" etapai.


CanCommit etapas

3PC CanCommit etapas iš tikrųjų yra labai panašus į 2PC pasirengimo etapą. Koordinatorius siunčia dalyviui įsipareigojimo užklausą, kuris pateikia atsakymą "Taip", jei gali įsipareigoti, arba atsakymą "Ne".
1. Sandorio užklausa Vedėjas siunčia dalyviui "CanCommit" užklausą. Paklausti, ar galite atlikti operacijos patvirtinimo operaciją. Tada pradėkite laukti dalyvių atsakymo.
2. Atsakymas Atsiliepimai Gavęs "CanCommit" užklausą, dalyvis pateiks atsakymą "Taip" ir pereis į parengties būseną, jei manys, kad operaciją galima įvykdyti sklandžiai. Kitu atveju atsiliepimai Ne


Išankstinio įsipareigojimo etapas

Vedėjas nusprendžia, ar įsiminti operacijos PreCommit operaciją, remdamasis dalyvio atsakymu. Priklausomai nuo atsakymo, yra dvi galimybės.
Jei grįžtamasis ryšys, kurį vedėjas gauna iš visų dalyvių, yra atsakymas "Taip", tada atliekamas išankstinis sandorio vykdymas.


1. Išsiųskite išankstinio įsipareigojimo užklausą Vedėjas siunčia dalyviui išankstinio įsipareigojimo užklausą ir pereina į pasiruošimo etapą.

2. Išankstinis sandorio įsipareigojimas Gavęs išankstinio įsipareigojimo užklausą, dalyvis atlieka operacijos operaciją ir įrašo anuliavimo ir perdarymo informaciją operacijų žurnale.

3. Atsakymo grįžtamasis ryšys Jei dalyvis sėkmingai įvykdo operacijos operaciją, ACK atsakymas grąžinamas laukiant galutinio nurodymo.
Jei kuris nors dalyvis siunčia koordinatoriui atsakymą "Ne" arba laukia skirtojo laiko, o koordinatorius negauna atsakymo iš dalyvio, operacija nutraukiama.

1. Siųsti pertraukimo užklausą Vedėjas siunčia nutraukimo užklausą visiems dalyviams.

2. Nutraukti operaciją Dalyviui gavus ABORT užklausą iš koordinatoriaus (arba pasibaigus skirtajam laikui, koordinatoriaus užklausa nebuvo gauta), operacija nutraukiama.
doCommit etapas

Šį realaus sandorio įsipareigojimo etapą taip pat galima suskirstyti į šias dvi situacijas.

Atlikti įsipareigojimą


1. Išsiųskite įsipareigojimo užklausą Koordinavimas gauna dalyvio atsiųstą ACK atsakymą, tada jis pereis iš išankstinio įsipareigojimo būsenos į įsipareigojimo būseną. ir išsiųskite doCommit užklausą visiems dalyviams.

2. Sandorio pateikimas Gavęs doCommit užklausą, dalyvis vykdo oficialų sandorio įsipareigojimą. ir atleiskite visus operacijos išteklius užbaigę operacijos įsipareigojimą.

3. Atsakykite į atsiliepimus Pateikę sandorį, išsiųskite Ack atsakymą koordinatoriui.

4. Užbaikite operaciją Koordinatoriui gavus ACK atsakymą iš visų dalyvių, operacija baigiama.
Nutraukti operacijas

Jei koordinatorius negauna ACK atsakymo iš dalyvio (tai gali būti ne ACK atsakymas iš gavėjo arba atsakymo laikas gali būti pasibaigęs), pertraukimo operacija vykdoma.


1. Siųsti pertraukimo užklausą Vedėjas siunčia nutraukimo užklausą visiems dalyviams

2. Operacijos atšaukimas Gavęs ABORT užklausą, dalyvis naudoja 2 etape įrašytą anuliavimo informaciją, kad atliktų operacijos atšaukimo operaciją, o užbaigęs atšaukimą išleidžia visus operacijos išteklius.

3. Grįžtamojo ryšio rezultatai Kai dalyvis užbaigia operacijos atšaukimą, išsiųskite ACK pranešimą koordinatoriui

4. Nutraukite operaciją Koordinatoriui gavus ACK pranešimą iš dalyvio, operacija nutraukiama.
DoCommit fazėje, jei dalyvis negali laiku gauti "doCommit" arba "rebort" užklausos iš koordinatoriaus, operacija bus toliau teikiama laukus skirtojo laiko. (Tiesą sakant, tai turėtų būti nustatoma pagal tikimybę, įeinant į trečiąjį etapą, tai reiškia, kad dalyvis gavo PreCommit užklausą antrajame etape, todėl būtina sąlyga, kad koordinatorius sugeneruotų PreCommit užklausą, yra tai, kad jis gautų atsakymą "Yes CanCommit" iš visų dalyvių prieš prasidedant antrajam etapui.) (Kai dalyvis gauna "PreCommit", tai reiškia, kad jis žino, kad visi iš tikrųjų sutinka su pakeitimu) Taigi, žodžiu, įžengdamas į trečiąjį etapą, dėl tinklo skirtojo laiko ir kitų priežasčių, nors dalyvis negavo atsakymo ar nutraukimo, jis turi pagrindo manyti, kad sėkmingo įsipareigojimo tikimybė yra labai didelė. )

Skirtumas tarp 2PC ir 3PC


Palyginti su 2PC, 3PC daugiausia išsprendžia vieno gedimo taško problemą ir sumažina blokavimą, nes kai dalyvis laiku negauna pranešimo iš koordinatoriaus, jis vykdo įsipareigojimą pagal numatytuosius nustatymus. Užuot visą laiką laikę operacijų išteklius ir būdami blokavimo būsenoje. Tačiau šis mechanizmas taip pat sukelia duomenų nuoseklumo problemų, nes koordinatoriaus atsiųsto nutraukimo atsakymo dalyvis negauna laiku dėl tinklo priežasčių, tada dalyvis vykdo įsipareigojimo operaciją laukdamas skirtojo laiko. Tai sukuria duomenų neatitikimus su kitais dalyviais, kurie gauna nutraukimo komandą ir atlieka atšaukimą.




Ankstesnis:.NET Core kviečia Baidu PaddleOCR atpažinti vaizdus ir tekstus
Kitą:CSV internetinis Markdown sintaksės konvertavimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com