Latviešu

Padziļināta izpēte par izplatītajām transakcijām un 2PC protokolu. Uzziniet tā arhitektūru, priekšrocības, trūkumus un pielietojumu globālās sistēmās.

Izplatītās transakcijas: Padziļināta divu fāžu apstiprināšanas (2PC) protokola analīze

Mūsdienu arvien ciešāk savstarpēji saistītajā pasaulē lietojumprogrammām bieži jādarbojas ar datiem, kas glabājas vairākās, neatkarīgās sistēmās. Tas rada izplatīto transakciju koncepciju, kur viena loģiska operācija prasa izmaiņas veikt vairākās datubāzēs vai pakalpojumos. Datu konsekvences nodrošināšana šādos scenārijos ir ārkārtīgi svarīga, un viens no zināmākajiem protokoliem, lai to panāktu, ir divu fāžu apstiprināšana (2PC).

Kas ir izplatītā transakcija?

Izplatītā transakcija ir operāciju sērija, kas tiek veikta vairākās, ģeogrāfiski izkliedētās sistēmās, apstrādājot to kā vienotu atomāru vienību. Tas nozīmē, ka vai nu visām transakcijas operācijām jābūt veiksmīgām (apstiprinātām), vai arī nevienai no tām (atsauktām). Šis "viss vai nekas" princips nodrošina datu integritāti visā izplatītajā sistēmā.

Apsveriet scenāriju, kurā klients Tokijā rezervē lidojumu no Tokijas uz Londonu vienā aviokompānijas sistēmā un vienlaikus rezervē viesnīcas numuru Londonā citā viesnīcu rezervēšanas sistēmā. Šīs divas operācijas (lidojuma rezervācija un viesnīcas rezervācija) ideālā gadījumā būtu jāuzskata par vienu transakciju. Ja lidojuma rezervācija ir veiksmīga, bet viesnīcas rezervācija neizdodas, sistēmai ideālā gadījumā vajadzētu atcelt lidojuma rezervāciju, lai klients nepaliktu Londonā bez naktsmītnēm. Šāda koordinēta darbība ir izplatītās transakcijas būtība.

Divu fāžu apstiprināšanas (2PC) protokola ieviešana

Divu fāžu apstiprināšanas (2PC) protokols ir izplatīts algoritms, kas nodrošina atomārību vairākos resursu pārvaldniekos (piemēram, datubāzēs). Tas ietver centrālo koordinatoru un vairākus dalībniekus, katrs atbildīgs par konkrēta resursa pārvaldību. Protokols darbojas divās atšķirīgās fāzēs:

1. fāze: Sagatavošanas fāze

Šajā fāzē koordinators uzsāk transakciju un lūdz katram dalībniekam sagatavoties transakcijas apstiprināšanai vai atsaukšanai. Iesaistītie soļi ir šādi:

  1. Koordinators sūta sagatavošanas pieprasījumu: Koordinators nosūta "sagatavošanas" ziņojumu visiem dalībniekiem. Šis ziņojums signalizē, ka koordinators ir gatavs apstiprināt transakciju un lūdz katru dalībnieku sagatavoties tam.
  2. Dalībnieki sagatavojas un atbild: Katrs dalībnieks saņem sagatavošanas pieprasījumu un veic šādas darbības:
    • Tas veic nepieciešamās darbības, lai nodrošinātu, ka tas var apstiprināt vai atsaukt transakciju (piemēram, rakstot atsaukšanas/atkārtošanas žurnālus).
    • Tas nosūta "balsojumu" atpakaļ koordinatoram, norādot vai nu "sagatavots apstiprināšanai" (balsojums "jā"), vai "nevar apstiprināt" (balsojums "nē"). Balsojums "nē" varētu būt saistīts ar resursu ierobežojumiem, datu validācijas kļūmēm vai citām kļūdām.

Dalībniekiem ir ļoti svarīgi garantēt, ka viņi var apstiprināt vai atsaukt izmaiņas, tiklīdz viņi ir nobalsojuši "jā". Tas parasti ietver izmaiņu saglabāšanu noturīgā krātuvē (piemēram, diskā).

2. fāze: Apstiprināšanas vai atsaukšanas fāze

Šo fāzi ierosina koordinators, pamatojoties uz sagatavošanas fāzē saņemtajiem dalībnieku balsojumiem. Ir divi iespējamie iznākumi:

1. iznākums: Apstiprināšana

Ja koordinators saņem "jā" balsojumus no visiem dalībniekiem, tas turpina transakcijas apstiprināšanu.

  1. Koordinators sūta apstiprināšanas pieprasījumu: Koordinators nosūta "apstiprināšanas" ziņojumu visiem dalībniekiem.
  2. Dalībnieki apstiprina: Katrs dalībnieks saņem apstiprināšanas pieprasījumu un neatgriezeniski piemēro transakcijai saistītās izmaiņas savam resursam.
  3. Dalībnieki apstiprina saņemšanu: Katrs dalībnieks nosūta atpakaļ apstiprinājuma ziņojumu koordinatoram, lai apliecinātu, ka apstiprināšanas operācija bija veiksmīga.
  4. Koordinators pabeidz: Pēc apstiprinājumu saņemšanas no visiem dalībniekiem, koordinators atzīmē transakciju kā pabeigtu.

