Eesti

Põhjalik ülevaade hajutatud tehingutest ja Kahefaasilisest Commit-protokollist (2PC). Õpi selle arhitektuuri, eeliseid, puudusi ja praktilisi rakendusi globaalsetes süsteemides.

Hajutatud Tehingud: Süvaülevaade Kahefaasilisest Commit-protokollist (2PC)

Tänapäeval üha enam omavahel ühendatud maailmas peavad rakendused sageli suhtlema andmetega, mis on salvestatud mitmetes sõltumatutes süsteemides. See toob kaasa hajutatud tehingute mõiste, kus üks loogiline toiming nõuab muudatuste tegemist mitmes andmebaasis või teenuses. Andmete järjepidevuse tagamine sellistes stsenaariumides on ülimalt tähtis ning üks tuntumaid protokolle selle saavutamiseks on Kahefaasiline Commit (2PC).

Mis on Hajutatud Tehing?

Hajutatud tehing on toimingute jada, mida sooritatakse mitmetes geograafiliselt hajutatud süsteemides, käsitledes neid ühe aatomse üksusena. See tähendab, et kas kõik tehingu sees olevad toimingud peavad õnnestuma (commit), või ühtegi ei tohi teha (rollback). See "kõik või mitte midagi" põhimõte tagab andmete terviklikkuse kogu hajutatud süsteemis.

Kujutage ette stsenaariumi, kus klient Tokyos broneerib lennu Tokyost Londonisse ühel lennufirma süsteemil ja samal ajal reserveerib hotellitoa Londonis teises hotellibroneerimissüsteemis. Neid kahte toimingut (lennubroneering ja hotellisamine) tuleks ideaalis käsitleda ühe tehinguna. Kui lennubroneering õnnestub, kuid hotellisamine ebaõnnestub, peaks süsteem ideaalis tühistama lennubroneeringu, et vältida kliendi hätta jätmist Londonis ilma majutuseta. See koordineeritud käitumine on hajutatud tehingu olemus.

Tutvustus Kahefaasilise Commit (2PC) Protokolli

Kahefaasiline Commit (2PC) protokoll on hajutatud algoritm, mis tagab aatomilisuse mitme ressursihalduri (nt andmebaaside) vahel. See hõlmab keskset koordinaatorit ja mitmeid osalejaid, kus igaüks vastutab kindla ressursi haldamise eest. Protokoll töötab kahes eraldiseisvas faasis:

1. Faas: Ettevalmistusfaas

Selles faasis algatab koordinaator tehingu ja palub igal osalejal valmistuda tehingu commit'imiseks või tagasivõtmiseks. Kaasatud sammud on järgmised:

  1. Koordinaator saadab ettevalmistustaotluse: Koordinaator saadab "prepare" sõnumi kõigile osalejatele. See sõnum annab märku, et koordinaator on valmis tehingu commit'ima ja palub igal osalejal selleks valmistuda.
  2. Osalejad valmistuvad ja vastavad: Iga osaleja saab ettevalmistustaotluse ja sooritab järgmised toimingud:
    • See teeb vajalikud sammud, et tagada, et ta suudab tehingu commit'ida või tagasi võtta (nt kirjutades redo/undo logisid).
    • See saadab koordinaatorile tagasi "hääle", näidates kas "valmis commit'ima" ("jah" hääl) või "ei saa commit'ida" ("ei" hääl). "Ei" hääl võib olla tingitud ressursipiirangutest, andmete valideerimisest või muudest vigadest.

Osalejate jaoks on kriitiline garanteerida, et nad saavad pärast "jah" hääletamist muudatused kas commit'ida või tagasi võtta. See hõlmab tavaliselt muudatuste salvestamist püsivasse mällu (nt kettale).

2. Faas: Commit või Tagasivõtu Faas

Selle faasi algatab koordinaator ettevalmistusfaasis saadud häälte põhjal. Võimalikud on kaks tulemust:

Tulemus 1: Commit

Kui koordinaator saab kõigilt osalejatelt "jah" hääli, jätkab ta tehingu commit'imisega.

  1. Koordinaator saadab Commit-taotluse: Koordinaator saadab "commit" sõnumi kõigile osalejatele.
  2. Osalejad Commit'ivad: Iga osaleja saab commit-taotluse ja rakendab püsivalt tehinguga seotud muudatused oma ressursile.
  3. Osalejad Kinnitavad: Iga osaleja saadab koordinaatorile tagasi kinnitussõnumi, et kinnitada, et commit-toiming õnnestus.
  4. Koordinaator Lõpetab: Pärast kõigilt osalejatelt kinnituste saamist märgib koordinaator tehingu lõpetatuks.

