Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

SÄ, lÄt oss förestÀlla oss. I rummet Àr 5 katter instÀngda, och för att kunna gÄ och vÀcka sin Àgare mÄste de först komma överens stÀrker de tillsammans, eftersom de endast kan öppna dörren genom att trycka sig pÄ den fem och fem. Om en av katterna Àr Schrödingers katt, och de andra katterna inte kÀnner till hans beslut, uppstÄr frÄgan: "Hur kan de göra det?"

I den hÀr artikeln kommer jag pÄ ett enkelt sprÄk att berÀtta om den teoretiska komponenten i vÀrlden av distribuerade system och principerna för deras funktion. Jag kommer ocksÄ kortfattat att diskutera huvudidén som ligger till grund för Paxos.

Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

NÀr utvecklare anvÀnder molninfrastrukturer, olika databaser och arbetar i kluster med ett stort antal noder, Àr de sÀkra pÄ att data kommer att vara intakta, sÀkra och alltid tillgÀngliga. Men var kommer garantierna ifrÄn?

I grunden Ă€r de garantier vi har – garantier frĂ„n leverantören. De beskrivs i dokumentationen ungefĂ€r sĂ„ hĂ€r: "Denna tjĂ€nst Ă€r tillrĂ€ckligt pĂ„litlig, den har en angiven SLA, oroa dig inte, allt kommer att fungera distribuerat som du förvĂ€ntar dig."

Vi tenderar att tro pÄ det bÀsta, eftersom kloka mÀn frÄn stora företag har försÀkrat oss om att allt kommer att gÄ bra. Vi stÀller oss inte frÄgan: varför kan detta överhuvudtaget fungera? Finns det nÄgon formell motivering till korrektheten i sÄdana system?

Nyligen besökte jag skolan för distribuerad databehandling och blev vÀldigt inspirerad av detta Àmne. FörelÀsningarna i skolan liknade mer lektioner i matematisk analys Àn nÄgot som var relaterat till datorsystem. Men just sÄ bevisades i sin tid de viktiga algoritmer som vi anvÀnder varje dag utan att vi ens Àr medvetna om det.

I de flesta moderna distribuerade system anvÀnds konsensusalgoritmen Paxos och dess olika variationer. Det mest fantastiska Àr att bevisbarheten och i princip sjÀlva möjligheten av existensen av denna algoritm kan bevisas helt enkelt med hjÀlp av en penna och papper. Samtidigt tillÀmpas algoritmen i praktiken i stora system som arbetar pÄ ett enormt antal noder i molnets miljö.

En lÀttfattlig illustration av vad som kommer att diskuteras hÀrnÀst: tvÄ generalers problemLÄt oss för uppvÀrmning analysera tvÄ generalers problem.

Vi har tvĂ„ armĂ©er – den röda och den vita. De vita trupperna Ă€r baserade i den belĂ€grade staden. De röda trupperna, ledda av generalerna A1 och A2, Ă€r placerade pĂ„ tvĂ„ sidor av staden. MĂ„let för de röda Ă€r att attackera den vita staden och segra. Men varje röd generals armĂ© Ă€r mindre Ă€n de vita.

Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

Villkoren för seger för de röda: bÄda generalerna mÄste attackera samtidigt för att ha ett numerÀrt överlÀge över de vita. För detta mÄste generalerna A1 och A2 enas med varandra. Om de attackerar var för sig, kommer de röda att förlora.

För att enas kan generalerna A1 och A2 skicka budbÀrare till varandra över den vita stadens territorium. BudbÀraren kan nÄ sin allierade general eller bli fÄngad av fienden. FrÄgan Àr: finns det en sÄdan sekvens av kommunikation mellan de röda generalerna (sekvens av sÀndning av budbÀrare frÄn A1 till A2 och vice versa frÄn A2 till A1), dÀr de garanterat kommer överens om att attackera klockan X. HÀr under garantier förstÄs att bÄda generalerna kommer att ha entydig bekrÀftelse pÄ att den allierade (den andra generalen) verkligen attackerar pÄ den bestÀmda tiden X.

