Suomi

Perusteellinen tutkielma jaetuista transaktioista ja Two-Phase Commit (2PC) -protokollasta. Opi sen arkkitehtuuri, edut, haitat ja käytännön sovellukset globaaleissa järjestelmissä.

Jaetut transaktiot: Syväsukellus kahden vaiheen commit -protokollaan (2PC)

Nykypäivän yhä verkottuneemmassa maailmassa sovellusten on usein oltava vuorovaikutuksessa useissa, toisistaan riippumattomissa järjestelmissä sijaitsevien tietojen kanssa. Tämä synnyttää jaettujen transaktioiden käsitteen, jossa yksi looginen operaatio edellyttää muutosten tekemistä useissa tietokannoissa tai palveluissa. Tietojen johdonmukaisuuden varmistaminen tällaisissa tilanteissa on ensiarvoisen tärkeää, ja yksi tunnetuimmista protokollista tämän saavuttamiseksi on Two-Phase Commit (2PC).

Mikä on jaettu transaktio?

Jaettu transaktio on sarja operaatioita, jotka suoritetaan useissa maantieteellisesti hajallaan olevissa järjestelmissä, joita käsitellään yhtenä atomisena yksikkönä. Tämä tarkoittaa, että kaikkien transaktion sisällä olevien operaatioiden on joko onnistuttava (commit) tai yhdenkään ei pitäisi (rollback). Tämä "kaikki tai ei mitään" -periaate varmistaa tietojen eheyden koko hajautetussa järjestelmässä.

Harkitse tilannetta, jossa Tokiossa oleva asiakas varaa lennon Tokiosta Lontooseen yhdestä lentoyhtiön järjestelmästä ja varaa samanaikaisesti hotellihuoneen Lontoossa toisesta hotellivarausjärjestelmästä. Näitä kahta operaatiota (lennon varaus ja hotellivaraukset) tulisi ihannetapauksessa käsitellä yhtenä transaktiona. Jos lennon varaus onnistuu, mutta hotellivaraus epäonnistuu, järjestelmän tulisi ihannetapauksessa peruuttaa lennon varaus, jotta asiakasta ei jätetä pulaan Lontooseen ilman majoitusta. Tämä koordinoitu toiminta on jaetun transaktion ydin.

Esittelyssä Two-Phase Commit (2PC) -protokolla

Two-Phase Commit (2PC) -protokolla on hajautettu algoritmi, joka varmistaa atomisuuden useissa resurssienhallinnoissa (esim. tietokannoissa). Se sisältää keskuskoordinaattorin ja useita osallistujia, joista jokainen on vastuussa tietyn resurssin hallinnasta. Protokolla toimii kahdessa erillisessä vaiheessa:

Vaihe 1: Valmisteluvaihe

Tässä vaiheessa koordinaattori aloittaa transaktion ja pyytää jokaista osallistujaa valmistautumaan joko transaktion sitomiseen (commit) tai peruuttamiseen (rollback). Vaiheet ovat seuraavat:

  1. Koordinaattori lähettää valmistelupyynnön: Koordinaattori lähettää "valmistele"-viestin kaikille osallistujille. Tämä viesti osoittaa, että koordinaattori on valmis sitoutumaan transaktioon ja pyytää jokaista osallistujaa valmistautumaan tekemään niin.
  2. Osallistujat valmistautuvat ja vastaavat: Jokainen osallistuja vastaanottaa valmistelupyynnön ja suorittaa seuraavat toiminnot:
    • Se toteuttaa tarvittavat toimenpiteet varmistaakseen, että se voi joko sitoutua transaktioon tai peruuttaa sen (esim. kirjoittamalla redo/undo-lokeja).
    • Se lähettää "äänen" takaisin koordinaattorille, mikä osoittaa joko "valmis sitoutumaan" ("kyllä"-ääni) tai "ei voi sitoutua" ("ei"-ääni). "Ei"-ääni voi johtua resurssirajoituksista, tietojen validointivirheistä tai muista virheistä.

Osallistujien on ratkaisevan tärkeää taata, että ne voivat joko sitoutua muutoksiin tai peruuttaa ne, kun ne ovat äänestäneet "kyllä". Tämä edellyttää yleensä muutosten tallentamista pysyvään tallennustilaan (esim. levylle).

Vaihe 2: Sitoutumis- tai peruutamisvaihe

Tämän vaiheen aloittaa koordinaattori valmisteluvaiheessa osallistujilta saatujen äänien perusteella. On kaksi mahdollista lopputulosta:

Lopputulos 1: Sitoutuminen

Jos koordinaattori saa "kyllä"-ääniä kaikilta osallistujilta, se jatkaa transaktion sitomista.

  1. Koordinaattori lähettää sitoutumispyynnön: Koordinaattori lähettää "sitouta"-viestin kaikille osallistujille.
  2. Osallistujat sitoutuvat: Jokainen osallistuja vastaanottaa sitoutumispyynnön ja soveltaa pysyvästi transaktioon liittyvät muutokset resurssiinsa.
  3. Osallistujat kuittaavat: Jokainen osallistuja lähettää kuittausviestin takaisin koordinaattorille vahvistaakseen, että sitoutumisoperaatio onnistui.
  4. Koordinaattori suorittaa: Saatuaan kuittaukset kaikilta osallistujilta koordinaattori merkitsee transaktion valmiiksi.

