Lietuvių

Išsamus paskirstytųjų transakcijų ir dviejų fazių patvirtinimo (2PC) protokolo tyrimas. Sužinokite apie jo architektūrą, privalumus, trūkumus ir praktinį taikymą globaliose sistemose.

Paskirstytosios transakcijos: išsami dviejų fazių patvirtinimo (2PC) analizė

Šiuolaikiniame vis labiau susietame pasaulyje programoms dažnai reikia sąveikauti su duomenimis, saugomais keliose nepriklausomose sistemose. Taip atsiranda paskirstytųjų transakcijų koncepcija, kai viena loginė operacija reikalauja atlikti pakeitimus keliose duomenų bazėse ar paslaugose. Duomenų nuoseklumo užtikrinimas tokiose situacijose yra svarbiausias, o vienas iš labiausiai žinomų protokolų tam pasiekti yra dviejų fazių patvirtinimas (2PC).

Kas yra paskirstyta transakcija?

Paskirstyta transakcija yra operacijų seka, atliekama keliose, geografiškai išsklaidytose sistemose, traktuojama kaip vienas atominis vienetas. Tai reiškia, kad arba visos transakcijos operacijos turi būti sėkmingos (patvirtintos), arba nė viena neturi būti įvykdyta (atšaukta). Šis „viskas arba nieko“ principas užtikrina duomenų vientisumą visoje paskirstytoje sistemoje.

Įsivaizduokite scenarijų, kai klientas Tokijuje užsisako skrydį iš Tokijo į Londoną vienoje oro linijų sistemoje ir tuo pačiu metu rezervuoja viešbučio kambarį Londone kitoje viešbučių rezervavimo sistemoje. Šios dvi operacijos (skrydžio užsakymas ir viešbučio rezervacija) idealiai turėtų būti traktuojamos kaip viena transakcija. Jei skrydžio užsakymas pavyksta, o viešbučio rezervacija nepavyksta, sistema turėtų idealiai atšaukti skrydžio užsakymą, kad klientas neliktų Londone be nakvynės. Toks koordinuotas elgesys yra paskirstytosios transakcijos esmė.

Pristatome dviejų fazių patvirtinimo (2PC) protokolą

Dviejų fazių patvirtinimo (2PC) protokolas yra paskirstytasis algoritmas, užtikrinantis atomiškumą tarp kelių išteklių valdytojų (pvz., duomenų bazių). Jį sudaro centrinis koordinatorius ir keli dalyviai, kurių kiekvienas yra atsakingas už konkretų išteklių valdymą. Protokolas veikia dviem skirtingomis fazėmis:

1 fazė: Pasiruošimo fazė

Šioje fazėje koordinatorius inicijuoja transakciją ir prašo kiekvieno dalyvio pasiruošti arba patvirtinti, arba atšaukti transakciją. Vykdomi šie veiksmai:

  1. Koordinatorius siunčia pasiruošimo užklausą: Koordinatorius siunčia „pasiruošimo“ pranešimą visiems dalyviams. Šis pranešimas signalizuoja, kad koordinatorius yra pasirengęs patvirtinti transakciją, ir prašo kiekvieno dalyvio pasiruošti tai padaryti.
  2. Dalyviai ruošiasi ir atsako: Kiekvienas dalyvis gauna pasiruošimo užklausą ir atlieka šiuos veiksmus:
    • Jis imasi būtinų veiksmų, kad užtikrintų, jog gali arba patvirtinti, arba atšaukti transakciją (pvz., rašydamas „redo/undo“ žurnalus).
    • Jis siunčia „balsą“ atgal koordinatoriui, nurodydamas arba „pasiruošęs patvirtinti“ („taip“ balsas), arba „negali patvirtinti“ („ne“ balsas). „Ne“ balsas gali būti dėl išteklių apribojimų, duomenų patvirtinimo klaidų ar kitų trikdžių.

Labai svarbu, kad dalyviai, balsavę „taip“, garantuotų, jog galės patvirtinti arba atšaukti pakeitimus. Tai paprastai apima pakeitimų išsaugojimą patvariojoje laikmenoje (pvz., diske).

2 fazė: Patvirtinimo arba atšaukimo fazė

Šią fazę inicijuoja koordinatorius, remdamasis pasiruošimo fazėje gautais dalyvių balsais. Galimi du rezultatai:

1 rezultatas: Patvirtinimas

Jei koordinatorius gauna „taip“ balsus iš visų dalyvių, jis tęsia transakcijos patvirtinimą.

  1. Koordinatorius siunčia patvirtinimo užklausą: Koordinatorius siunčia „patvirtinimo“ pranešimą visiems dalyviams.
  2. Dalyviai patvirtina: Kiekvienas dalyvis gauna patvirtinimo užklausą ir visam laikui pritaiko su transakcija susijusius pakeitimus savo ištekliams.
  3. Dalyviai patvirtina gavimą: Kiekvienas dalyvis siunčia patvirtinimo pranešimą atgal koordinatoriui, kad patvirtintų, jog patvirtinimo operacija buvo sėkminga.
  4. Koordinatorius užbaigia: Gavęs patvirtinimus iš visų dalyvių, koordinatorius pažymi transakciją kaip užbaigtą.

