See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11764|Vastuse: 0

2PC &&&3PC hajutatud tehingute kohta

[Kopeeri link]
Postitatud 17.03.2021 10:15:10 | | |
XA spetsifikatsioon

XA on liidese spetsifikatsioon (st liidese funktsioon) tehingute vahendustarkvara ja X/Open DTP määratletud andmebaasi vahel, mida tehingute vahendustarkvara kasutab andmebaasi teavitamiseks tehingute algusest, lõpust, commit'ist, tagasikerimisest jne. XA liidese funktsioone pakuvad andmebaasi tootjad.
Teise järgu esitamisleping ja kolmanda järgu esitamisleping tulenesid sellest ideest. Võib öelda, et kaheastmelised commitid on tegelikult XA hajutatud tehingute rakendamise võti (täpsemalt: kaheastmelised commitid tagavad peamiselt hajutatud tehingute atomilisuse: see tähendab, et kõik sõlmed kas teevad kõike või mitte midagi)

2PC

Kahefaasiline Commit viitab algoritmile, mis on loodud hoidma kõigi sõlmede tehingukohustuste järjepidevust, tuginedes hajutatud süsteemiarhitektuurile arvutivõrkude ja andmebaaside valdkonnas. Sageli nimetatakse kaheastmelist commit ka protokolliks. Hajutatud süsteemis võib iga sõlm teada oma tegevuse edukust või ebaõnnestumist, kuid ta ei saa teada teiste sõlmede operatsioonide edukust või ebaõnnestumist. Kui tehing hõlmab mitut sõlme, tuleb tehingu ACID omaduste säilitamiseks lisada koordinaatorina toimiv komponent, mis kontrollib kõigi sõlmede (nn osalejate) tulemusi ja lõpuks juhendab neid sõlmi tulemusi esitama (näiteks kirjutama uuendatud andmeid kettale jne). Seega võib kaheetapilise esitamise algoritmi idee kokku võtta järgmiselt: osalejad teavitavad koordinaatorit operatsiooni õnnestumisest või ebaõnnestumisest ning seejärel otsustab koordinaator, kas operatsioon esitada või katkestada, tuginedes kõigi osalejate tagasisidele.
Niinimetatud kaks etappi on: esimene etapp: ettevalmistusetapp (hääletamise etapp) ja teine etapp: esitamise etapp (sooritamise etapp).

Ettevalmistusetapp

Tehingukoordinaator (tehinguhaldur) saadab igale osalejale (ressursihaldurile) Prepare sõnumi ning iga osaleja kas tagastab otse tõrke (näiteks ebaõnnestunud õiguste kontrolli), või täidab tehingu lokaalselt, kirjutab kohalikke kordus- ja tagasivõtmislogisid, kuid ei tee kohustust ning jõuab seisundisse, kus "kõik on valmis, ainult idatuul on võlgu".

Ettevalmistusetappi saab jagada veel kolmeks etapiks:

1) Koordinaatorisõlm küsib kõigilt osalejasõlmedelt, kas nad võivad hääletada, ja hakkab ootama iga osaleja sõlme vastust.

2) Osalev sõlm teostab kõik tehingutoimingud kuni päringu alguseni ning kirjutab logisse tagasivõtmise ja uuesti tegemise info. (Märkus: Kui see õnnestub, on iga osaleja juba tehingu teinud)

3) Iga osalejasõlm vastab koordinaatori algatatud päringule. Kui osaleva sõlme tehinguoperatsioon tegelikult edukalt täidetakse, tagastab see sõnumi "Nõustun"; Kui osaleva sõlme tehinguoperatsioon ebaõnnestub, tagastab see teate "katkestatud".

Esitamise etapp
Kui koordinaator saab osalejalt tõrketeate või ajapiirangu, saadab ta otse igale osalejale tagasipöördumise teate. Vastasel juhul saada Commit sõnum; Osalejad teostavad commit või rollback operatsioone vastavalt koordinaatori juhistele, et vabastada kõik tehingus kasutatavad lukustusressursid. (Märkus: Lukustusressursid tuleb vabastada lõppstaadiumis)

Järgmisena käsitletakse esitamise protsessi eraldi kahes juhtumis.

Kui vastav sõnum, mille koordinaatori sõlm saab kõigilt osalejasõlmedelt, on Nõustu:

Esitamise etapp
Kui koordinaator saab osalejalt tõrketeate või ajapiirangu, saadab ta otse igale osalejale tagasipöördumise teate. Vastasel juhul saada Commit sõnum; Osalejad teostavad commit või rollback operatsioone vastavalt koordinaatori juhistele, et vabastada kõik tehingus kasutatavad lukustusressursid. (Märkus: Lukustusressursid tuleb vabastada lõppstaadiumis)

Järgmisena käsitletakse esitamise protsessi eraldi kahes juhtumis.

Kui vastav sõnum, mille koordinaatori sõlm saab kõigilt osalejasõlmedelt, on Nõustu:

1) Koordinaatorisõlm esitab kõigile osalevatele sõlmedele "commit" päringu.