Anta att A1 skickar en budbÀrare till A2 med meddelandet: "LÄt oss attackera idag vid midnatt!" Generalen A1 kan inte attackera utan bekrÀftelse frÄn general A2. Om budbÀraren frÄn A1 har nÄtt fram, skickar general A2 en bekrÀftelse med meddelandet: "Ja, lÄt oss övermannar de vita idag." Men nu vet general A2 inte om hans budbÀrare har kommit fram eller inte, han har ingen garanti för att attacken blir simultan. Nu mÄste general A2 Äterigen fÄ en bekrÀftelse.

Om vi fortsÀtter att beskriva deras kommunikation kommer vi att inse följande: hur mÄnga cykler av meddelandeutbyte som helst finns det inget sÀtt att garantera att bÄda generalerna fÄr veta att deras meddelanden har mottagits (under förutsÀttning att nÄgon av budbÀrarna kan fÄngas).

Problemet med de tvÄ generalerna Àr en utmÀrkt illustration av ett mycket enkelt distribuerat system, dÀr det finns tvÄ noder med osÀker kommunikation. Det innebÀr att vi inte har 100 % garanti för att de synkroniseras. Om liknande problem pÄ en större skala fortsÀtter i artikeln.

Vi introducerar begreppet distribuerade system.

Ett distribuerat system Àr en grupp datorer (som vi kommer att kalla noder) som kan utbyta meddelanden. Varje enskild nod Àr en viss autonom enhet. En nod kan sjÀlvstÀndigt hantera uppgifter, men för att interagera med andra noder mÄste den skicka och ta emot meddelanden.

Hur meddelanden konkret implementeras, vilka protokoll som anvĂ€nds — det Ă€r inte det som intresserar oss i detta sammanhang. Det viktiga Ă€r att noder i det distribuerade systemet kan utbyta data med varandra genom att skicka meddelanden.

SjÀlva definitionen verkar inte sÀrskilt komplicerad, men man mÄste beakta att ett distribuerat system har en rad attribut som kommer att vara viktiga för oss.

Attribut för distribuerade system

  1. Samtidighet – möjligheten till samtidiga eller konkurrerande hĂ€ndelser i systemet. Dessutom kommer vi att anta att hĂ€ndelser som intrĂ€ffar pĂ„ tvĂ„ olika noder potentiellt Ă€r konkurrerande sĂ„ lĂ€nge vi inte har nĂ„gon tydlig ordning pĂ„ hĂ€ndelserna. Och vanligtvis har vi ingen sĂ„dan ordning.
  2. Avsaknad av globala klockor. Vi har ingen tydlig ordning pĂ„ hĂ€ndelserna pĂ„ grund av avsaknaden av globala klockor. I den vanliga mĂ€nniskovĂ€rlden Ă€r vi vana vid att ha klockor och en absolut tid. Allt förĂ€ndras nĂ€r det handlar om distribuerade system. Även de mest precisa atomklockorna har en driftskiftning, och det Ă€r möjligt att vi inte kan sĂ€ga vilket av de tvĂ„ hĂ€ndelserna som intrĂ€ffade först. DĂ€rför kan vi inte heller lita pĂ„ tid.
  3. Oberoende fel i nodernas system. Det finns Ànnu ett problem: nÄgot kan gÄ fel helt enkelt eftersom vÄra noder inte Àr eviga. En hÄrddisk kan gÄ sönder, en virtuell maskin i molnet kan starta om, nÀtverket kan blinkar och meddelanden gÄr förlorade. Dessutom Àr det möjligt att noderna fungerar, men samtidigt arbetar mot systemet. Den sista klassen av problem har till och med fÄtt ett eget namn: problemet med byzantinska generaler. Det mest kÀnda exemplet pÄ ett distribuerat system som har detta problem Àr Blockchain. Men idag kommer vi inte att gÄ in pÄ denna specifika klass av problem. Vi kommer att fokusera pÄ situationer dÀr en eller flera noder helt enkelt kan gÄ ner.
  4. Kommunikationsmodeller (meddelandeutbytesmodeller) mellan noder. Vi har redan konstaterat att noder kommunicerar genom att utbyta meddelanden. Det finns tvÄ kÀnda modeller för meddelandeutbyte: synkront och asynkront.

