Lietuvių

Išsami analizė apie Sagos modelį, skirtą valdyti paskirstytąsias transakcijas mikroservisų architektūrose, apimanti jo privalumus, iššūkius, įgyvendinimo strategijas ir realius pavyzdžius.

Sagos modelis: paskirstytųjų transakcijų įgyvendinimas mikroservisams

Mikroservisų pasaulyje duomenų nuoseklumo palaikymas keliose tarnybose gali būti didelis iššūkis. Tradicinės ACID (atomiškumo, nuoseklumo, izoliacijos, patvarumo) transakcijos, dažnai naudojamos monolitinėse programose, dažnai netinka paskirstytosioms aplinkoms. Būtent čia pasitarnauja Sagos modelis, suteikiantis patikimą sprendimą valdyti paskirstytąsias transakcijas ir užtikrinti duomenų vientisumą mikroservisuose.

Kas yra Sagos modelis?

Sagos modelis yra projektavimo šablonas, naudojamas valdyti lokalių transakcijų seką keliuose mikroservisuose. Jis suteikia būdą pasiekti galutinį nuoseklumą, o tai reiškia, kad nors duomenys laikinai gali būti nenuoseklūs, galiausiai jie pasieks nuoseklią būseną. Užuot rėmęsis viena, atomine transakcija, apimančia kelias tarnybas, Sagos modelis suskaido transakciją į eilę mažesnių, nepriklausomų transakcijų, kurių kiekvieną atlieka viena tarnyba.

Kiekviena lokali Sagos transakcija atnaujina vieno mikroserviso duomenų bazę. Jei viena iš transakcijų nepavyksta, Saga įvykdo kompensacinių transakcijų seriją, kad anuliuotų ankstesnių transakcijų atliktus pakeitimus, efektyviai atšaukdama bendrą operaciją.

Kodėl naudoti Sagos modelį?

Keletas veiksnių daro Sagos modelį vertingu įrankiu valdant transakcijas mikroservisų architektūrose:

ACID ir BASE palyginimas

Norint nuspręsti, ar naudoti Sagos modelį, labai svarbu suprasti skirtumą tarp ACID ir BASE (Basically Available, Soft state, Eventually consistent – iš esmės pasiekiamas, lanksti būsena, galiausiai nuoseklus).

Dvi pagrindinės Sagos įgyvendinimo strategijos

Yra du pagrindiniai būdai įgyvendinti Sagos modelį: choreografija ir orkestravimas.

1. Choreografija pagrįsta Saga

Choreografija pagrįstoje Sagoje kiekvienas mikroservisas dalyvauja Sagoje, klausydamasis kitų mikroservisų skelbiamų įvykių ir atitinkamai reaguodamas. Nėra centrinio orkestratoriaus; kiekviena tarnyba žino savo atsakomybes ir kada atlikti savo veiksmus.

Kaip tai veikia:

  1. Saga prasideda, kai mikroservisas paskelbia įvykį, nurodantį transakcijos pradžią.
  2. Kiti mikroservisai prenumeruoja šį įvykį ir, jį gavę, atlieka savo lokalią transakciją.
  3. Užbaigę savo transakciją, kiekvienas mikroservisas paskelbia kitą įvykį, nurodantį jo operacijos sėkmę ar nesėkmę.
  4. Kiti mikroservisai klauso šių įvykių ir imasi atitinkamų veiksmų: arba pereina prie kito Sagos žingsnio, arba, įvykus klaidai, inicijuoja kompensacines transakcijas.