2. iznākums: Atsaukšana

Ja koordinators saņem kaut vienu "nē" balsojumu no kāda dalībnieka, vai ja tas pārsniedz atbildes gaidīšanas laiku no dalībnieka, tas nolemj atsaukt transakciju.

  1. Koordinators sūta atsaukšanas pieprasījumu: Koordinators nosūta "atsaukšanas" ziņojumu visiem dalībniekiem.
  2. Dalībnieki atsauc: Katrs dalībnieks saņem atsaukšanas pieprasījumu un atceļ visas izmaiņas, kas tika veiktas, gatavojoties transakcijai.
  3. Dalībnieki apstiprina saņemšanu: Katrs dalībnieks nosūta atpakaļ apstiprinājuma ziņojumu koordinatoram, lai apliecinātu, ka atsaukšanas operācija bija veiksmīga.
  4. Koordinators pabeidz: Pēc apstiprinājumu saņemšanas no visiem dalībniekiem, koordinators atzīmē transakciju kā pabeigtu.

Ilustratīvs piemērs: E-komercijas pasūtījumu apstrāde

Apsveriet e-komercijas sistēmu, kurā pasūtījums ietver krājumu datubāzes atjaunināšanu un maksājuma apstrādi, izmantojot atsevišķu maksājumu vārteju. Šīs ir divas atsevišķas sistēmas, kurām jāpiedalās izplatītajā transakcijā.

  1. Sagatavošanas fāze:
    • E-komercijas sistēma (koordinators) nosūta sagatavošanas pieprasījumu krājumu datubāzei un maksājumu vārtejai.
    • Krājumu datubāze pārbauda, vai pieprasītās preces ir noliktavā, un tās rezervē. Pēc tam tā balso "jā", ja veiksmīgi, vai "nē", ja preces nav noliktavā.
    • Maksājumu vārteja iepriekš autorizē maksājumu. Pēc tam tā balso "jā", ja veiksmīgi, vai "nē", ja autorizācija neizdodas (piemēram, nepietiekami līdzekļi).
  2. Apstiprināšanas/Atsaukšanas fāze:
    • Apstiprināšanas scenārijs: Ja gan krājumu datubāze, gan maksājumu vārteja balso "jā", koordinators abiem nosūta apstiprināšanas pieprasījumu. Krājumu datubāze neatgriezeniski samazina krājumu skaitu, un maksājumu vārteja veic maksājuma ieturēšanu.
    • Atsaukšanas scenārijs: Ja vai nu krājumu datubāze, vai maksājumu vārteja balso "nē", koordinators abiem nosūta atsaukšanas pieprasījumu. Krājumu datubāze atbrīvo rezervētās preces, un maksājumu vārteja atceļ iepriekšējo autorizāciju.

Divu fāžu apstiprināšanas priekšrocības

Divu fāžu apstiprināšanas trūkumi

Alternatīvas divu fāžu apstiprināšanai

2PC ierobežojumu dēļ ir parādījušās vairākas alternatīvas pieejas izplatīto transakciju pārvaldībai. Tās ietver:

Divu fāžu apstiprināšanas praktiskais pielietojums

Neskatoties uz tā ierobežojumiem, 2PC joprojām tiek izmantots dažādos scenārijos, kur spēcīga konsekvence ir kritiska prasība. Daži piemēri ietver:

Divu fāžu apstiprināšanas ieviešana

2PC ieviešana prasa rūpīgu dažādu faktoru apsvēršanu, tostarp:

Globālie apsvērumi izplatītajām transakcijām

Izstrādājot un ieviešot izplatītas transakcijas globālā vidē, jāņem vērā vairāki papildu faktori:

Secinājums

Izplatītās transakcijas un divu fāžu apstiprināšanas (2PC) protokols ir būtiski jēdzieni spēcīgu un konsekventu izplatīto sistēmu veidošanā. Lai gan 2PC nodrošina vienkāršu un plaši izmantotu risinājumu atomārības nodrošināšanai, tā ierobežojumi, īpaši attiecībā uz bloķēšanu un vienotu kļūmju punktu, prasa rūpīgi apsvērt alternatīvas pieejas, piemēram, Sagas un galīgās konsekvences principu. Izpratne par kompromisiem starp spēcīgu konsekvenci, pieejamību un veiktspēju ir ļoti svarīga, lai izvēlētos pareizo pieeju jūsu konkrētajām lietojumprogrammu vajadzībām. Turklāt, strādājot globālā vidē, papildus jāņem vērā tīkla latentums, laika zonas, datu lokalizācija un normatīvā atbilstība, lai nodrošinātu izplatīto transakciju panākumus.