Kommunikationsmodeller mellan noder i distribuerade system

Synkron modell – vi vet med sĂ€kerhet att det finns en slutlig kĂ€nd tidsdelta, inom vilken ett meddelande garanterat nĂ„r frĂ„n en nod till en annan. Om denna tid har gĂ„tt och meddelandet inte har kommit, kan vi utan tvekan sĂ€ga att noden har slutat fungera. I en sĂ„dan modell har vi en förutsĂ€gbar vĂ€ntetid.

Asynkron modell – i asynkrona modeller anser vi att vĂ€ntetiden Ă€r Ă€ndlig, men det finns ingen tidsdelta efter vilken vi kan garantera att noden har slutat fungera. Det vill sĂ€ga, vĂ€ntetiden för ett meddelande frĂ„n en nod kan vara hur lĂ„ng som helst. Detta Ă€r en viktig definition och vi kommer att diskutera det vidare.

Begreppet konsensus i distribuerade system

Innan vi formellt definierar begreppet konsensus, lĂ„t oss övervĂ€ga ett exempel pĂ„ en situation dĂ€r vi behöver det, nĂ€mligen – State Machine Replication.

Vi har en viss distribuerad logg. Vi skulle vilja att den Àr konsekvent och innehÄller identiska data pÄ alla noder i det distribuerade systemet. NÀr nÄgon av noderna fÄr veta ett nytt vÀrde som de tÀnker skriva till loggen, blir det deras uppgift att föreslÄ detta vÀrde för alla andra noder, sÄ att loggen uppdateras pÄ alla noder, och systemet gÄr in i ett nytt konsekvent tillstÄnd. Det Àr viktigt att noderna kommer överens med varandra: alla noder har enats om att det föreslagna nya vÀrdet Àr korrekt, alla noder har accepterat detta vÀrde, och först dÄ kan alla skriva det nya vÀrdet till loggen.

Med andra ord: ingen av noderna har invĂ€nt att de har mer aktuell information och att det föreslagna vĂ€rdet Ă€r felaktigt. Överenskommelsen mellan noderna och enigheten om det enhetliga godtagna vĂ€rdet Ă€r vad konsensus innebĂ€r i ett distribuerat system. Framöver kommer vi att diskutera algoritmer som gör det möjligt för det distribuerade systemet att garantera att konsensus nĂ„s.
Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system
Mer formellt kan vi definiera algoritmen för att uppnÄ konsensus (eller helt enkelt konsensusalgoritm) som en viss funktion som förvandlar ett distribuerat system frÄn tillstÄnd A till tillstÄnd B. Detta tillstÄnd mÄste accepteras av alla noder, och alla noder mÄste kunna bekrÀfta det. Som det visar sig Àr denna uppgift inte sÄ trivial som den kan verka vid första anblick.

Egenskaper hos konsensusalgoritmen