Lopputulos 2: Peruuttaminen

Jos koordinaattori saa edes yhden "ei"-äänen miltä tahansa osallistujalta tai jos sen vastausaikakatkaisu ylittyy odottaessaan vastausta osallistujalta, se päättää peruuttaa transaktion.

  1. Koordinaattori lähettää peruutamispyynnön: Koordinaattori lähettää "peruuta"-viestin kaikille osallistujille.
  2. Osallistujat peruuttavat: Jokainen osallistuja vastaanottaa peruutamispyynnön ja kumoaa kaikki muutokset, jotka on tehty transaktion valmistelussa.
  3. Osallistujat kuittaavat: Jokainen osallistuja lähettää kuittausviestin takaisin koordinaattorille vahvistaakseen, että peruutustoiminto onnistui.
  4. Koordinaattori suorittaa: Saatuaan kuittaukset kaikilta osallistujilta koordinaattori merkitsee transaktion valmiiksi.

Havainnollistava esimerkki: Verkkokaupan tilausten käsittely

Harkitse verkkokauppajärjestelmää, jossa tilaus sisältää varastotietokannan päivittämisen ja maksun käsittelyn erillisen maksuportin kautta. Nämä ovat kaksi erillistä järjestelmää, joiden on osallistuttava jaettuun transaktioon.

  1. Valmisteluvaihe:
    • Verkkokauppajärjestelmä (koordinaattori) lähettää valmistelupyynnön varastotietokannalle ja maksuportille.
    • Varastotietokanta tarkistaa, onko pyydettyjä tuotteita varastossa, ja varaa ne. Sitten se äänestää "kyllä", jos se onnistuu, tai "ei", jos tuotteet ovat loppu.
    • Maksuportti esivaltuuttaa maksun. Sitten se äänestää "kyllä", jos se onnistuu, tai "ei", jos valtuutus epäonnistuu (esim. riittämättömät varat).
  2. Sitoutumis-/peruutusvaihe:
    • Sitoutumisskenaario: Jos sekä varastotietokanta että maksuportti äänestävät "kyllä", koordinaattori lähettää sitoutumispyynnön molemmille. Varastotietokanta vähentää pysyvästi varastomäärää, ja maksuportti veloittaa maksun.
    • Peruuttamisskenaario: Jos joko varastotietokanta tai maksuportti äänestää "ei", koordinaattori lähettää peruutamispyynnön molemmille. Varastotietokanta vapauttaa varatut tuotteet, ja maksuportti mitätöi esivaltuutuksen.

Kahden vaiheen commit -protokollan edut

Kahden vaiheen commit -protokollan haitat

Vaihtoehtoja kahden vaiheen commit -protokollalle

2PC:n rajoitusten vuoksi on kehitetty useita vaihtoehtoisia lähestymistapoja jaettujen transaktioiden hallintaan. Näitä ovat:

Kahden vaiheen commit -protokollan käytännön sovellukset

Rajoituksistaan huolimatta 2PC:tä käytetään edelleen useissa tilanteissa, joissa vahva johdonmukaisuus on kriittinen vaatimus. Joitakin esimerkkejä ovat:

Kahden vaiheen commit -protokollan toteuttaminen

2PC:n toteuttaminen edellyttää erilaisten tekijöiden huolellista harkintaa, mukaan lukien:

Globaalit näkökohdat jaetuissa transaktioissa

Kun suunnittelet ja toteutat jaettuja transaktioita globaalissa ympäristössä, on otettava huomioon useita lisätekijöitä:

Johtopäätös

Jaetut transaktiot ja Two-Phase Commit (2PC) -protokolla ovat olennaisia käsitteitä rakennettaessa vankkoja ja johdonmukaisia hajautettuja järjestelmiä. Vaikka 2PC tarjoaa yksinkertaisen ja laajalti hyväksytyn ratkaisun atomisuuden varmistamiseen, sen rajoitukset, erityisesti estämisen ja yhden vikapisteen ympärillä, edellyttävät vaihtoehtoisten lähestymistapojen, kuten Sagojen ja mahdollisen johdonmukaisuuden, huolellista harkintaa. Vahvan johdonmukaisuuden, saatavuuden ja suorituskyvyn välisten kompromissien ymmärtäminen on ratkaisevan tärkeää, kun valitset oikean lähestymistavan tiettyihin sovellustarpeisiisi. Lisäksi globaalissa ympäristössä toimiessa on otettava huomioon verkon latenssi, aikavyöhykkeet, tietojen lokalisointi ja sääntöjenmukaisuus jaettujen transaktioiden onnistumisen varmistamiseksi.