ProHoster > Blogs > AdministrÄcija > Å rÄdingera kaÄ·is bez kastes: vienprÄtÄ«bas problÄma sadalÄ«tajÄs sistÄmÄs
Å rÄdingera kaÄ·is bez kastes: vienprÄtÄ«bas problÄma sadalÄ«tajÄs sistÄmÄs
TÄtad, iedomÄsimies. IstabÄ ir aizslÄgti 5 kaÄ·i, un, lai aizietu pamodinÄt saimnieku, viÅiem visiem par to jÄvienojas savÄ starpÄ, jo durvis var atvÄrt tikai pieci no tÄm atspieduÅ”ies. Ja viens no kaÄ·iem ir Å rÄdingera kaÄ·is, bet pÄrÄjie kaÄ·i nezina par viÅa lÄmumu, rodas jautÄjums: "KÄ viÅi to var izdarÄ«t?"
Å ajÄ rakstÄ es jums vienkÄrÅ”i pastÄstÄ«Å”u par sadalÄ«to sistÄmu pasaules teorÄtisko sastÄvdaļu un to darbÄ«bas principiem. Es arÄ« virspusÄji apskatÄ«Å”u galveno Paxos ideju.
Kad izstrÄdÄtÄji izmanto mÄkoÅa infrastruktÅ«ras, dažÄdas datu bÄzes un strÄdÄ klasteros ar lielu skaitu mezglu, viÅi ir pÄrliecinÄti, ka dati bÅ«s pilnÄ«gi, droÅ”i un vienmÄr pieejami. Bet kur garantijas?
BÅ«tÄ«bÄ mÅ«su garantijas ir piegÄdÄtÄju garantijas. Tie dokumentÄcijÄ aprakstÄ«ti Å”Ädi: "Å is pakalpojums ir diezgan uzticams, tam ir noteikts SLA, neuztraucieties, viss darbosies sadalÄ«ti, kÄ jÅ«s gaidÄt."
Mums ir tendence ticÄt labÄkajam, jo āāgudri puiÅ”i no lielajiem uzÅÄmumiem mums apliecinÄja, ka viss bÅ«s labi. MÄs neuzdodam jautÄjumu: kÄpÄc patiesÄ«bÄ tas vispÄr var darboties? Vai ir kÄds formÄls pamatojums Å”Ädu sistÄmu pareizai darbÄ«bai?
Es nesen devos uz IzkliedÄtÄs skaitļoÅ”anas skola un mani ļoti iedvesmoja Ŕī tÄma. Lekcijas skolÄ bija vairÄk kÄ skaitļoÅ”anas nodarbÄ«bas, nevis kaut kas saistÄ«ts ar datorsistÄmÄm. Bet tieÅ”i Å”Ädi savulaik tika pierÄdÄ«ti svarÄ«gÄkie algoritmi, kurus lietojam ikdienÄ, pat nezinot.
LielÄkÄ daļa mÅ«sdienu sadalÄ«to sistÄmu izmanto Paxos konsensa algoritmu un tÄ dažÄdÄs modifikÄcijas. Pats forÅ”Äkais ir tas, ka Ŕī algoritma pamatotÄ«bu un principÄ arÄ« paÅ”u iespÄjamÄ«bu var pierÄdÄ«t vienkÄrÅ”i ar pildspalvu un papÄ«ru. PraksÄ algoritms tiek izmantots lielÄs sistÄmÄs, kas darbojas ar lielu skaitu mezglu mÄkoÅos.
Viegla ilustrÄcija tam, kas tiks apspriests tÄlÄk: divu Ä£enerÄļu uzdevumsApskatÄ«sim iesildÄ«Å”anos divu Ä£enerÄļu uzdevums.
Mums ir divas armijas ā sarkanÄ un baltÄ. Baltais karaspÄks bÄzÄjas aplenktajÄ pilsÄtÄ. AbÄs pilsÄtas pusÄs atrodas sarkanÄs vienÄ«bas Ä£enerÄļu A1 un A2 vadÄ«bÄ. Sarkanmates uzdevums ir uzbrukt baltajai pilsÄtai un uzvarÄt. TomÄr katra sarkanÄ Ä£enerÄļa armija atseviŔķi ir mazÄka par balto armiju.
Uzvaras nosacÄ«jumi sarkanajiem: abiem Ä£enerÄļiem jÄuzbrukumÄ vienlaicÄ«gi, lai bÅ«tu skaitliskais pÄrsvars pÄr baltajiem. Lai to izdarÄ«tu, Ä£enerÄļiem A1 un A2 ir jÄvienojas savÄ starpÄ. Ja visi uzbruks atseviŔķi, sarkanmates zaudÄs.
Lai panÄktu vienoÅ”anos, Ä£enerÄļi A1 un A2 var nosÅ«tÄ«t viens pie otra sÅ«tÅus caur baltÄs pilsÄtas teritoriju. ZiÅnesis var veiksmÄ«gi sasniegt sabiedroto Ä£enerÄli vai arÄ« to var pÄrtvert ienaidnieks. JautÄjums: vai starp sarkanmatainajiem Ä£enerÄļiem ir tÄda saziÅas secÄ«ba (sÅ«tÄ«jumu nosÅ«tÄ«Å”anas secÄ«ba no A1 uz A2 un otrÄdi no A2 uz A1), kurÄ viÅiem tiek garantÄta vienoÅ”anÄs par uzbrukumu stundÄ X. LÅ«k, garantijas nozÄ«mÄ, ka abiem Ä£enerÄļiem bÅ«s nepÄrprotams apstiprinÄjums, ka sabiedrotais (cits Ä£enerÄlis) noteikti uzbruks noteiktajÄ laikÄ X.
PieÅemsim, ka A1 nosÅ«ta vÄstuli uz A2 ar ziÅojumu: āUzbruksim Å”odien pusnaktÄ«!ā Ä¢enerÄlis A1 nevar uzbrukt bez Ä£enerÄļa A2 apstiprinÄjuma. Ja ir ieradies sÅ«tnis no A1, tad Ä£enerÄlis A2 nosÅ«ta apstiprinÄjumu ar ziÅojumu: "JÄ, Å”odien nogalinÄsim baltos." Bet tagad Ä£enerÄlis A2 nezina, vai viÅa sÅ«tnis ir ieradies vai nav, viÅam nav garantijas, vai uzbrukums bÅ«s vienlaikus. Tagad General A2 atkal ir nepiecieÅ”ams apstiprinÄjums.
Ja mÄs sÄ«kÄk aprakstam viÅu saziÅu, kļūst skaidrs, ka neatkarÄ«gi no tÄ, cik daudz ziÅojumu apmaiÅas ciklu ir, nevar garantÄt, ka abi Ä£enerÄļi ir saÅÄmuÅ”i savus ziÅojumus (pieÅemot, ka kÄdu no sÅ«tÅiem var pÄrtvert).
Divu Ä£enerÄļu problÄma ir lielisks piemÄrs ļoti vienkÄrÅ”ai sadalÄ«tai sistÄmai, kurÄ ir divi mezgli ar neuzticamu saziÅu. Tas nozÄ«mÄ, ka mums nav 100% garantijas, ka tie ir sinhronizÄti. LÄ«dzÄ«gas problÄmas plaÅ”ÄkÄ mÄrogÄ aplÅ«kotas vÄlÄk rakstÄ.
IepazÄ«stinÄm ar sadalÄ«to sistÄmu jÄdzienu
IzkliedÄtÄ sistÄma ir datoru grupa (turpmÄk tos sauksim par mezgliem), kas var apmainÄ«ties ar ziÅojumiem. Katrs atseviŔķais mezgls ir sava veida autonoma vienÄ«ba. Mezgls var pats apstrÄdÄt uzdevumus, taÄu, lai sazinÄtos ar citiem mezgliem, tam ir jÄnosÅ«ta un jÄsaÅem ziÅojumi.
KÄ tieÅ”i tiek Ä«stenoti ziÅojumi, kÄdi protokoli tiek izmantoti - Å”ajÄ kontekstÄ tas mÅ«s neinteresÄ. Ir svarÄ«gi, lai sadalÄ«tas sistÄmas mezgli varÄtu apmainÄ«ties ar datiem savÄ starpÄ, nosÅ«tot ziÅojumus.
Pati definÄ«cija neizskatÄs Ä«paÅ”i sarežģīta, taÄu jÄÅem vÄrÄ, ka izplatÄ«tajai sistÄmai ir vairÄki atribÅ«ti, kas mums bÅ«s svarÄ«gi.
SadalÄ«to sistÄmu atribÅ«ti
VienlaicÄ«ba ā vienlaicÄ«gu vai vienlaicÄ«gu notikumu iespÄjamÄ«ba sistÄmÄ notikt. TurklÄt mÄs uzskatÄ«sim, ka notikumi, kas notiek divos dažÄdos mezglos, ir potenciÄli vienlaicÄ«gi, ja vien mums nav skaidras Å”o notikumu raÅ”anÄs secÄ«bas. Bet, kÄ likums, mums tÄ nav.
Nav globÄlÄ pulksteÅa. Mums nav skaidras notikumu secÄ«bas globÄlÄ pulksteÅa trÅ«kuma dÄļ. ParastajÄ cilvÄku pasaulÄ mÄs esam pieraduÅ”i pie tÄ, ka mums ir absolÅ«ti pulksteÅi un laiks. Viss mainÄs, kad runa ir par sadalÄ«tÄm sistÄmÄm. Pat Ä«paÅ”i precÄ«ziem atompulksteÅiem ir novirze, un var bÅ«t situÄcijas, kad mÄs nevaram pateikt, kurÅ” no diviem notikumiem notika pirmais. TÄpÄc arÄ« uz laiku nevaram paļauties.
SistÄmas mezglu neatkarÄ«ga kļūme. Ir vÄl viena problÄma: kaut kas var noiet greizi tikai tÄpÄc, ka mÅ«su mezgli nav mūžīgi. Cietais disks var neizdoties, virtuÄlÄ maŔīna mÄkonÄ« var atsÄknÄties, tÄ«kls var mirgot un ziÅojumi tiks zaudÄti. TurklÄt var bÅ«t situÄcijas, kad mezgli darbojas, bet tajÄ paÅ”Ä laikÄ darbojas pret sistÄmu. PÄdÄjÄ problÄmu klase pat saÅÄma atseviŔķu nosaukumu: problÄma Bizantijas Ä£enerÄļi. PopulÄrÄkais izplatÄ«tÄs sistÄmas piemÄrs ar Å”o problÄmu ir Blockchain. Bet Å”odien mÄs neapskatÄ«sim Å”o Ä«paÅ”o problÄmu klasi. MÅ«s interesÄs situÄcijas, kurÄs var neizdoties vienkÄrÅ”i viens vai vairÄki mezgli.
KomunikÄcijas modeļi (ziÅojumapmaiÅas modeļi) starp mezgliem. MÄs jau esam noskaidrojuÅ”i, ka mezgli sazinÄs, apmainoties ar ziÅojumiem. Ir divi labi zinÄmi ziÅojumapmaiÅas modeļi: sinhronais un asinhronais.
KomunikÄcijas modeļi starp mezgliem sadalÄ«tajÄs sistÄmÄs
Sinhronais modelis ā mÄs noteikti zinÄm, ka ir zinÄms ierobežots laika delta, kura laikÄ ziÅojums tiek garantÄts no viena mezgla uz otru. Ja Å”is laiks ir pagÄjis un ziÅa nav pienÄkusi, varam droÅ”i teikt, ka mezgls ir neizdevies. Å ajÄ modelÄ« mums ir paredzami gaidÄ«Å”anas laiki.
Asinhronais modelis ā asinhronajos modeļos mÄs uzskatÄm, ka gaidÄ«Å”anas laiks ir ierobežots, bet nav tÄda laika delta, pÄc kuras mÄs varÄtu garantÄt, ka mezgls ir atteicies. Tie. ZiÅojuma gaidÄ«Å”anas laiks no mezgla var bÅ«t patvaļīgi garÅ”. Å Ä« ir svarÄ«ga definÄ«cija, un mÄs par to runÄsim tÄlÄk.
VienprÄtÄ«bas jÄdziens sadalÄ«tÄs sistÄmÄs
Pirms formÄli definÄjam konsensa jÄdzienu, aplÅ«kosim piemÄru situÄcijai, kurÄ mums tas ir nepiecieÅ”ams, proti - StÄvokļa maŔīnas replikÄcija.
Mums ir izplatÄ«ts žurnÄls. MÄs vÄlamies, lai tas bÅ«tu konsekvents un satur identiskus datus par visiem sadalÄ«tÄs sistÄmas mezgliem. Kad viens no mezgliem uzzina jaunu vÄrtÄ«bu, ko tas ierakstÄ«s žurnÄlÄ, tÄ uzdevums ir piedÄvÄt Å”o vÄrtÄ«bu visiem pÄrÄjiem mezgliem, lai žurnÄls tiktu atjauninÄts visos mezglos un sistÄma pÄrietu uz jaunu konsekventu stÄvokli. Å ajÄ gadÄ«jumÄ ir svarÄ«gi, lai mezgli savÄ starpÄ vienotos: visi mezgli piekrÄ«t, ka piedÄvÄtÄ jaunÄ vÄrtÄ«ba ir pareiza, visi mezgli pieÅem Å”o vÄrtÄ«bu, un tikai Å”ajÄ gadÄ«jumÄ visi var ierakstÄ«t jauno vÄrtÄ«bu žurnÄlÄ.
Citiem vÄrdiem sakot: neviens no mezgliem neiebilda, ka tam ir atbilstoÅ”Äka informÄcija, un piedÄvÄtÄ vÄrtÄ«ba bija nepareiza. VienoÅ”anÄs starp mezgliem un vienoÅ”anÄs par vienu pareizu pieÅemto vÄrtÄ«bu ir vienprÄtÄ«ba sadalÄ«tÄ sistÄmÄ. TÄlÄk mÄs runÄsim par algoritmiem, kas ļauj sadalÄ«tai sistÄmai garantÄt vienprÄtÄ«bu.
FormÄlÄk mÄs varam definÄt konsensa algoritmu (vai vienkÄrÅ”i konsensa algoritmu) kÄ noteiktu funkciju, kas pÄrsÅ«ta sadalÄ«to sistÄmu no stÄvokļa A uz stÄvokli B. TurklÄt Å”o stÄvokli pieÅem visi mezgli, un visi mezgli to var apstiprinÄt. KÄ izrÄdÄs, Å”is uzdevums nemaz nav tik triviÄls, kÄ Å”Ä·iet no pirmÄ acu uzmetiena.
Konsensa algoritma īpaŔības
Konsensa algoritmam ir jÄbÅ«t trim Ä«paŔībÄm, lai sistÄma turpinÄtu pastÄvÄt un panÄktu zinÄmu progresu, pÄrejot no stÄvokļa uz stÄvokli:
VienoÅ”anÄs ā visiem pareizi strÄdÄjoÅ”iem mezgliem jÄbÅ«t vienÄdiem (rakstos Ŕī Ä«paŔība tiek saukta arÄ« par droŔības Ä«paŔību). Visiem mezgliem, kas paÅ”laik darbojas (nav izgÄzuÅ”ies vai zaudÄjuÅ”i kontaktu ar citiem), ir jÄvienojas un jÄpieÅem kÄda galÄ«gÄ kopÄ«gÄ vÄrtÄ«ba.
Å eit ir svarÄ«gi saprast, ka sadalÄ«tÄs sistÄmas mezgli, kurus mÄs apsveram, vÄlas vienoties. Tas ir, mÄs tagad runÄjam par sistÄmÄm, kurÄs kaut kas var vienkÄrÅ”i neizdoties (piemÄram, kÄds mezgls neizdodas), bet Å”ajÄ sistÄmÄ noteikti nav mezglu, kas apzinÄti darbojas pret citiem (Bizantijas Ä£enerÄļu uzdevums). Pateicoties Å”ai Ä«paŔībai, sistÄma paliek konsekventa.
GodÄ«gums ā ja visi pareizi strÄdÄjoÅ”ie mezgli piedÄvÄ vienÄdu vÄrtÄ«bu v, kas nozÄ«mÄ, ka katram pareizi strÄdÄjoÅ”am mezglam ir jÄpieÅem Ŕī vÄrtÄ«ba v.
IzbeigÅ”ana ā visi pareizi strÄdÄjoÅ”ie mezgli ar laiku iegÅ«s noteiktu vÄrtÄ«bu (dzÄ«vÄ«bas Ä«paŔību), kas ļauj algoritmam progresÄt sistÄmÄ. Katram atseviŔķam pareizi strÄdÄjoÅ”am mezglam agrÄk vai vÄlÄk ir jÄpieÅem galÄ«gÄ vÄrtÄ«ba un tÄ jÄapstiprina: "Man Ŕī vÄrtÄ«ba ir patiesa, es piekrÄ«tu visai sistÄmai."
PiemÄrs tam, kÄ darbojas konsensa algoritms
Lai gan algoritma Ä«paŔības var nebÅ«t pilnÄ«gi skaidras. TÄpÄc ar piemÄru ilustrÄsim, kÄdus posmus sistÄmÄ ar sinhronÄs ziÅojumapmaiÅas modeli iziet vienkÄrÅ”Äkais konsensa algoritms, kurÄ visi mezgli funkcionÄ kÄ paredzÄts, ziÅojumi netiek zaudÄti un nekas nelÅ«zt (vai tieÅ”Äm tÄ notiek?).
Viss sÄkas ar laulÄ«bas piedÄvÄjumu (Propose). PieÅemsim, ka klients pieslÄdzÄs mezglam ar nosaukumu "Node 1" un sÄka darÄ«jumu, nododot mezglam jaunu vÄrtÄ«bu - O. TurpmÄk mÄs izsauksim "Node 1" piedÄvÄjums. KÄ ierosinÄtÄjs, āNode 1ā tagad ir jÄpaziÅo visai sistÄmai, ka tajÄ ir svaigi dati, un tas nosÅ«ta ziÅojumus visiem pÄrÄjiem mezgliem: āPaskatieties! NozÄ«me āOā man atnÄca, un es gribu to pierakstÄ«t! LÅ«dzu, apstipriniet, ka savÄ Å¾urnÄlÄ ierakstÄ«siet arÄ« āOā.
NÄkamais posms ir balsoÅ”ana par piedÄvÄto vÄrtÄ«bu (BalsoÅ”ana). Kam tas paredzÄts? Var gadÄ«ties, ka citi mezgli ir saÅÄmuÅ”i jaunÄku informÄciju, un tiem ir dati par to paÅ”u darÄ«jumu.
Kad mezgls āNode 1ā nosÅ«ta savu priekÅ”likumu, pÄrÄjie mezgli pÄrbauda savos žurnÄlos datus par Å”o notikumu. Ja nav pretrunu, mezgli paziÅo: āJÄ, man nav citu datu par Å”o notikumu. āOā vÄrtÄ«ba ir jaunÄkÄ informÄcija, ko esam pelnÄ«juÅ”i.
JebkurÄ citÄ gadÄ«jumÄ mezgli var atbildÄt uz āNode 1ā: āKlausieties! Man ir jaunÄki dati par Å”o darÄ«jumu. Nevis "O", bet kaut kas labÄks."
BalsoÅ”anas posmÄ mezgli pieÅem lÄmumu: vai nu viÅi visi pieÅem vienu un to paÅ”u vÄrtÄ«bu, vai arÄ« viens no tiem balso pret, norÄdot, ka viÅam ir jaunÄki dati.
Ja balsoÅ”anas kÄrta bija veiksmÄ«ga un visi bija par, tad sistÄma pÄriet uz jaunu posmu - VÄrtÄ«bas pieÅemÅ”ana. āNode 1ā apkopo visas atbildes no citiem mezgliem un ziÅo: āVisi vienojÄs par vÄrtÄ«bu āOā! Tagad es oficiÄli paziÅoju, ka āOā ir mÅ«su jaunÄ nozÄ«me, visiem vienÄda! Pierakstiet to savÄ mazajÄ grÄmatiÅÄ, neaizmirstiet. Pierakstiet to savÄ Å¾urnÄlÄ!ā
AtlikuÅ”ie mezgli nosÅ«ta apstiprinÄjumu (pieÅemts), ka ir pierakstÄ«juÅ”i vÄrtÄ«bu āOā; Å”ajÄ laikÄ nekas jauns nav nÄcis (sava āāveida divu fÄžu apÅemÅ”anÄs). PÄc Ŕī nozÄ«mÄ«gÄ notikuma uzskatÄm, ka izplatÄ«tais darÄ«jums ir pabeigts.
Ja kÄdÄ solÄ« nevarÄjÄm panÄkt vienoÅ”anos, tad algoritms sÄkas no jauna, Åemot vÄrÄ to mezglu sniegto informÄciju, kuri atteicÄs apstiprinÄt piedÄvÄto vÄrtÄ«bu.
Konsensa algoritms asinhronÄ sistÄmÄ
Pirms tam viss bija gludi, jo mÄs runÄjÄm par sinhronÄs ziÅojumapmaiÅas modeli. TaÄu mÄs zinÄm, ka mÅ«sdienu pasaulÄ esam pieraduÅ”i visu darÄ«t asinhroni. KÄ lÄ«dzÄ«gs algoritms darbojas sistÄmÄ ar asinhrono ziÅojumapmaiÅas modeli, kur mÄs uzskatÄm, ka atbildes gaidÄ«Å”anas laiks no mezgla var bÅ«t patvaļīgi garÅ” (starp citu, mezgla atteici var uzskatÄ«t arÄ« par piemÄru, kad mezgls var reaÄ£Ät patvaļīgi ilgu laiku).
Tagad, kad mÄs zinÄm, kÄ principÄ darbojas konsensa algoritms, jautÄjums tiem zinÄtkÄrajiem lasÄ«tÄjiem, kuri ir tikuÅ”i lÄ«dz Å”im: cik mezglu N mezglu sistÄmÄ ar asinhrono ziÅojuma modeli var neizdoties, lai sistÄma joprojÄm varÄtu panÄkt vienprÄtÄ«bu?
PareizÄ atbilde un pamatojums ir aiz spoilera.PareizÄ atbilde ir: 0. Ja pat viens mezgls asinhronÄ sistÄmÄ neizdodas, sistÄma nevarÄs panÄkt vienprÄtÄ«bu. Å is apgalvojums ir pierÄdÄ«ts FLP teorÄmÄ, kas ir labi zinÄma noteiktÄs aprindÄs (1985, Fischer, Lynch, Paterson, saite uz oriÄ£inÄlu raksta beigÄs): āNeiespÄjamÄ«ba panÄkt sadalÄ«tu vienprÄtÄ«bu, ja vismaz viens mezgls neizdodas. ā.
PuiÅ”i, tad mums ir problÄma, esam pieraduÅ”i, ka viss ir asinhroni. Un Å”eit tas ir. KÄ turpinÄt dzÄ«vot?
MÄs tikai runÄjÄm par teoriju, par matemÄtiku. Ko nozÄ«mÄ āvienprÄtÄ«bu nevar panÄktā, tulkojot no matemÄtikas valodas mÅ«sÄjÄ - inženierzinÄtnÄs? Tas nozÄ«mÄ, ka āne vienmÄr var sasniegtā, t.i. Ir gadÄ«jums, kad vienprÄtÄ«ba nav panÄkama. Kas tas par lietu?
Tas ir tieÅ”i iepriekÅ” aprakstÄ«tais dzÄ«vÄ«guma Ä«paŔību pÄrkÄpums. Mums nav kopÄ«gas vienoÅ”anÄs, un sistÄma nevar progresÄt (nevar pabeigt ierobežotÄ laikÄ), ja mums nav atbildes no visiem mezgliem. TÄ kÄ asinhronÄ sistÄmÄ mums nav paredzama reakcijas laika, un mÄs nevaram zinÄt, vai mezgls ir avarÄjis vai vienkÄrÅ”i prasa ilgu laiku, lai reaÄ£Ätu.
Bet praksÄ mÄs varam atrast risinÄjumu. Ä»aujiet mÅ«su algoritmam darboties ilgu laiku kļūmju gadÄ«jumÄ (iespÄjams, tas var darboties bezgalÄ«gi). Bet vairumÄ gadÄ«jumu, kad vairums mezglu darbojas pareizi, sistÄma progresÄs.
PraksÄ mÄs nodarbojamies ar daļÄji sinhroniem komunikÄcijas modeļiem. DaļÄjÄ sinhronija tiek saprasta Å”Ädi: vispÄrÄ«gÄ gadÄ«jumÄ mums ir asinhrons modelis, bet formÄli tiek ieviests noteikta laika momenta āglobÄlÄs stabilizÄcijas laikaā jÄdziens.
Å is laika brÄ«dis var nepienÄkt ilgi, bet kÄdu dienu tam ir jÄpienÄk. SkanÄs virtuÄlais modinÄtÄjs, un no Ŕī brīža mÄs varam paredzÄt laika delta, par kuru ziÅojumi tiks saÅemti. No Ŕī brīža sistÄma pÄrvÄrÅ”as no asinhronas uz sinhronu. PraksÄ mÄs strÄdÄjam tieÅ”i ar Å”ÄdÄm sistÄmÄm.
paxos ir algoritmu saime, kas atrisina vienprÄtÄ«bas problÄmu daļÄji sinhronÄm sistÄmÄm, Åemot vÄrÄ iespÄju, ka daži mezgli var neizdoties. Paxos autors ir Leslija Lamporta. ViÅÅ” 1989. gadÄ ierosinÄja formÄlu pierÄdÄ«jumu par algoritma esamÄ«bu un pareizÄ«bu.
TaÄu pierÄdÄ«jumi izrÄdÄ«jÄs nebÅ«t ne triviÄli. PirmÄ publikÄcija tika izdota tikai 1998. gadÄ (33 lappuses), kurÄ aprakstÄ«ts algoritms. KÄ izrÄdÄ«jÄs, to bija ÄrkÄrtÄ«gi grÅ«ti saprast, un 2001. gadÄ tika publicÄts raksta skaidrojums, kas aizÅÄma 14 lappuses. PublikÄciju apjoms dots, lai parÄdÄ«tu, ka patiesÄ«bÄ vienprÄtÄ«bas problÄma nebÅ«t nav vienkÄrÅ”a un aiz Å”Ädiem algoritmiem slÄpjas milzÄ«gs gudrÄko cilvÄku darbs.
Interesanti, ka pats Leslijs Lamports savÄ lekcijÄ atzÄ«mÄja, ka otrajÄ skaidrojoÅ”ajÄ rakstÄ ir viens apgalvojums, viena rindiÅa (viÅÅ” neprecizÄja, kura), ko var dažÄdi interpretÄt. Un Ŕī iemesla dÄļ liela daļa mÅ«sdienu Paxos implementÄciju nedarbojas pilnÄ«gi pareizi.
DetalizÄta Paksosa darba analÄ«ze prasÄ«s vairÄk nekÄ vienu rakstu, tÄpÄc mÄÄ£inÄÅ”u ļoti Ä«si izklÄstÄ«t algoritma galveno ideju. Mana raksta beigÄs esoÅ”ajÄs saitÄs jÅ«s atradÄ«sit materiÄlus turpmÄkai nirÅ”anai Å”ajÄ tÄmÄ.
Lomas uzÅÄmumÄ Paxos
Paxos algoritmam ir lomu koncepcija. ApsvÄrsim trÄ«s galvenÄs (ir modifikÄcijas ar papildu lomÄm):
PriekÅ”likumu iesniedzÄji (var lietot arÄ« terminus: vadÄ«tÄji vai koordinatori). Tie ir puiÅ”i, kuri uzzina par kÄdu jaunu vÄrtÄ«bu no lietotÄja un uzÅemas lÄ«dera lomu. ViÅu uzdevums ir uzsÄkt jaunu vÄrtÄ«bu priekÅ”likumu kÄrtu un koordinÄt tÄlÄko mezglu darbÄ«bu. TurklÄt Paxos pieļauj vairÄku lÄ«deru klÄtbÅ«tni noteiktÄs situÄcijÄs.
PieÅÄmÄji (balsotÄji). Tie ir mezgli, kas balso par noteiktas vÄrtÄ«bas pieÅemÅ”anu vai noraidÄ«Å”anu. ViÅu loma ir ļoti svarÄ«ga, jo no viÅiem atkarÄ«gs lÄmums: kÄdÄ stÄvoklÄ« sistÄma nonÄks (vai nenonÄks) pÄc konsensa algoritma nÄkamÄ posma.
izglÄ«tojamajiem. Mezgli, kas vienkÄrÅ”i pieÅem un ieraksta jauno pieÅemto vÄrtÄ«bu, kad sistÄmas stÄvoklis ir mainÄ«jies. ViÅi nepieÅem lÄmumus, viÅi tikai saÅem datus un var tos nodot gala lietotÄjam.
Viens mezgls dažÄdÄs situÄcijÄs var apvienot vairÄkas lomas.
Kvoruma jÄdziens
MÄs pieÅemam, ka mums ir sistÄma N mezgli Un no tiem maksimums F mezgli var neizdoties. Ja F mezgli neizdodas, tad mums ir jÄbÅ«t vismaz 2F+1 akceptora mezgli.
Tas ir nepiecieÅ”ams, lai mums vienmÄr bÅ«tu lielÄkÄ daļa "labo" mezglu, kas darbojas pareizi, pat vissliktÄkajÄ situÄcijÄ. Tas ir F+1 "labi" mezgli, kas vienojÄs, un tiks pieÅemta galÄ«gÄ vÄrtÄ«ba. PretÄjÄ gadÄ«jumÄ var rasties situÄcija, ka mÅ«su dažÄdÄs vietÄjÄs grupas iegÅ«st dažÄdas nozÄ«mes un nevar vienoties savÄ starpÄ. TÄpÄc mums ir nepiecieÅ”ams absolÅ«tais vairÄkums, lai balsojumÄ uzvarÄtu.
VispÄrÄja ideja par to, kÄ darbojas Paxos konsensa algoritms
Paxos algoritms ietver divas lielas fÄzes, kuras savukÄrt ir sadalÄ«tas divos posmos:
1.a fÄze: sagatavojieties. SagatavoÅ”anas posmÄ vadÄ«tÄjs (priekÅ”likuma iesniedzÄjs) informÄ visus mezglus: āSÄkam jaunu balsoÅ”anas posmu. Mums ir jauna kÄrta. Å Ä«s kÄrtas numurs ir n. Tagad mÄs sÄksim balsot." PagaidÄm tas vienkÄrÅ”i ziÅo par jauna cikla sÄkumu, bet neziÅo par jaunu vÄrtÄ«bu. Å Ä« posma uzdevums ir uzsÄkt jaunu kÄrtu un informÄt visus par tÄs unikÄlo numuru. Apaļais skaitlis ir svarÄ«gs, tam ir jÄbÅ«t lielÄkai par visiem iepriekÅ”Äjiem balsoÅ”anas cipariem no visiem iepriekÅ”Äjiem lÄ«deriem. Jo tieÅ”i pateicoties apaļajam skaitlim, citi sistÄmas mezgli sapratÄ«s, cik jaunÄki ir lÄ«dera dati. VisticamÄk, ka citiem mezgliem jau ir balsoÅ”anas rezultÄti no daudz vÄlÄkÄm kÄrtÄm un viÅi vienkÄrÅ”i pateiks lÄ«derim, ka viÅÅ” ir atpalicis no laika.
1.b fÄze: solÄ«jums. Kad pieÅemÅ”anas mezgli ir saÅÄmuÅ”i jaunÄ balsoÅ”anas posma numuru, ir iespÄjami divi rezultÄti:
JaunÄ balsojuma skaitlis n ir lielÄks par jebkura iepriekÅ”ÄjÄ balsojuma skaitu, kurÄ piedalÄ«jÄs akceptÄtÄjs. Tad akceptÄtÄjs nosÅ«ta vadÄ«tÄjam solÄ«jumu, ka vairs nepiedalÄ«sies balsojumos, kuru skaitlis ir mazÄks par n. Ja akceptÄtÄjs par kaut ko jau ir nobalsojis (tas ir, jau ir pieÅÄmis kÄdu vÄrtÄ«bu otrajÄ fÄzÄ), tad tas savam solÄ«jumam pievieno pieÅemto vÄrtÄ«bu un balsojuma numuru, kurÄ piedalÄ«jÄs.
PretÄjÄ gadÄ«jumÄ, ja akceptÄtÄjs jau zina par balsojumu ar augstÄku numuru, tas var vienkÄrÅ”i ignorÄt sagatavoÅ”anÄs soli un neatbildÄt vadÄ«tÄjam.
2.a fÄze: pieÅem. LÄ«derim jÄsagaida atbilde no kvoruma (lielÄkÄ daļa sistÄmas mezglu) un, ja tiek saÅemts nepiecieÅ”amais atbilžu skaits, viÅam ir divas notikumu attÄ«stÄ«bas iespÄjas:
Daži no akceptÄtÄjiem nosÅ«tÄ«ja vÄrtÄ«bas, par kurÄm jau bija nobalsojuÅ”i. Å ajÄ gadÄ«jumÄ vadÄ«tÄjs izvÄlas vÄrtÄ«bu no balsojuma ar maksimÄlo skaitu. Nosauksim Å”o vÄrtÄ«bu x, un tÄ nosÅ«ta ziÅojumu visiem mezgliem, piemÄram: āPieÅemt (n, x)ā, kur pirmÄ vÄrtÄ«ba ir balsoÅ”anas numurs no paÅ”a IerosinÄt soļa, bet otrÄ vÄrtÄ«ba ir tÄ, par ko visi pulcÄjÄs, t.i. vÄrtÄ«ba, par kuru mÄs faktiski balsojam.
Ja neviens no akceptÄtÄjiem neatsÅ«tÄ«ja nekÄdas vÄrtÄ«bas, bet viÅi vienkÄrÅ”i apsolÄ«ja balsot Å”ajÄ kÄrtÄ, vadÄ«tÄjs var aicinÄt viÅus balsot par savu vÄrtÄ«bu, par kuru viÅÅ” vispirms kļuva par lÄ«deri. Sauksim to par y. Tas nosÅ«ta ziÅojumu visiem mezgliem, piemÄram: āPieÅemt (n, y)ā, lÄ«dzÄ«gi kÄ iepriekÅ”Äjais rezultÄts.
2.b posms: pieÅemts. TurklÄt akceptormezgli, saÅemot no vadÄ«tÄja ziÅojumu āPieÅemt(...)ā, tam piekrÄ«t (visiem mezgliem nosÅ«ta apstiprinÄjumu, ka viÅi piekrÄ«t jaunajai vÄrtÄ«bai) tikai tad, ja nav apsolÄ«juÅ”i kÄdu (citu) ) lÄ«deris piedalÄ«ties balsoÅ”anÄ ar apaļu numuru n'> n, pretÄjÄ gadÄ«jumÄ viÅi ignorÄ apstiprinÄjuma pieprasÄ«jumu.
Ja lielÄkÄ daļa mezglu atbildÄja lÄ«derim un visi apstiprinÄja jauno vÄrtÄ«bu, tad jaunÄ vÄrtÄ«ba tiek uzskatÄ«ta par pieÅemtu. UrrÄ! Ja vairÄkums netiek sasniegts vai ir mezgli, kas atteicÄs pieÅemt jauno vÄrtÄ«bu, tad viss sÄkas no jauna.
Å Ädi darbojas Paxos algoritms. Katram no Å”iem posmiem ir daudz smalkumu, mÄs praktiski neuzskatÄ«jÄm dažÄda veida neveiksmes, vairÄku vadÄ«tÄju problÄmas un daudz ko citu, taÄu Ŕī raksta mÄrÄ·is ir tikai iepazÄ«stinÄt lasÄ«tÄju ar izplatÄ«tÄs skaitļoÅ”anas pasauli augstÄ lÄ«menÄ«.
Ir arÄ« vÄrts atzÄ«mÄt, ka Paxos nav vienÄ«gais Å”Äda veida produkts, ir arÄ« citi algoritmi, piemÄram, Plosts, bet Ŕī ir cita raksta tÄma.