Konsensusalgoritmen mÄste ha tre egenskaper för att systemet ska fortsÀtta existera och ha nÄgot framsteg i övergÄngen mellan tillstÄnd:

  1. Överenskommelse – alla korrekt fungerande noder mĂ„ste acceptera samma vĂ€rde (i artiklar kallas denna egenskap ocksĂ„ för safety property). Alla noder som för nĂ€rvarande fungerar (inte har kraschat eller tappat kontakten med de andra) mĂ„ste nĂ„ en överenskommelse och acceptera ett slutgiltigt gemensamt vĂ€rde.

    HÀr Àr det viktigt att förstÄ att noderna i det distribuerade systemet vi diskuterar strÀvar efter att komma överens. Det vill sÀga, vi pratar nu om system dÀr nÄgot kan fungera fel (till exempel att en nod kraschar), men i detta system finns det absolut inga noder som avsiktligt arbetar emot andra (den byzantinska generalens problem). Tack vare denna egenskap förblir systemet konsistent.

  2. Integritet – om alla korrekt fungerande noder erbjuder samma vĂ€rde v, mĂ„ste varje korrekt fungerande nod acceptera detta vĂ€rde v.
  3. Avslutning – alla korrekt fungerande noder kommer till slut att acceptera ett visst vĂ€rde (liveness property), vilket gör det möjligt för algoritmen att ha framsteg i systemet. Varje enskild korrekt fungerande nod mĂ„ste förr eller senare acceptera det slutgiltiga vĂ€rdet och bekrĂ€fta detta: "För mig Ă€r detta vĂ€rde sant, jag hĂ„ller med hela systemet."

Exempel pÄ konsensusalgoritmens funktion

Tills dessa egenskaper hos algoritmen Àr helt förstÄeliga, lÄt oss illustrera med ett exempel hur de enklaste konsensusalgoritmerna i ett system med en synkron modell för meddelandeutbyte fungerar, dÀr alla noder fungerar som de ska, meddelanden inte gÄr förlorade och inget gÄr sönder (kan detta verkligen hÀnda?).

  1. Allt börjar med ett förslag om hand och hjÀrta (Propose). Anta att en klient har anslutit sig till noden kallad "Nod 1" och startat en transaktion genom att skicka ett nytt vÀrde - O. FrÄn och med nu kommer vi att kalla "Nod 1" proposer. Som proposer mÄste "Nod 1" nu meddela hela systemet att den har nya data, och den skickar meddelanden till alla andra noder: "Titta! Jag har fÄtt vÀrdet 'O', och jag vill att ni ocksÄ ska bekrÀfta att ni kommer att skriva 'O' i er logg."

    Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

  2. NÀsta steg Àr omröstning om det föreslagna vÀrdet (Voting). Varför behövs det? Det kan hÀnda att andra noder har fÄtt mer aktuella uppgifter, och de kan ha information om samma transaktion.

    Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

    NÀr noden "Nod 1" skickar sitt förslag, kontrollerar de andra noderna sina loggar för uppgifter om denna hÀndelse. Om det inte finns nÄgra motsÀgelser, förklarar noderna: "Ja, jag har ingen annan information om denna hÀndelse. VÀrdet 'O' Àr den senaste information vi har fÄtt."

    I annat fall kan noderna svara "Nod 1": "Lyssna! Jag har mer aktuell information om denna transaktion. Inte 'O', utan nÄgot bÀttre."

    Under omröstningen kommer noderna fram till en lösning: antingen accepterar alla ett vÀrde eller sÄ röstar nÄgon emot, och anger att de har mer aktuell information.

  3. Om omröstningen har genomförts framgÄngsrikt och alla var "för", gÄr systemet vidare till ett nytt steg - acceptans av vÀrdet (Accept). "Nod 1" samlar alla svar frÄn andra noder och meddelar: "Alla har kommit överens om vÀrdet 'O'! Nu förklarar jag officiellt att 'O' Àr vÄrt nya vÀrde som gÀller för alla! Skriv ner det i er bok, glöm inte. Skriv i er logg!"

    Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

  4. Övriga noder skickar en bekrĂ€ftelse (Accepted) pĂ„ att de har skrivit ner vĂ€rdet 'O', inget nytt har kommit in under den tiden (en slags tvĂ„fasesbekrĂ€ftelse). Efter denna betydelsefulla hĂ€ndelse anser vi att den distribuerade transaktionen har genomförts.
    Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system

SÄledes bestÄr konsensusalgoritmen i enkla fall av fyra steg: föreslÄ, omröstning (voting), acceptans (accept), bekrÀftelse av acceptans (accepted).