Tulemus 2: Tagasivõtt

Kui koordinaator saab kasvõi ühe "ei" hääle mõnelt osalejalt või kui tema ooteaeg vastuse saamiseks osalejalt aegub, otsustab ta tehingu tagasi võtta.

  1. Koordinaator saadab Tagasivõtu-taotluse: Koordinaator saadab "rollback" sõnumi kõigile osalejatele.
  2. Osalejad Võtavad Tagasi: Iga osaleja saab tagasivõtutaotluse ja tühistab kõik muudatused, mis tehti tehingu ettevalmistamiseks.
  3. Osalejad Kinnitavad: Iga osaleja saadab koordinaatorile tagasi kinnitussõnumi, et kinnitada, et tagasivõtutoiming õnnestus.
  4. Koordinaator Lõpetab: Pärast kõigilt osalejatelt kinnituste saamist märgib koordinaator tehingu lõpetatuks.

Illustratiivne Näide: E-kaubanduse Tellimuste Töötlus

Mõelge e-kaubanduse süsteemile, kus tellimus hõlmab inventuuride andmebaasi värskendamist ja makse töötlemist eraldi maksevärava kaudu. Need on kaks erinevat süsteemi, mis peavad osalema hajutatud tehingus.

  1. Ettevalmistusfaas:
    • E-kaubanduse süsteem (koordinaator) saadab ettevalmistustaotluse inventuuride andmebaasile ja makseväravale.
    • Inventuuride andmebaas kontrollib, kas taotletud esemed on laos ja reserveerib need. Seejärel hääletab "jah", kui õnnestub, või "ei", kui esemed on otsas.
    • Maksevärav e-autoriseerib makse. Seejärel hääletab "jah", kui õnnestub, või "ei", kui autoriseerimine ebaõnnestub (nt ebapiisavad vahendid).
  2. Commit/Tagasivõtu Faas:
    • Commit-stsenaarium: Kui nii inventuuride andmebaas kui ka maksevärav hääletavad "jah", saadab koordinaator mõlemale commit-taotluse. Inventuuride andmebaas vähendab püsivalt laoseisu ja maksevärav võtab makse vastu.
    • Tagasivõtu-stsenaarium: Kui kas inventuuride andmebaas või maksevärav hääletab "ei", saadab koordinaator mõlemale tagasivõtutaotluse. Inventuuride andmebaas vabastab reserveeritud esemed ja maksevärav tühistab e-autoriseerimise.

Kahefaasilise Commit Eelised

Kahefaasilise Commit Puudused

Alternatiivid Kahefaasilisele Commitile

Tulenevalt 2PC piirangutest on tekkinud mitmeid alternatiivseid lähenemisviise hajutatud tehingute haldamiseks. Nende hulka kuuluvad:

Kahefaasilise Commit Praktilised Rakendused

Vaatamata selle piirangutele kasutatakse 2PC-d endiselt erinevates stsenaariumides, kus tugev järjepidevus on kriitiline nõue. Mõned näited hõlmavad:

Kahefaasilise Commit Rakendamine

2PC rakendamine nõuab erinevate tegurite hoolikat kaalumist, sealhulgas:

Globaalsed Kaalutlused Hajutatud Tehingute Kohta

Hajutatud tehingute kavandamisel ja rakendamisel globaalses keskkonnas tuleb kaaluda mitmeid täiendavaid tegureid:

Kokkuvõte

Hajutatud tehingud ja Kahefaasiline Commit (2PC) protokoll on olulised mõisted robustsete ja järjepidevate hajutatud süsteemide ehitamisel. Kuigi 2PC pakub lihtsat ja laialt kasutatavat lahendust aatomilisuse tagamiseks, tingivad selle piirangud, eriti blokeerimise ja üksikute tõrkeallikate osas, alternatiivsete lähenemisviiside nagu Saga ja lõpliku järjepidevuse hoolika kaalumise. Tugeva järjepidevuse, kättesaadavuse ja jõudluse vaheliste kompromisside mõistmine on teie konkreetsete rakendusvajaduste jaoks õige lähenemisviisi valimisel ülioluline. Lisaks, globaalses keskkonnas tegutsedes tuleb täiendavaid kaalutlusi võtta seoses võrgu viivituse, ajavööndite, andmete lokaliseerimise ja regulatiivse vastavuse kohta, et tagada hajutatud tehingute edukus.