Pavyzdys: el. prekybos užsakymo pateikimas (choreografija)

  1. Užsakymų tarnyba: Gauna naujo užsakymo užklausą ir paskelbia `OrderCreated` (UžsakymasSukurtas) įvykį.
  2. Atsargų tarnyba: Prenumeruoja `OrderCreated`. Gavusi įvykį, patikrina atsargas. Jei pakanka, rezervuoja prekes ir paskelbia `InventoryReserved` (AtsargosRezervuotos). Jei nepakanka, paskelbia `InventoryReservationFailed` (AtsargųRezervacijaNepavyko).
  3. Mokėjimų tarnyba: Prenumeruoja `InventoryReserved`. Gavusi įvykį, apdoroja mokėjimą. Jei sėkmingai, paskelbia `PaymentProcessed` (MokėjimasApdorotas). Jei nepavyksta, paskelbia `PaymentFailed` (MokėjimasNepavyko).
  4. Pristatymo tarnyba: Prenumeruoja `PaymentProcessed`. Gavusi įvykį, paruošia siuntą ir paskelbia `ShipmentPrepared` (SiuntaParuošta).
  5. Užsakymų tarnyba: Prenumeruoja `ShipmentPrepared`. Gavusi įvykį, pažymi užsakymą kaip įvykdytą.
  6. Kompensacija: Jei paskelbiamas `PaymentFailed` arba `InventoryReservationFailed` įvykis, kitos tarnybos klauso ir atlieka kompensacines transakcijas (pvz., atlaisvina rezervuotas atsargas).

Choreografijos privalumai:

Choreografijos trūkumai:

2. Orkestravimu pagrįsta Saga

Orkestravimu pagrįstoje Sagoje centrinis orkestratorius (dažnai įgyvendinamas kaip dedikuota tarnyba arba būsenų mašina) valdo Sagą ir koordinuoja lokalių transakcijų vykdymą dalyvaujančiuose mikroservisuose. Orkestratorius nurodo kiekvienai tarnybai, ką ir kada daryti.

Kaip tai veikia:

  1. Saga prasideda, kai klientas paprašo orkestratoriaus inicijuoti transakciją.
  2. Orkestratorius siunčia komandas dalyvaujantiems mikroservisams atlikti jų lokalias transakcijas.
  3. Kiekvienas mikroservisas atlieka savo transakciją ir praneša orkestratoriui apie sėkmę ar nesėkmę.
  4. Remdamasis rezultatu, orkestratorius nusprendžia, ar pereiti prie kito žingsnio, ar inicijuoti kompensacines transakcijas.

Pavyzdys: el. prekybos užsakymo pateikimas (orkestravimas)

  1. Užsakymų orkestratorius: Gauna naujo užsakymo užklausą.
  2. Užsakymų orkestratorius: Siunčia komandą Atsargų tarnybai rezervuoti prekes.
  3. Atsargų tarnyba: Rezervuoja prekes ir praneša Užsakymų orkestratoriui.
  4. Užsakymų orkestratorius: Siunčia komandą Mokėjimų tarnybai apdoroti mokėjimą.
  5. Mokėjimų tarnyba: Apdoroja mokėjimą ir praneša Užsakymų orkestratoriui.
  6. Užsakymų orkestratorius: Siunčia komandą Pristatymo tarnybai paruošti siuntą.
  7. Pristatymo tarnyba: Paruošia siuntą ir praneša Užsakymų orkestratoriui.
  8. Užsakymų orkestratorius: Pažymi užsakymą kaip įvykdytą.
  9. Kompensacija: Jei kuris nors žingsnis nepavyksta, Užsakymų orkestratorius siunčia kompensacines komandas atitinkamoms tarnyboms (pvz., atlaisvinti rezervuotas atsargas).

Orkestravimo privalumai:

Orkestravimo trūkumai:

Kompensacinių transakcijų įgyvendinimas

Svarbus Sagos modelio aspektas yra kompensacinių transakcijų įgyvendinimas. Šios transakcijos vykdomos siekiant anuliuoti anksčiau užbaigtų transakcijų poveikį gedimo atveju. Tikslas – sugrąžinti sistemą į nuoseklią būseną, net jei visos Sagos negalima užbaigti.

Pagrindiniai aspektai, į kuriuos reikia atsižvelgti įgyvendinant kompensacines transakcijas:

Kompensacinių transakcijų pavyzdžiai:

Iššūkiai ir svarstymai

Nors Sagos modelis siūlo reikšmingų privalumų, jis taip pat kelia tam tikrų iššūkių ir reikalauja apsvarstyti kelis aspektus:

Panaudojimo atvejai ir pavyzdžiai