Om vi inte kan nÄ en överenskommelse i nÄgot steg, startar algoritmen om, med hÀnsyn till den information som noderna som vÀgrar att bekrÀfta det föreslagna vÀrdet kommer att tillhandahÄlla.

Konsensusalgoritm i ett asynkront system

Tidigare har allt varit enkelt, eftersom vi har talat om en synkron kommunikationsmodell. Men vi vet ju att vi i den moderna vÀrlden Àr vana vid att göra allt asynkront. Hur fungerar dÄ en liknande algoritm i ett system med en asynkron meddelandemodell, dÀr vi anser att vÀntetiden för ett svar frÄn en nod kan vara hur lÄng som helst (för att nÀmna ett exempel, en nod som gÄr ner kan ocksÄ ses som ett fall dÀr noden kan svara hur lÀnge som helst).

Nu nÀr vi vet hur konsensusalgoritmen fungerar i princip, en frÄga till de nyfikna lÀsarna som har kommit hit: hur mÄnga noder i ett system med N noder som har en asynkron meddelandemodell kan gÄ ner, sÄ att systemet fortfarande kan nÄ konsensus?

Det rÀtta svaret och motiveringen finns under spoilern.Det rÀtta svaret: 0. Om Àven en nod i ett asynkront system gÄr ner, kan systemet inte nÄ konsensus. Detta pÄstÄende bevisades i en vÀlkÀnd sats inom vissa kretsar, FLP-teoremet (1985, Fischer, Lynch, Paterson, referens till originalet i slutet av artikeln): "Omöjligheten att nÄ distribuerad konsensus vid nedgÄng av minst en nod."
Schrödingers katt utan lÄda: konsensusproblemet i distribuerade system
Grabbar, dÄ har vi ett problem, vi Àr ju vana vid att allt Àr asynkront. Och hÀr Àr det sÄ. Hur ska vi gÄ vidare?

Vi har just pratat om teori, om matematik. Vad betyder "konsensus kan inte nĂ„s" nĂ€r vi översĂ€tter frĂ„n matematiskt sprĂ„k till vĂ„rt – ingenjörssprĂ„k? Det betyder att "det alltid kan finnas fall dĂ€r konsensus inte kan nĂ„s". Vad Ă€r detta fall?

Det handlar just om brott mot liveness property som nÀmndes tidigare. Vi har ingen gemensam överenskommelse, och systemet kan inte göra framsteg (kan inte avslutas inom en begrÀnsad tid) nÀr vi inte har svar frÄn alla noder. Eftersom vi i ett asynkront system inte har förutsÀgbart svarstid, kan vi inte veta om en nod har gÄtt ner eller bara svarar lÄngsamt.

Men i praktiken kan vi hitta en lösning. LÄt vÄr algoritm kunna fungera lÀnge vid fel (potentiellt kan den fungera oÀndligt). Men i de flesta situationer, nÀr de flesta noder fungerar korrekt, kommer vi att ha framsteg i systemet.

I praktiken hanterar vi delvis synkrona kommunikationsmodeller. Delvis synkronitet förstÄs sÄ att vi i allmÀnhet har en asynkron modell, men formellt introduceras en viss term "global stabilization time" för en viss tidpunkt.

Denna tidpunkt behöver inte infalla under en obestÀmd tid, men en dag mÄste den intrÀffa. En virtuell vÀckarklocka kommer att ringa, och frÄn det ögonblicket kan vi förutsÀga tidsdifferensen för att meddelandena ska nÄ fram. FrÄn det ögonblicket omvandlas systemet frÄn asynkront till synkront. I praktiken hanterar vi just sÄdana system.

Paxos-algoritmen löser konsensusproblem

Paxos Àr en familj algoritmer som löser konsensusproblemet för delvis synkrona system, under förutsÀttning att vissa noder kan gÄ ner. Författaren av Paxos Àr Leslie Lamport. Han föreslog ett formellt bevis pÄ existensen och korrektheten av algoritmen 1989.