2) Osalev sõlm lõpetab ametlikult operatsiooni ja vabastab kogu tehinguperioodi jooksul kasutatud ressursid.

3) Osalejasõlm saadab koordinaatorisõlmele sõnumi "Valmis".

4) Koordinaatorisõlm lõpetab tehingu pärast seda, kui on saanud kõigilt osalejasõlmedelt tagasiside "Valmis".
Kui üks osalejasõlm tagastab esimeses faasis vastusesõnumi "Katkestatud" või kui koordinaatorisõlm ei suuda saada vastust kõigi osalejasõlmede kohta enne esimese faasi päringu ajapiirangut:

1) Koordinaatorisõlm esitab kõigile osalevatele sõlmedele "tagasipööramise" päringu.

2) Osalejasõlm kasutab eelnevalt kirjutatud tagasipööramise infot tagasipööramiseks ja ressursside vabastamiseks, mis on kogu tehinguperioodi jooksul hõivatud.

3) Osalejasõlm saadab koordinaatorisõlmele sõnumi "tagasikeeramine lõpetatud".

4) Koordinaatorsõlm tühistab tehingu pärast seda, kui on saanud kõigilt osalejatelt tagasisidet "Rollback Complete".
Sõltumata lõpptulemusest lõpetab teine etapp praeguse tehingu.
Faasi 2 commitid näivad pakkuvat aatomioperatsioone, kuid kahjuks on 2. etapi commit'idel siiski mõned puudused:


1. Sünkroonse blokeerimise probleem. Täitmise ajal blokeerivad kõik osalevad sõlmed tehinguid. Kui osaleja hõivab avaliku ressursi, tuleb teised kolmanda osapoole sõlmed avalikule ressursile ligipääsu blokeerida.

2. Üks rikkepunkt. Koordinaatori tähtsuse tõttu, kui koordinaator ebaõnnestub. Osalejad jätkavad ummistuse blokeerimist. Eriti teises etapis, kui koordinaator ebaõnnestub, on kõik osalejad endiselt tehinguressursside lukustamise seisundis ega saa tehingutoiminguid jätkata. (Kui koordinaator lõpetab kõne, saad koordinaatori uuesti valida, kuid see ei lahenda probleemi, et osaleja on blokeeritud, kuna koordinaator on maas)

3. Andmete ebajärjekindlus. Teise commit-etapi teises etapis, kui koordinaator saadab osalejale commit-päringu, tekib kohaliku võrgu erand või koordinaator ebaõnnestub commit-päringu protsessis, mistõttu ainult mõned osalejad aktsepteerivad commit-päringut. Pärast commit'i päringu saamist sooritavad need osalejad commit'i operatsiooni. Kuid teised masinad, mis ei saa commit-päringut, ei saa tehingu commit'i täita. Selle tulemusena toimub andmeosakonna järjepidevus kogu hajutatud süsteemis.

4. Probleemid, mida teises etapis lahendada ei saa: Koordinaator langeb pärast commit-sõnumi saatmist ja ainus osaleja, kes selle sõnumi saab, on samuti maas. Seega, isegi kui vahendaja valib valimislepingu kaudu uue vahendaja, on tehingu staatus ebakindel ja keegi ei tea, kas tehing on esitatud.
Teise esitamisetapi puuduste, nagu sünkroonne blokeerimine, ühe punkti probleem ja aju lõhestatus, tõttu tegid teadlased teise esitamise etapi põhjal parandusi ja pakkusid välja kolmeetapilise esitamise.

3PC

Kolmefaasiline commit, tuntud ka kui kolmefaasiline commit, on kahefaasilise commit'i (2PC) täiustatud versioon.


Erinevalt kaheastmelistest commit'idest on kolmeastmelistes commit'ides kaks muudatust.

1. Tutvusta timeout'i mehhanismi. Samal ajal tutvustatakse nii juhendajale kui osalejatele ajapiirangu mehhanismi.
2. Lisa ettevalmistav etapp esimesse ja teise etapisse. See tagab, et kõigi osalevate sõlmede seisund on ühtlane kuni lõpliku kinnitamisetapini.
Teisisõnu, lisaks ajapiirangu mehhanismi kasutuselevõtule jagab 3PC 2PC ettevalmistusfaasi taas kaheks, nii et CanCommit, PreCommit ja DoCommiti kolm etappi on kolmes etapis.


CanCommit etapp

3PC CanCommit'i etapp on tegelikult väga sarnane 2PC ettevalmistusfaasiga. Koordinaator saadab osalejale comcom-päringu, kes vastab jah-vastuse, kui suudab pühenduda, või Ei-vastuse.
1. Tehingupäring Fasilitator saadab osalejale CanCommit'i päringu. Küsi, kas saad teha tehingu kinnitamise operatsiooni. Seejärel hakka ootama osalejate vastust.
2. Vastustagasiside Pärast CanCommit'i päringu saamist vastab osaleja jah-vastuse ja läheb valmisolekusse, kui arvab, et tehing saab sujuvalt läbi viia. Vastasel juhul tagasiside: Ei