Sagos modelis puikiai tinka įvairiems panaudojimo atvejams, ypač paskirstytosiose sistemose ir mikroservisų architektūrose. Štai keletas įprastų pavyzdžių:

Pavyzdys: pasaulinė bankinė transakcija

Įsivaizduokite scenarijų, apimantį pasaulinę bankinę transakciją tarp dviejų skirtingų bankų, esančių skirtingose šalyse, kuriems taikomi įvairūs reglamentai ir atitikties patikros. Sagos modelis gali užtikrinti, kad transakcija vyktų pagal nustatytus žingsnius:

  1. Inicijuoti transakciją: Klientas inicijuoja lėšų pervedimą iš savo sąskaitos banke A (esančiame JAV) į gavėjo sąskaitą banke B (esančiame Vokietijoje).
  2. Bankas A – sąskaitos patvirtinimas: Bankas A patvirtina kliento sąskaitą, patikrina, ar yra pakankamai lėšų, ir užtikrina, kad nėra jokių apribojimų.
  3. Atitikties patikra (Bankas A): Bankas A atlieka atitikties patikrą, siekdamas užtikrinti, kad transakcija nepažeistų pinigų plovimo prevencijos (AML) reglamentų ar tarptautinių sankcijų.
  4. Lėšų pervedimas (Bankas A): Bankas A nuskaito lėšas iš kliento sąskaitos ir siunčia jas į tarpuskaitos namus ar tarpininkaujantį banką.
  5. Tarpuskaitos namų apdorojimas: Tarpuskaitos namai apdoroja transakciją, atlieka valiutos konvertavimą (USD į EUR) ir nukreipia lėšas į banką B.
  6. Bankas B – sąskaitos patvirtinimas: Bankas B patvirtina gavėjo sąskaitą ir užtikrina, kad ji yra aktyvi ir gali priimti lėšas.
  7. Atitikties patikra (Bankas B): Bankas B atlieka savo atitikties patikrą, laikydamasis Vokietijos ir ES reglamentų.
  8. Įskaityti į sąskaitą (Bankas B): Bankas B įskaito lėšas į gavėjo sąskaitą.
  9. Patvirtinimas: Bankas B siunčia patvirtinimo pranešimą bankui A, kuris tada praneša klientui, kad transakcija baigta.

Kompensacinės transakcijos:

Įrankiai ir technologijos

Keletas įrankių ir technologijų gali padėti įgyvendinti Sagos modelį:

Geriausios Sagos modelio įgyvendinimo praktikos

Norėdami efektyviai įgyvendinti Sagos modelį, apsvarstykite šias geriausias praktikas:

Išvada

Sagos modelis yra galingas įrankis valdyti paskirstytąsias transakcijas mikroservisų architektūrose. Suskaidydamas transakcijas į mažesnių, nepriklausomų transakcijų seriją ir suteikdamas mechanizmą gedimams kompensuoti, Sagos modelis leidžia palaikyti duomenų nuoseklumą ir kurti atsparias, mastelį keičiančias ir atsietas sistemas. Nors Sagos modelį gali būti sudėtinga įgyvendinti, jo teikiami privalumai lankstumo, mastelio keitimo ir atsparumo požiūriu daro jį vertingu turtu bet kuriai mikroservisų architektūrai.

Sagos modelio niuansų, choreografijos ir orkestravimo kompromisų bei kompensacinių transakcijų svarbos supratimas leis jums projektuoti ir įgyvendinti patikimas paskirstytąsias sistemas, atitinkančias šiandienos sudėtingų verslo aplinkų reikalavimus. Sagos modelio pritaikymas yra žingsnis link tikrai atsparių ir mastelį keičiančių mikroservisų architektūrų kūrimo, gebančių su pasitikėjimu valdyti net ir sudėtingiausias paskirstytąsias transakcijas. Taikydami šį modelį, nepamirškite atsižvelgti į savo konkrečius poreikius ir kontekstą bei nuolat tobulinti savo įgyvendinimą remdamiesi realia patirtimi ir grįžtamuoju ryšiu.