Men beviset visade sig vara lÄngt ifrÄn trivialt. Den första publikationen slÀpptes först 1998 (33 sidor) med en beskrivning av algoritmen. Det visade sig att den var oerhört svÄr att förstÄ, och 2001 publicerades en förklaring till artikeln som tog 14 sidor. OmfÄnget av publikationerna anges för att visa att konsensusproblemet faktiskt Àr ganska komplicerat, och bakom sÄdana algoritmer ligger ett enormt arbete av de smartaste mÀnniskorna.

Intressant nog pÄpekade Leslie Lamport sjÀlv i sin förelÀsning att det i den andra förklarande artikeln finns ett pÄstÄende, en rad (han specificerade inte vilken), som kan tolkas pÄ olika sÀtt. Och pÄ grund av detta fungerar mÄnga moderna implementationer av Paxos inte helt korrekt.

En detaljerad genomgÄng av hur Paxos fungerar skulle krÀva mer Àn en artikel, sÄ jag ska försöka kortfattat förmedla huvudidén av algoritmen. I lÀnkarna i slutet av min artikel hittar du material för vidare fördjupning i detta Àmne.

Roller i Paxos

I Paxos-algoritmen finns begreppet roller. Vi ska titta pÄ tre huvudroller (det finns modifieringar med ytterligare roller):

  1. Proposers (termer som ledare eller samordnare kan ocksÄ förekomma). Dessa Àr killarna som fÄr veta om ett nytt vÀrde frÄn anvÀndaren och tar pÄ sig rollen som ledare. Deras uppgift Àr att starta en runda av erbjudanden om det nya vÀrdet och koordinera de vidare ÄtgÀrderna av noderna. Paxos tillÄter att det finns flera ledare i vissa situationer.
  2. Acceptorer (Röstare). Dessa Àr noder som röstar för att anta eller avvisa ett visst vÀrde. Deras roll Àr mycket viktig, eftersom det Àr upp till dem att avgöra: vilket tillstÄnd systemet kommer att gÄ över till (eller inte gÄ över till) efter nÀsta steg av konsensusalgoritmen.
  3. LÀrande noder. Noder som bara tar emot och registrerar det nya antagna vÀrdet nÀr systemets tillstÄnd har Àndrats. De fattar inga beslut, utan fÄr bara data och kan ge dem till slutanvÀndaren.

En nod kan kombinera flera roller i olika situationer.

Begreppet kvorum

Vi antar att vi har ett system av N noder. Och av dem kan högst F noder gÄ ner. Om F noder gÄr ner, betyder det att vi i klustret mÄste ha minst 2F + 1 acceptornoder.

Detta Àr nödvÀndigt sÄ att vi alltid, Àven i den sÀmsta situationen, har en majoritet av 'goda', korrekt fungerande noder. Det vill sÀga F + 1 goda noder som har enats, och det slutliga vÀrdet kommer att antas. Annars kan det uppstÄ en situation dÀr olika lokala grupper antagit olika vÀrden och inte kan enas. DÀrför behöver vi en absolut majoritet för att vinna omröstningen.

Den allmÀnna idén bakom Paxos konsensusalgoritm