PreCommit faas

Fasilitator otsustab, kas pähe õppida tehingu PreCommit toiming osaleja vastuse põhjal. Sõltuvalt vastusest on kaks võimalust.
Kui fasilitaatori tagasiside kõigilt osalejatelt on jah-vastus, siis toimub tehingu eeltäitmine.


1. Saada PreCommit taotlus Fasilitator saadab osalejale PreCommit päringu ja liigub edasi Prepare faasi.

2. Tehingu eelkinnitamine Pärast seda, kui osaleja saab PreCommit päringu, sooritab ta tehingutoimingu ja salvestab tagasivõtmise ja uuesti tegemise andmed tehingulogisse.

3. Vastustagasiside Kui osaleja sooritab tehingu edukalt, tagastatakse ACK-vastus, kui hakatakse ootama lõplikku käsku.
Kui mõni osaleja saadab koordinaatorile vastuse "Ei" või ootab ajapiirangut, kuid koordinaator ei saa osalejalt vastust, katkestatakse tehing.

1. Saada katkestustaotlus Fasilitator saadab katkestustaotluse kõigile osalejatele.

2. Tehingu katkestamine Pärast seda, kui osaleja saab koordinaatorilt ABORT-taotluse (või pärast pausi, kui koordinaatori taotlust pole veel saadud), viiakse tehingu katkestus läbi.
doCommit faas

Seda reaalse tehingu kohustuse etappi võib jagada ka järgmiseks kaheks olukorraks.

Tee commit


1. Saada commit taotlus Koordineerimine saab osaleja saadetud ACK-vastuse, seejärel liigub ta eelkinnitamise olekust commit olekusse. ja saada kõigile osalejatele doCommit'i taotlus.

2. Tehingu esitamine Pärast doCommit'i päringu saamist täidab osaleja ametliku tehingukohustuse. ja vabastada kõik tehinguressursid pärast tehingukohustuse lõpetamist.

3. Vasta tagasisidele Pärast tehingu esitamist saada koordinaatorile Ack-vastus.

4. Tehingu lõpetamine Pärast seda, kui koordinaator on saanud ACK vastuse kõigilt osalejatelt, on tehing lõpetatud.
Katkestustehingud

Kui koordinaator ei saa osalejalt ACK-vastust (see ei pruugi olla vastuvõtja ACK vastus või vastus võib olla ajastatud ära), siis katkestustehing täidetakse.


1. Saada katkestustaotlus Fasilitator saadab katkestustaotluse kõigile osalejatele

2. Tehingu tagasipööramine Pärast ABORT-taotluse saamist kasutab osaleja 2. faasis salvestatud tagasivõtmise infot tehingu tagasipööramise operatsiooni tegemiseks ning vabastab kõik tehinguressursid pärast tagasikerimise lõpetamist.

3. Tagasiside tulemused Kui osaleja on tehingu tagasipööramise lõpetanud, saada koordinaatorile ACK-sõnum

4. Tehingu katkestamine Pärast seda, kui koordinaator saab osalejalt ACK-sõnumi, katkestatakse tehing.
doCommit faasis, kui osaleja ei saa koordinaatorilt doCommit'i või rebort'i taotlust õigeaegselt kätte, esitatakse tehing edasi pärast ajapiirangu ootamist. (Tegelikult tuleks see määrata tõenäosuse põhjal, kolmandasse etappi sisenedes tähendab see, et osaleja on saanud PreCommit'i taotluse teises etapis, seega on eeltingimus, et koordinaator PreCommit päringu genereerimiseks peab saama kõigilt osalejatelt enne teise etapi algust Yes CanCommit'i vastuse.) (Kui osaleja saab PreCommit'i, tähendab see, et ta teab, et kõik tegelikult nõustuvad muudatusega) Nii et ühesõnaga, kolmandasse etappi minnes, võrgustiku aegumiste ja muude põhjuste tõttu, kuigi osaleja ei saanud commit või abort vastust, on tal põhjust uskuda, et eduka pühendumise tõenäosus on väga suur. )

Erinevus 2PC ja 3PC vahel


Võrreldes 2PC-ga lahendab 3PC peamiselt ühe rikkepunkti probleemi ja vähendab blokeerimist, sest kui osaleja ei saa koordinaatorilt õigel ajal sõnumit, täidab ta vaikimisi commit'i. Selle asemel, et hoida tehinguressursse kogu aeg ja olla blokeerimisolekus. Kuid see mehhanism põhjustab ka andmete järjepidevuse probleeme, sest koordinaatori poolt saadetud katkestusvastust ei jõua osalejale võrgu põhjustel õigeaegselt kätte, seejärel teostab osaleja kinnitamise operatsiooni pärast ajapiirangu ootamist. See tekitab andmete vastuolusid teiste osalejatega, kes saavad abort-käsu ja teevad tagasipööramise.




Eelmine:.NET Core kutsub Baidu PaddleOCR-i, et tuvastada pilte ja tekste
Järgmine:Markdowni süntaksi CSV veebis teisendamine
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com