2 rezultatas: Atšaukimas

Jei koordinatorius gauna bent vieną „ne“ balsą iš bet kurio dalyvio, arba jei baigiasi laukimo laikas, kol bus gautas atsakymas iš dalyvio, jis nusprendžia atšaukti transakciją.

  1. Koordinatorius siunčia atšaukimo užklausą: Koordinatorius siunčia „atšaukimo“ pranešimą visiems dalyviams.
  2. Dalyviai atšaukia: Kiekvienas dalyvis gauna atšaukimo užklausą ir atšaukia visus pakeitimus, kurie buvo atlikti ruošiantis transakcijai.
  3. Dalyviai patvirtina gavimą: Kiekvienas dalyvis siunčia patvirtinimo pranešimą atgal koordinatoriui, kad patvirtintų, jog atšaukimo operacija buvo sėkminga.
  4. Koordinatorius užbaigia: Gavęs patvirtinimus iš visų dalyvių, koordinatorius pažymi transakciją kaip užbaigtą.

Iliustruojantis pavyzdys: el. prekybos užsakymų apdorojimas

Įsivaizduokite el. prekybos sistemą, kurioje užsakymas apima atsargų duomenų bazės atnaujinimą ir mokėjimo apdorojimą per atskirą mokėjimo šliuzą. Tai yra dvi atskiros sistemos, kurios turi dalyvauti paskirstytoje transakcijoje.

  1. Pasiruošimo fazė:
    • El. prekybos sistema (koordinatorius) siunčia pasiruošimo užklausą atsargų duomenų bazei ir mokėjimo šliuzui.
    • Atsargų duomenų bazė patikrina, ar prašomos prekės yra sandėlyje, ir jas rezervuoja. Tada ji balsuoja „taip“, jei sėkmingai, arba „ne“, jei prekių nėra sandėlyje.
    • Mokėjimo šliuzas iš anksto autorizuoja mokėjimą. Tada jis balsuoja „taip“, jei sėkmingai, arba „ne“, jei autorizacija nepavyksta (pvz., nepakanka lėšų).
  2. Patvirtinimo/atšaukimo fazė:
    • Patvirtinimo scenarijus: Jei tiek atsargų duomenų bazė, tiek mokėjimo šliuzas balsuoja „taip“, koordinatorius siunčia patvirtinimo užklausą abiem. Atsargų duomenų bazė visam laikui sumažina prekių skaičių, o mokėjimo šliuzas užfiksuoja mokėjimą.
    • Atšaukimo scenarijus: Jei atsargų duomenų bazė arba mokėjimo šliuzas balsuoja „ne“, koordinatorius siunčia atšaukimo užklausą abiem. Atsargų duomenų bazė atlaisvina rezervuotas prekes, o mokėjimo šliuzas anuliuoja išankstinę autorizaciją.

Dviejų fazių patvirtinimo privalumai

Dviejų fazių patvirtinimo trūkumai

Dviejų fazių patvirtinimo alternatyvos

Dėl 2PC apribojimų atsirado keletas alternatyvių paskirstytųjų transakcijų valdymo metodų. Tai apima:

Praktinis dviejų fazių patvirtinimo taikymas

Nepaisant apribojimų, 2PC vis dar naudojamas įvairiuose scenarijuose, kur stiprus nuoseklumas yra kritinis reikalavimas. Keletas pavyzdžių:

Dviejų fazių patvirtinimo įgyvendinimas

2PC įgyvendinimas reikalauja atidaus įvairių veiksnių apsvarstymo, įskaitant:

Globalūs paskirstytųjų transakcijų aspektai

Kuriant ir įgyvendinant paskirstytąsias transakcijas globalioje aplinkoje, reikia atsižvelgti į kelis papildomus veiksnius:

Išvada

Paskirstytosios transakcijos ir dviejų fazių patvirtinimo (2PC) protokolas yra esminės sąvokos kuriant tvirtas ir nuoseklias paskirstytąsias sistemas. Nors 2PC suteikia paprastą ir plačiai pritaikytą sprendimą atomiškumui užtikrinti, jo apribojimai, ypač susiję su blokavimu ir vieno gedimo tašku, reikalauja atidaus alternatyvių metodų, tokių kaip „Saga“ ir galutinis nuoseklumas, apsvarstymo. Suprasti kompromisus tarp stipraus nuoseklumo, pasiekiamumo ir našumo yra labai svarbu norint pasirinkti tinkamą metodą konkretiems jūsų programos poreikiams. Be to, veikiant globalioje aplinkoje, reikia atsižvelgti į papildomus aspektus, susijusius su tinklo delsa, laiko juostomis, duomenų lokalizavimu ir teisiniu atitikimu, kad būtų užtikrinta paskirstytųjų transakcijų sėkmė.

Paskirstytosios transakcijos: išsami dviejų fazių patvirtinimo (2PC) analizė | MLOG