Paxos-algoritmen omfattar tvÄ stora faser, som i sin tur delas upp i tvÄ steg vardera:

  1. Fas 1a: Förbered. I förberedelseskedet meddelar ledaren (proposer) alla noder: "Vi inleder ett nytt röstningsskede. Vi har en ny omgÄng. Nummer pÄ denna omgÄng Àr n. Nu börjar vi rösta." Just nu meddelar han bara början av en ny cykel, men han informerar inte om nÄgot nytt vÀrde. MÄlet med detta steg Àr att initiera en ny omgÄng och att informera alla om dess unika nummer. OmgÄngsnumret Àr viktigt, det mÄste vara ett vÀrde som Àr större Àn alla tidigare röstningsnummer frÄn alla tidigare ledare. Eftersom det Àr tack vare omgÄngsnumret som andra noder i systemet kommer att förstÄ hur aktuella ledarens data Àr. Det Àr möjligt att andra noder redan har röstningsresultat frÄn mycket senare omgÄngar och de kommer helt enkelt att berÀtta för ledaren att han har halkat efter.
  2. Fas 1b: Löfte. NÀr acceptor-noderna har mottagit nummer för den nya röstningsomgÄngen kan tvÄ utfall intrÀffa:
    • Nummer n för den nya omröstningen Ă€r större Ă€n numret för nĂ„gon tidigare omröstning dĂ€r acceptorn deltog. DĂ„ skickar acceptorn ett löfte till ledaren om att han inte kommer att delta i nĂ„gra fler omröstningar med ett lĂ€gre nummer Ă€n n. Om acceptorn redan har röstat för nĂ„got (d.v.s. han har redan accepterat ett vĂ€rde i det andra steget), bifogar han det accepterade vĂ€rdet och röstningsnumret för den omröstning han delade i.
    • Å andra sidan, om acceptorn redan kĂ€nner till en omröstning med ett större nummer, kan han helt enkelt ignorera förberedelsesteget och inte svara ledaren.
  3. Fas 2a: Acceptera. Ledaren behöver vÀnta pÄ svar frÄn en kvorum (majoriteten av noderna i systemet) och, om tillrÀckligt mÄnga svar har mottagits, har han tvÄ möjliga utfall:
    • Vissa av acceptorerna har skickat vĂ€rden som de redan har röstat för. I detta fall vĂ€ljer ledaren vĂ€rdet frĂ„n omröstningen med det högsta numret. LĂ„t oss kalla detta vĂ€rde x, och han skickar ett meddelande till alla noder i formatet: "Accept (n, x)", dĂ€r det första vĂ€rdet Ă€r röstningsnumret frĂ„n hans egen Propose-step, och det andra vĂ€rdet Ă€r det som alla samlades för, det vill sĂ€ga vĂ€rdet som vi faktiskt röstar för.
    • Om ingen av acceptorerna har skickat nĂ„gra vĂ€rden och bara lovat att rösta i denna omgĂ„ng, kan ledaren föreslĂ„ dem att rösta pĂ„ sitt vĂ€rde, det vĂ€rde som gjorde att han överhuvudtaget blev ledare. LĂ„t oss kalla det y. Han skickar ett meddelande till alla noder av typen: "Accept (n, y)", i analogi med det föregĂ„ende utfallet.
  4. Fas 2b: GodkĂ€ndVidare, acceptornoderna, nĂ€r de fĂ„r meddelandet "Accept(
)" frĂ„n ledaren, godkĂ€nner det endast om de inte har lovat nĂ„gon (annan) ledare att delta i omröstningar med nummer pĂ„ omgĂ„ngen n’ > n, annars ignorerar de begĂ€ran om bekrĂ€ftelse.

    Om ledaren fÄr svar frÄn majoriteten av noderna, och alla har bekrÀftat det nya vÀrdet, betraktas det nya vÀrdet som antaget. Hurra! Om majoriteten inte nÄs eller det finns noder som vÀgrar att acceptera det nya vÀrdet, börjar allt om.

SÄ hÀr fungerar Paxos-algoritmen. Varje steg har mÄnga detaljer; vi har nÀstan inte berört olika typer av fel, problem med flera ledare och mycket mer, men syftet med denna artikel Àr bara att pÄ hög nivÄ introducera lÀsaren till vÀrlden av distribuerade berÀkningar.

Det Àr ocksÄ vÀrt att notera att Paxos inte Àr den enda av sitt slag, det finns andra algoritmer, till exempel Raft, men det Àr en annan artikel.

LÀnkar till material för vidare studier

NivÄ "nybörjare":

NivÄ "Leslie Lamport":

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster