To -fase commit -protokoll - Two-phase commit protocol
I transaksjonsbehandling , databaser , og datanettverk , den to-tofaseiverksettingsprotokollen ( 2PC ) er en type atom engasjement protokoll (ACP). Det er en distribuert algoritme som koordinerer alle prosessene som deltar i en distribuert atomtransaksjon om transaksjonen skal forpliktes eller avbrytes (tilbakestilles) (det er en spesialisert type konsensusprotokoll ). Protokollen oppnår målet selv i mange tilfeller av midlertidig systemfeil (som involverer enten prosess, nettverksnode, kommunikasjon osv.), Og er derfor mye brukt. Imidlertid er den ikke motstandsdyktig mot alle mulige feilkonfigurasjoner, og i sjeldne tilfeller er manuell intervensjon nødvendig for å rette opp et utfall. For å imøtekomme gjenoppretting etter feil (automatisk i de fleste tilfeller) bruker protokollens deltakere logging av protokollens tilstander. Loggposter, som vanligvis er trege til å generere, men overlever feil, brukes av protokollens gjenopprettingsprosedyrer . Det finnes mange protokollvarianter som hovedsakelig er forskjellige i loggingsstrategier og gjenopprettingsmekanismer. Selv om det vanligvis er ment å bli brukt sjelden, utgjør gjenopprettingsprosedyrer en betydelig del av protokollen, på grunn av mange mulige feilscenarier som skal vurderes og støttes av protokollen.
I en "normal utførelse" av en enkelt distribuert transaksjon (dvs. når det ikke oppstår feil, som vanligvis er den hyppigste situasjonen), består protokollen av to faser:
- Forespørselsforespørselsfasen (eller stemmefasen), der en koordinatorprosess forsøker å forberede alle transaksjonens deltakende prosesser (navngitte deltakere, kohorter eller arbeidere) for å ta de nødvendige skrittene for enten å begå eller avbryte transaksjonen og stemme, enten "Ja": forplikt deg (hvis transaksjonsdeltakerens lokale porsjonsutførelse er avsluttet ordentlig), eller "Nei": avbryt (hvis det er oppdaget et problem med den lokale delen), og
- Forpliktelsesfasen, der koordinatoren, basert på stemmegivning av deltakerne, bestemmer om de skal forplikte seg (bare hvis alle har stemt "Ja") eller avbryte transaksjonen (ellers), og varsler resultatet til alle deltakerne. Deltakerne følger deretter med de nødvendige handlingene (forplikter eller avbryter) med sine lokale transaksjonsressurser (også kalt gjenvinnbare ressurser, f.eks. Databasedata) og deres respektive deler i transaksjonens andre utdata (hvis aktuelt).
To-fase commit (2PC) -protokollen bør ikke forveksles med to- faselåsing (2PL) -protokollen, en samtidighetskontrollprotokoll .
Antagelser
Protokollen fungerer på følgende måte: en node er en utpekt koordinator, som er hovedstedet, og resten av nodene i nettverket er utpekt som deltakere. Protokollen antar at det er stabil lagring på hver node med en skrive-for-logg , at ingen node krasjer for alltid, at dataene i skrive-for-loggen aldri går tapt eller ødelegges i en krasj, og at to noder kan kommunisere med hverandre. Den siste antagelsen er ikke for restriktiv, ettersom nettverkskommunikasjon vanligvis kan omdirigeres. De to første forutsetningene er mye sterkere; Hvis en node er fullstendig ødelagt, kan data gå tapt.
Protokollen initieres av koordinatoren etter at siste trinn i transaksjonen er nådd. Deltakerne svarer deretter med en avtale melding eller en avbryt melding avhengig av om transaksjonen er behandlet vellykket hos deltakeren.
Grunnleggende algoritme
Forplikte forespørsel (eller stemmefase)
- Koordinatoren sender en forespørsel om å formidle melding til alle deltakerne og venter til den har mottatt svar fra alle deltakerne.
- Deltakerne utfører transaksjonen opp til det punktet hvor de vil bli bedt om å forplikte seg. De skriver hver en oppføring i sin angre -logg og en oppføring i loggen for å gjøre om .
- Hver deltaker svarer med en avtale melding (deltaker stemmer Ja for å forplikte), hvis deltakerens handlinger lyktes, eller en avbryt melding (deltaker stemmer Nei, ikke å forplikte), hvis deltakeren opplever en fiasko som vil gjøre det umulig å forplikte seg.
Forplikte (eller ferdigstillelse) fase
Suksess
Hvis koordinatoren mottok en avtalemelding fra alle deltakerne i løpet av forespørselsforespørselsfasen:
- Koordinatoren sender en commit -melding til alle deltakerne.
- Hver deltaker fullfører operasjonen, og frigjør alle låser og ressurser som er inneholdt under transaksjonen.
- Hver deltaker sender en bekreftelse til koordinatoren.
- Koordinatoren fullfører transaksjonen når alle bekreftelser er mottatt.
Feil
Hvis en deltaker stemmer nei i løpet av forespørselsforespørselsfasen (eller koordinatorens timeout utløper):
- Koordinatoren sender en tilbakestillingsmelding til alle deltakerne.
- Hver deltaker angrer transaksjonen ved å bruke angre -loggen, og frigjør ressurser og låser som er inneholdt under transaksjonen.
- Hver deltaker sender en bekreftelse til koordinatoren.
- Koordinatoren angrer transaksjonen når alle bekreftelser er mottatt.
Meldingsflyt
Coordinator Participant
QUERY TO COMMIT
-------------------------------->
VOTE YES/NO prepare*/abort*
<-------------------------------
commit*/abort* COMMIT/ROLLBACK
-------------------------------->
ACKNOWLEDGMENT commit*/abort*
<--------------------------------
end
En * ved siden av posttypen betyr at posten blir tvunget til stabil lagring.
Ulemper
Den største ulempen med tofase commit-protokollen er at den er en blokkeringsprotokoll. Hvis koordinatoren mislykkes permanent, vil noen deltakere aldri løse transaksjonene sine: Etter at en deltaker har sendt en avtalemelding til koordinatoren, vil den blokkere til en forpliktelse eller tilbakeføring er mottatt.
Implementering av tofaset commit-protokollen
Felles arkitektur
I mange tilfeller distribueres 2PC -protokollen i et datanettverk. Det distribueres enkelt ved å implementere flere dedikerte 2PC -komponenter som ligner hverandre, vanligvis kalt Transaction Managers (TMs; også referert til som 2PC -agenter eller Transaction Processing Monitors), som utfører protokollens utførelse for hver transaksjon (f.eks. The Open Group ' s X/Open XA ). Databasene som er involvert i en distribuert transaksjon, deltakerne, både koordinatoren og deltakerne, registrerer seg for å lukke TM -er (vanligvis bosatt på de samme nettverksnodene som deltakerne) for å avslutte transaksjonen ved hjelp av 2PC. Hver distribuert transaksjon har et ad hoc -sett med TM -er, TM -ene som transaksjonsdeltakerne registrerer seg for. En leder, koordinatoren TM, eksisterer for hver transaksjon for å koordinere 2PC for den, vanligvis TM i koordinatordatabasen. Koordinatorrollen kan imidlertid overføres til en annen TM av ytelses- eller pålitelighetshensyn. I stedet for å utveksle 2PC -meldinger seg imellom, utveksler deltakerne meldingene med sine respektive TM -er. De relevante TM -ene kommuniserer seg imellom for å utføre 2PC -protokollskjemaet ovenfor, "representere" de respektive deltakerne, for å avslutte transaksjonen. Med denne arkitekturen er protokollen fullstendig distribuert (trenger ikke noen sentral behandlingskomponent eller datastruktur), og skalerer opp med antall nettverksnoder (nettverksstørrelse) effektivt.
Dette felles arkitektur er også effektiv for fordeling av andre atomforpliktelses protokoller foruten 2PC, ettersom alle slike protokoller bruke den samme stemmemekanismen og resultatet forplantning til protokoll deltakere.
Protokolloptimaliseringer
Databaseforskning har blitt gjort på måter å få de fleste fordelene med tofaset commit-protokollen mens du reduserer kostnadene ved å optimalisere protokollen og spare protokolloperasjoner under visse systems oppførselsforutsetninger.
Antatt abort og antatt forpliktelse
Antatt abort eller antatt forpliktelse er vanlige slike optimaliseringer. En antagelse om utfallet av transaksjoner, enten begå eller avbryte, kan lagre både meldinger og loggoperasjoner av deltakerne under utførelsen av 2PC -protokollen. For eksempel, når antatt avbrytelse, hvis det under systemgjenoppretting etter feil ikke finnes noen logget bevis for forpliktelse for en eller annen transaksjon ved gjenopprettingsprosedyren, antar det at transaksjonen har blitt avbrutt, og handler deretter. Dette betyr at det ikke spiller noen rolle om aborter logges i det hele tatt, og slik logging kan lagres under denne forutsetningen. Vanligvis betales en straff for tilleggsoperasjoner under gjenoppretting etter feil, avhengig av optimaliseringstype. Dermed blir den beste varianten av optimalisering, hvis noen, valgt i henhold til statistikk over feil og transaksjoner.
Tre-faset commit-protokoll
Den treet 2PC protokollen (også kalt nestet 2PC, eller Rekursiv 2PC) er en vanlig variant av 2PC i et datanettverk , som bedre utnytter den underliggende kommunikasjonsinfrastruktur. Deltakerne i en distribuert transaksjon påkalles vanligvis i en rekkefølge som definerer en trestruktur, påkallelsestreet, hvor deltakerne er nodene og kantene er påkallelsene (kommunikasjonslenker). Det samme treet brukes vanligvis for å fullføre transaksjonen med en 2PC -protokoll, men også et annet kommunikasjonstre kan brukes i prinsippet. I et tre 2PC regnes koordinatoren som roten ("toppen") av et kommunikasjonstreet (invertert tre), mens deltakerne er de andre nodene. Koordinatoren kan være noden som stammer fra transaksjonen (påkalles rekursivt (transitivt) de andre deltakerne), men også en annen node i samme tre kan ta koordinatorrollen i stedet. 2PC -meldinger fra koordinatoren formidles "ned" i treet, mens meldinger til koordinatoren "samles" av en deltaker fra alle deltakerne under den, før den sender den riktige meldingen "opp" i treet (unntatt en avbrytingsmelding, som formidles "opp" umiddelbart etter mottak av den, eller hvis den nåværende deltakeren starter aborten).
Protokollen Dynamic two-phase commit (Dynamic two-phase commitment, D2PC) er en variant av Tree 2PC uten forhåndsbestemt koordinator. Den inneholder flere optimaliseringer som har blitt foreslått tidligere. Avtalemeldinger (Ja stemmer) begynner å spre seg fra alle bladene, hvert blad når de fullfører oppgavene på vegne av transaksjonen (blir klar). En mellomliggende (ikke -blad) node sender klar når en avtalemelding til den siste (enkelt) naboenoden som avtalemeldingen ennå ikke er mottatt fra. Koordinatoren bestemmes dynamisk av racingavtalemeldinger over transaksjonstreet, på stedet der de kolliderer. De kolliderer enten ved en transaksjonstreetode, for å være koordinator eller på en trekant. I sistnevnte tilfelle velges en av de to kantens noder som koordinator (hvilken som helst node). D2PC er tidsoptimal (blant alle forekomstene av et spesifikt transaksjonstreet og en spesifikk implementering av Tree 2PC -protokollen; alle forekomster har samme tre, hver forekomst har en annen node som koordinator): Ved å velge en optimal koordinator forplikter D2PC begge koordinatoren og hver deltaker i minst mulig tid, slik at den tidligst mulige frigjøringen av låste ressurser i hver transaksjonsdeltaker (trenode).