Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) · leksjon

Transaksjonshåndtering i mikrotjenester

Utforsk utfordringene ved transaksjonshåndtering på tvers av tjenestegrenser og behovet for alternative mønstre.

Leksjon 3 av 411 trinn

Transaksjonshåndtering i mikrotjenester er en gratis leksjon i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.

Introduksjon: Transaksjoner i mikrotjenester

I en monolittisk applikasjon håndterer én database alle transaksjoner og sikrer dataintegriteten med ACID-egenskaper (atomisitet, konsistens, isolasjon og varighet).

Med mikrotjenester er forretningslogikken delt opp på mange uavhengige tjenester, som ofte har hver sin database. Dette skaper betydelige utfordringer ved håndtering av transaksjoner som går på tvers av flere tjenester. Hvordan sikrer De at en operasjon som involverer flere tjenester, enten fullføres i sin helhet eller rulles helt tilbake?

Monolitter kontra mikrotjenester

I en monolittisk applikasjon sikrer én database transaksjonsintegriteten:

  • Alle operasjoner i en forretningstransaksjon utføres i én database.
  • Databasen garanterer ACID-egenskapene.

I mikrotjenester eies dataene vanligvis av hver enkelt tjeneste:

  • En enkelt forretningstransaksjon kan involvere flere tjenester og databaser.
  • Tradisjonelle ACID-transaksjoner kan ikke gå direkte på tvers av disse grensene.

ACID-utfordringen

ACID-egenskaper fungerer utmerket for enkle, sentraliserte databaser. De kan imidlertid ikke uten videre utvides til distribuerte systemer som mikrotjenester:

  • Atomisitet: Det er vanskelig å garantere at alt eller ingenting skjer på tvers av uavhengige tjenester.
  • Konsistens: Det er vanskelig å opprettholde umiddelbar konsistens på tvers av flere databaser.
  • Isolasjon: Det er krevende å isolere samtidige endringer på tvers av tjenester.

Forsøk på å håndheve global ACID fører ofte til tett koblede tjenester og redusert skalerbarhet.

Ingen globale transaksjoner

De lurer kanskje på om De ganske enkelt kan bruke en «global transaksjon» på tvers av alle mikrotjenestene. Det korte svaret er at dette vanligvis verken er praktisk eller anbefalt.

  • Globale transaksjoner krever en koordinator som låser ressurser på tvers av flere databaser.
  • Dette medfører betydelig belastning, reduserer ytelsen og skaper et enkelt feilpunkt.
  • Det kobler tjenestene tett sammen og undergraver en sentral fordel med mikrotjenester: uavhengighet.

Denne tilnærmingen fører ofte til distribuerte vranglåser og dårlig tilgjengelighet.

Utfordringen med delvise feil

I et distribuert system kan enhver tjeneste svikte når som helst, uavhengig av de andre. Dette kalles en delvis feil. Tenk på en nettbestilling:

  • Order Service oppretter en bestilling.
  • Payment Service behandler betalingen.
  • Inventory Service trekker varen fra lagerbeholdningen.

Hvis Inventory Service svikter etter betalingen, men før lagerbeholdningen er trukket fra, er systemet i en inkonsistent tilstand: Betalingen er gjennomført, men ingen vare er trukket fra lageret.

Konsistens på tvers av tjenester

Hvordan holder vi data konsistente på tvers av flere tjenester uten globale ACID-transaksjoner? Dette er et sentralt problem i mikrotjenester.

Tradisjonell «umiddelbar konsistens» (der alle data er konsistente rett etter en transaksjon) ofres ofte til fordel for tilgjengelighet og skalerbarhet. I stedet sikter vi ofte mot eventual konsistens.

Det betyr at dataene kan være midlertidig inkonsistente, men at systemet garanterer at de etter hvert blir konsistente.

Dilemmaet med tofaset commit

Protokollen Two-Phase Commit (2PC) er en klassisk måte å oppnå atomiske transaksjoner på tvers av distribuerte databaser. Den består av to faser:

  1. Forberedelsesfasen: En koordinator ber alle deltakerne om å forberede commit.
  2. Commit-fasen: Hvis alle deltakerne er klare, ber koordinatoren dem om å utføre commit. Hvis ikke, ber den dem om å rulle tilbake.

Selv om 2PC sikrer atomisitet, har den betydelige ulemper i mikrotjenester: Den blokkerer, er treg og er utsatt for koordinatorfeil.

Behovet for alternative mønstre

På grunn av begrensningene ved tradisjonell ACID og 2PC i distribuerte miljøer trenger mikrotjenestearkitekturer andre tilnærminger til håndtering av forretningstransaksjoner.

Disse alternative mønstrene innebærer ofte:

  • Å dele opp store transaksjoner i mindre, uavhengige lokale transaksjoner.
  • Å bruke asynkron kommunikasjon (for eksempel meldingskøer).
  • Å implementere kompenserende transaksjoner for å angre handlinger hvis et senere trinn mislykkes.

Disse mønstrene prioriterer tilgjengelighet og oppdelingsrobusthet fremfor streng, umiddelbar konsistens.

Konseptuelt: Nettbestilling

Tenk på en nettbestilling som involverer flere tjenester:

  1. Order Service mottar bestillingen.
  2. Customer Service validerer kundens kreditt.
  3. Payment Service belaster kunden.
  4. Inventory Service reserverer varene.
  5. Shipping Service sender bestillingen.

Hvis Inventory Service ikke klarer å reservere varene etter betalingen, trenger vi en måte å refundere kunden på. Det er her alternative mønstre kommer inn: De koordinerer disse trinnene og håndterer feil.

Kort sjekk

Tradisjonelle ACID-transaksjoner er vanligvis utformet for enkle, sentraliserte databaser. Når en forretningstransaksjon går på tvers av flere mikrotjenester, som hver har sin egen database, oppstår det nye utfordringer.

Oppsummering: Hvorfor nye mønstre

I denne leksjonen har vi utforsket de grunnleggende utfordringene ved håndtering av forretningstransaksjoner på tvers av flere mikrotjenester. Vi har lært at:

  • Tradisjonelle ACID-egenskaper gjelder ikke direkte på tvers av tjenestegrenser.
  • Globale transaksjoner (som 2PC) unngås ofte på grunn av kompleksitet, ytelsesflaskehalser og redusert tilgjengelighet.
  • Delvise feil er en konstant trussel som kan føre til inkonsistente tilstander.

Disse utfordringene viser hvor viktig det er med alternative mønstre som Saga, som De skal lære om i kommende leksjoner, for å sikre datakonsistens i en distribuert verden.

Gratis å komme i gang

Lær deg Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Transaksjonshåndtering i mikrotjenester» gratis?

Ja – hele teksten i «Transaksjonshåndtering i mikrotjenester» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.

Hva lærer jeg i «Transaksjonshåndtering i mikrotjenester»?

Utforsk utfordringene ved transaksjonshåndtering på tvers av tjenestegrenser og behovet for alternative mønstre. Du øver på Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)?

Ingen tidligere erfaring er nødvendig. Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Transaksjonshåndtering i mikrotjenester»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-leksjonen?

Ja. Alle Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. ACID- kontra BASE-prinsipper
  2. Forstå eventual consistency
  3. Transaksjonshåndtering i mikrotjenester
  4. Protokollen for tofaset commit
← Tilbake til Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)