{"id":37335,"date":"2019-10-31T22:17:01","date_gmt":"2019-10-31T19:17:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\/"},"modified":"2019-10-31T22:17:01","modified_gmt":"2019-10-31T19:17:01","slug":"kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","title":{"rendered":"Schr\u00f6dinger's Cat Without a Box: The Consensus Problem in Distributed Systems","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kujutage ette. Toas on kinni 5 kassi ja et minna \u00e4ratama peremeest, peavad nad k\u00f5ik koos omavahel kokku leppima, sest nad saavad ukse avada ainult siis, kui k\u00f5ik viis koondavad oma j\u00f5ud selle peale. Kui \u00fcks kass on Schr\u00f6dingeri kass ja teised kassid ei tea tema otsusest, tekib k\u00fcsimus: \"Kuidas nad seda teha saavad?\" <\/p>\n<p>Selles artiklis r\u00e4\u00e4gin ma lihtsate s\u00f5nadega jaotatud s\u00fcsteemide teoreetilisest poolest ning nende toimimise printsiipidest. Samuti k\u00e4sitlen ma pinnapealselt Paxosi p\u00f5hjalikku ideed. <\/p>\n<p><img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/17c1edb1fca739d29dc4922bbbe820ce.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKui arendajad kasutavad pilveteenuseid, erinevaid andmebaase ja t\u00f6\u00f6tavad suure arvu s\u00f5lmedega klastris, usuvad nad, et andmed on kogu aeg terved, ohutud ja alati kergesti k\u00e4ttesaadavad. Aga kust tulenevad need garantiid?<\/p>\n<p>Koheselt on meil olemas olemasolevad garantiid, ning need on tarnija garantii. Need on dokumenteeritud enam-v\u00e4hem j\u00e4rgmiselt: \"See teenus on piisavalt usaldusv\u00e4\u00e4rne, tal on m\u00e4\u00e4ratud SLA, \u00e4rge muretsege, k\u00f5ik t\u00f6\u00f6tab jaotatult nagu te ootate.\" <\/p>\n<p>Me kalduvad uskuma parimat, kuna suured ettev\u00f5tted on meid veennud, et k\u00f5ik on h\u00e4sti. Me ei k\u00fcsige endalt: miks see \u00fcldse v\u00f5iks toimida? Kas on olemas mingid formaalsed p\u00f5hjendused selliste s\u00fcsteemide korrektsuse jaoks?<\/p>\n<p>Hiljuti k\u00e4isin <noindex><a rel=\"nofollow\" href=\"https:\/\/sptdc.ru\">jaotatud arvutuste koolis<\/a><\/noindex> ja see inspireeris mind v\u00e4ga. Koolis toimunud loengud meenutasid pigem matemaatilise anal\u00fc\u00fcsi tunde kui midagi seoses arvutite s\u00fcsteemidega. Kuid just nii on ajalooliselt t\u00f5estatud olulisi algoritme, mida me kasutame igap\u00e4evaselt, ja ei kahtle selles. <\/p>\n<p>Enamikus kaasaegsetes jaotatud s\u00fcsteemides on kasutusel Paxosi konsensuse algoritm ja selle erinevad modifikatsioonid. Mis on k\u00f5ige huvitavam, on see, et algoritmi olemasolu ja selle \u00f5igustamine on v\u00f5imalik t\u00f5estada lihtsalt pliiatsi ja paberiga. Samuti rakendatakse algoritmi praktikas suurtes s\u00fcsteemides, mis t\u00f6\u00f6tavad tohutu arvu s\u00f5lmedega pilves. <\/p>\n<p><b class=\"spoiler_title\">Kerge illustratsioon sellest, millest edaspidi r\u00e4\u00e4gitakse: kahe kindraliga \u00fclesanne.<\/b>Alustame soojenduseks <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B4%D0%B2%D1%83%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">kahe kindraliga \u00fclesande lahendamisega.<\/a><\/noindex>. <\/p>\n<p>Meil on kaks armeed \u2013 punased ja valged. Valged v\u00e4ed asuvad piiratavas linnas. Punased v\u00e4ed, mida juhivad kindralid A1 ja A2, on paigutatud linna m\u00f5lemale poole. Punaste eesm\u00e4rk on r\u00fcnnata valget linna ja v\u00f5ita. Kuid iga punase kindrali v\u00e4gi on eraldi v\u00e4iksem valgete omast.<\/p>\n<p><img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/2a684a484d4f6cb3d4e33f2367206d9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPunaste v\u00f5idu tingimused: m\u00f5lemad kindralid peavad r\u00fcndama samaaegselt, et omada \u00fclekaalu valgete \u00fcle. Selleks peavad kindralid A1 ja A2 omavahel kokku leppima. Kui iga\u00fcks r\u00fcndab eraldi, kaotavad punased. <\/p>\n<p>Kokkuleppimiseks saavad kindralid A1 ja A2 saata s\u00f5numitoojaid valge linna territooriumi kaudu. S\u00f5numitooja v\u00f5ib edukalt j\u00f5uda liitlase kindrali juurde v\u00f5i v\u00f5ib protivnik teda tabada. K\u00fcsimus: kas on selline suhtlemise j\u00e4rjestus punaste kindralite vahel (s\u00f5numitoojate saatmise j\u00e4rjestus A1-st A2-sse ja A2-st A1-sse), millega nad garanteeritult kokku leppida r\u00fcnnaku ajaks X. Siin m\u00f5istetakse garantii all, et m\u00f5lemad kindralid saavad \u00fcheselt kinnitust, et liitlane (teine kindral) r\u00fcndab kindlalt m\u00e4\u00e4ratud ajal X.<\/p>\n<p>Oletame, et A1 saadab A2-le s\u00f5numitooja, kes toob s\u00f5numi: \"R\u00fcndame t\u00e4na kesk\u00f6\u00f6l!\". Kindral A1 ei saa r\u00fcnnata ilma kinnituse saanud A2-lt. Kui A1 s\u00f5numitooja j\u00f5uab kohale, saadab kindral A2 kinnituse s\u00f5numiga: \"Jah, r\u00fcndame t\u00e4na valgeid\". Kuid n\u00fc\u00fcd ei tea kindral A2, kas tema vasta s\u00f5numitooja j\u00f5udis kohale v\u00f5i mitte, tal ei ole garanteeritud r\u00fcnnaku samaaegsust. N\u00fc\u00fcd peab \u00fcldiselt A2-le uuesti kinnitus olema.<\/p>\n<p>Kui anal\u00fc\u00fcsida nende suhtlust edasi, selgub midagi sellist: \u00fcksk\u00f5ik, kui palju s\u00f5numivahetus ts\u00fckleid toimub, ei ole viisi, kuidas kummagi kindrali s\u00f5numeid garanteeritult k\u00e4tte toimetada (eeldusel, et \u00fcksk\u00f5ik milline s\u00f5numitooja v\u00f5ib olla tabatud).<\/p>\n<p>Kahe kindrali \u00fclesanne on suurep\u00e4rane illustreerimine v\u00e4ga lihtsast jaotatud s\u00fcsteemist, kus on kaks s\u00f5lme ebausaldusv\u00e4\u00e4rse suhtlemisega. See t\u00e4hendab, et meil ei ole 100% garantiid, et nad s\u00fcnkroniseeruvad. Sellistelt probleemidelt r\u00e4\u00e4gitakse t\u00e4iendavalt artikli suuremal hulgal.<\/p>\n<h2>Sissejuhatus jaotatud s\u00fcsteemide m\u00f5istesse.<\/h2>\n<p>\nJagatud s\u00fcsteem on arvutite r\u00fchm (edaspidi nimetame neid s\u00f5lmedeks), mis saavad vahetada s\u00f5numeid. Iga eraldi s\u00f5lm on autonoomne entiteet. S\u00f5lm suudab iseseisvalt t\u00f6\u00f6\u00fclesandeid t\u00e4ita, kuid teiste s\u00f5lmedega suhtlemiseks peab ta saatma ja vastuv\u00f5tma s\u00f5numeid. <\/p>\n<p>Kuidas s\u00f5numid t\u00e4pselt teostatakse, milliseid protokolle kasutatakse \u2013 see meid antud kontekstis ei huvita. Oluline on, et jagatud s\u00fcsteemi s\u00f5lmed saavad vahetada andmeid, saates teineteisele s\u00f5numeid.<\/p>\n<p>Isegi kui m\u00e4\u00e4ratlemine tundub lihtne, tuleb arvestada, et jagatud s\u00fcsteemil on rida atribuutide, mis on meie jaoks olulised.<\/p>\n<h4>Jagatud s\u00fcsteemide atribuudid<\/h4>\n<p><\/p>\n<ol>\n<li><b>Samaegne t\u00f6\u00f6tlus<\/b> \u2013 v\u00f5imalus, et s\u00fcsteemis esinevad samaaegsed v\u00f5i konkurentsed s\u00fcndmused. Veelgi enam, me arvestame, et s\u00fcndmused, mis toimuvad kahel erineval s\u00f5lmel, on potentsiaalselt konkurentsed, kuni meil pole selget s\u00fcndmuste j\u00e4rjekorda. Ja tavaliselt pole meil seda.<\/li>\n<li><b>Globaalsete kellade puudumine<\/b>. Meil ei ole s\u00fcndmuste selget j\u00e4rjekorda, kuna globaalsed kellad puuduvad. Tavalises inimestemaailmas oleme harjunud, et meil on kellad ja aeg on absoluutne. K\u00f5ik muutub, kui r\u00e4\u00e4kida jagatud s\u00fcsteemidest. Ieven kui supert\u00e4psetel aatomikelladel on drift, v\u00f5ivad esineda olukorrad, kus me ei suuda \u00f6elda, kumb kahest s\u00fcndmusest toimus esimesena. Seet\u00f5ttu ei saa me ka ajale toetuda.<\/li>\n<li><b>S\u00f5lmede s\u00f5ltumatu rike s\u00fcsteemis<\/b>. On veel \u00fcks probleem: midagi v\u00f5ib lihtsalt valesti minna, kuna meie s\u00f5lmed ei ole igavesed. K\u00f5vaketas v\u00f5ib rikkuda, virtuaalkompuuter v\u00f5ib pilves taask\u00e4ivituda, v\u00f5rk v\u00f5ib vahelduda ja s\u00f5numid v\u00f5ivad kaduda. Veelgi enam, v\u00f5ivad esineda olukorrad, kus s\u00f5lmed t\u00f6\u00f6tavad, kuid tegutsevad s\u00fcsteemi vastu. Selle viimase klassi probleem on isegi saadud eraldi nime: <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B2%D0%B8%D0%B7%D0%B0%D0%BD%D1%82%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">byzantine generaalide probleem<\/a><\/noindex>. K\u00f5ige populaarsem n\u00e4ide jagatud s\u00fcsteemist, kus esineb selline probleem, on Blockchain. Kuid t\u00e4na me seda spetsiaalset probleemide klassi ei k\u00e4sitle. Meid huvitavad olukorrad, kus lihtsalt \u00fcks v\u00f5i mitu s\u00f5lme v\u00f5ivad rikke p\u00f5hjustada.<\/li>\n<li><b>Kommunikatsioonimudelid (s\u00f5numite vahetuse mudelid) s\u00f5lmede vahel<\/b>. Oleme juba tuvastanud, et s\u00f5lmed suhtlevad s\u00f5numite vahetamise kaudu. On kaks tuntud s\u00f5numite vahetuse mudelit: s\u00fcnkroonne ja as\u00fcnkroonne.<\/li>\n<\/ol>\n<p><\/p>\n<h4>Jagatud s\u00fcsteemide s\u00f5lmede vahelised kommunikatsioonimudelid<\/h4>\n<p>\n<b>S\u00fcnkroonne mudel<\/b> \u2013 me teame t\u00e4pselt, et olemas on l\u00f5plik tuntud ajavahemik, mille jooksul s\u00f5num j\u00f5uab garantii alusel \u00fchest s\u00f5lmest teise. Kui see aeg on m\u00f6\u00f6das ja s\u00f5num pole saabunud, saame julgelt \u00f6elda, et s\u00f5lm on v\u00e4lja langenud. Sellises mudelis on meil etteennustatav ooteaeg. <\/p>\n<p><b>As\u00fcnkroonne mudel<\/b> \u2013 as\u00fcnkroonsetes mudelites eeldame, et ooteaeg on piiratud, kuid ei ole olemas sellist ajavahemikku, p\u00e4rast mida saab garantii, et s\u00f5lm on v\u00e4lja langenud. See t\u00e4hendab, et s\u00f5numi ooteaeg s\u00f5lmest v\u00f5ib olla piiratud ajatu. See on oluline m\u00e4\u00e4ratlemine ja me r\u00e4\u00e4gime sellest hiljem. <\/p>\n<h2>Konsensuse m\u00f5isted jagatud s\u00fcsteemides<\/h2>\n<p>\nEnne kui m\u00e4\u00e4ratleme konsensuse m\u00f5iste formaalselt, vaatame n\u00e4idet olukorrast, kus see on vajalik, nimelt \u2013 <b>State Machine Replication<\/b>. <\/p>\n<p>Meil on teatud jagatud logi. Me tahaksime, et see oleks j\u00e4rjepidev ja sisaldaks identseid andmeid k\u00f5igis jagatud s\u00fcsteemi s\u00f5lmedes. Kui m\u00f5ni s\u00f5lm saab teada uue v\u00e4\u00e4rtuse, mille ta tahab logisse kirjutada, on tema \u00fclesanne see v\u00e4\u00e4rtus k\u00f5igile teistele s\u00f5lmedele ettepanekuna esitada, et logi uuendataks k\u00f5igil s\u00f5lmedel ning s\u00fcsteem l\u00e4heks uude j\u00e4rjepidevasse olekusse. Oluline on, et s\u00f5lmed oleksid omavahel kokku leppinud: k\u00f5ik s\u00f5lmed on n\u00f5ustunud, et ettepanek uus v\u00e4\u00e4rtus on \u00f5ige, k\u00f5ik s\u00f5lmed on selle v\u00e4\u00e4rtuse vastu v\u00f5tnud, ja ainult sel juhul saavad k\u00f5ik logisse uue v\u00e4\u00e4rtuse kirjutada. <\/p>\n<p>Teisis\u00f5nu: \u00fckski s\u00f5lm ei vaidanud, et tal on aktuaalsem teave ja ettepanek, et v\u00e4\u00e4rtus on vale. S\u00f5lmede vaheline kokkulepe ja konsensus \u00fchiselt aktsepteeritud v\u00e4\u00e4rtuste osas on see, mis on konsensus jagatud s\u00fcsteemis. Edasi r\u00e4\u00e4gime algoritmidest, mis v\u00f5imaldavad jagatud s\u00fcsteemil garanteeritult konsensusele j\u00f5uda.<br \/>\n<img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/300b0834985d5d29286a83b00e6775a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRohkem formaalselt saame konsensuse algoritmi (v\u00f5i lihtsalt konsensuse algoritmi) m\u00e4\u00e4ratleda kui mingit funktsiooni, mis viib jaotatud s\u00fcsteemi seisundist A seisundisse B. Oluline on, et see seisund oleks k\u00f5ikide s\u00f5lmede poolt aktsepteeritud ja k\u00f5ik s\u00f5lmed suudaksid seda kinnitada. Nagu selgub, ei ole see \u00fclesanne sugugi nii triviaalne, nagu esmapilgul v\u00f5ib paista.<\/p>\n<h4>Konsensuse algoritmi omadused<\/h4>\n<p>\nKonsensuse algoritmil peavad olema kolm omadust, et s\u00fcsteem saaks j\u00e4tkata eksisteerimist ja omada mingit progressi seisundist seisundisse liikumisel:<\/p>\n<ol>\n<li><b>Leppimine <\/b> \u2013 k\u00f5ik \u00f5igesti t\u00f6\u00f6tavad s\u00f5lmed peavad aktsepteerima sama v\u00e4\u00e4rtust (selles artiklis nimetatakse seda omadust ka ohutuse omaduseks). K\u00f5ik s\u00f5lmed, mis praegu t\u00f6\u00f6tavad (ei ole rikki l\u00e4inud ega kaotanud \u00fchendust teistega) peavad omavahel leppima ja aktsepteerima mingit l\u00f5plikku \u00fchist v\u00e4\u00e4rtust.\n<p>Siinkohal on oluline m\u00f5ista, et s\u00f5lmedes arutletavas jaotatud s\u00fcsteemis on soovi leppida kokku. P\u00fc\u00fcame r\u00e4\u00e4kida s\u00fcsteemidest, kus v\u00f5ib juhtuda, et midagi eba\u00f5nnestub (nt m\u00f5ni s\u00f5lm eba\u00f5nnestub), kuid selles s\u00fcsteemis ei ole s\u00f5lmi, mis t\u00f6\u00f6tavad teadlikult teiste vastu (biitantsed generaatorid). T\u00e4nu sellele omadusele j\u00e4\u00e4b s\u00fcsteem j\u00e4rjekindlaks.<\/li>\n<li><b>Integreerimine <\/b> \u2014 kui k\u00f5ik \u00f5igesti t\u00f6\u00f6tavad s\u00f5lmed pakuvad sama v\u00e4\u00e4rtust <b>v<\/b>, siis peab iga \u00f5igesti t\u00f6\u00f6tav s\u00f5lm selle v\u00e4\u00e4rtuse aktsepteerima <b>v<\/b>. <\/li>\n<li><b>L\u00f5petamine <\/b>\u2013 k\u00f5ik \u00f5igesti t\u00f6\u00f6tavad s\u00f5lmed l\u00f5puks aktsepteerivad mingi v\u00e4\u00e4rtuse (elavuse omadus), mis v\u00f5imaldab algoritmil s\u00fcsteemis edeneda. Iga eraldi \u00f5igesti t\u00f6\u00f6tav s\u00f5lm peab mingil hetkel aktsepteerima l\u00f5pliku v\u00e4\u00e4rtuse ja kinnitama: \u201eMinule \u2013 see v\u00e4\u00e4rtus on t\u00f5ene, n\u00f5ustun kogu s\u00fcsteemiga.\u201d<\/li>\n<\/ol>\n<p><\/p>\n<h4>Konsensuse algoritmi n\u00e4ide<\/h4>\n<p>\nKuna algoritmi omadused v\u00f5ivad esialgu olla arusaamatud, illustreerime seda k\u00f5ige lihtsama konsensuse algoritmi n\u00e4itega, mis l\u00e4bib etappe s\u00fcmpaatiliselt \u00fclesehitatud s\u00f5numitevahetuss\u00fcsteemis, kus k\u00f5ik s\u00f5lmed toimivad nagu peab, s\u00f5numid ei kao ja mitte midagi ei riku (kas see t\u00f5esti juhtuda v\u00f5ib?).<\/p>\n<ol>\n<li>K\u00f5ik algab ettepanekust (Propose). Oletame, et s\u00f5lmele nimega \u201eS\u00f5lm 1\u201d on \u00fchendatud klient, kes alustas tehingut ning edastas s\u00f5lmele uue v\u00e4\u00e4rtuse \u2013 O. Alates sellest punktist hakkame \u201eS\u00f5lme 1\u201d nimetama <b>proposer<\/b>. Kuidas proposer, peab \u201eS\u00f5lm 1\u201d n\u00fc\u00fcd teavitama kogu s\u00fcsteemi, et tal on v\u00e4rsked andmed, ja saadab teistele s\u00f5lmedele s\u00f5numid: \u201eVaadake! Mul on tulnud v\u00e4\u00e4rtus \u201eO\u201d ja ma soovin selle salvestada! Palun kinnitage, et ka teie salvestate \u201eO\u201d oma logisse.\u201d\n<p><img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/bd6a9394229b8a2a5b0bf987ba53500b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> J\u00e4rgmine etapp on h\u00e4\u00e4letamine pakutud v\u00e4\u00e4rtuse \u00fcle (Voting). Miks see vajalik on? V\u00f5ib juhtuda, et teistel s\u00f5lmedel on saanud v\u00e4rskemat teavet ja neil on selle sama tehinguga seotud andmeid.\n<p><img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/7080d6222971c6bab012410ef9e074e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui s\u00f5lm \u201eS\u00f5lm 1\u201d saadab oma ettepaneku, siis vaatavad teised s\u00f5lmed oma logidest selle s\u00fcndmuse andmeid. Kui vastuolusid ei esine, teatavad s\u00f5lmed: \u201eJah, minult ei tule selle s\u00fcndmuse kohta teisi andmeid. V\u00e4\u00e4rtus \u201eO\u201d on k\u00f5ige v\u00e4rskem info, mille me oleme saanud.\u201d <\/p>\n<p>Muudel juhtudel v\u00f5ivad s\u00f5lmed vastata \u201eS\u00f5lm 1\u201d jaoks: \u201eKuule! Mul on selle tehingu kohta v\u00e4rskemaid andmeid. Mitte \u201eO\u201d, vaid midagi paremat.\u201d<\/p>\n<p>H\u00e4\u00e4letuse etapis j\u00f5uavad s\u00f5lmed otsusele: kas k\u00f5ik aktsepteerivad sama v\u00e4\u00e4rtuse v\u00f5i keegi neist h\u00e4\u00e4letab vastu, m\u00e4rgides, et tal on v\u00e4rskemaid andmeid. <\/li>\n<li> Kui h\u00e4\u00e4letusvoor on \u00f5nnestunud, ja k\u00f5ik olid \u201eja\u201d, siis liigub s\u00fcsteem j\u00e4rgmisse etappi \u2013 v\u00e4\u00e4rtuse aktsepteerimine (Accept). \u201eS\u00f5lm 1\u201d kogub teiste s\u00f5lmede k\u00f5ik vastused ja teatab: \u201eK\u00f5ik on n\u00f5ustunud v\u00e4\u00e4rtusega \u201eO\u201d! N\u00fc\u00fcdsest kuulutan ma ametlikult, et \u201eO\u201d on meie uus v\u00e4\u00e4rtus, k\u00f5igi jaoks \u00fchine! Salvestage see endale, \u00e4rge unustage. Salvestage oma logisse!\u201d\n<p><img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/c4bc2af053a27d7030824d45c3ad6def.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Teised s\u00f5lmed saadavad kinnituse (Accepted), et nad on salvestanud v\u00e4\u00e4rtuse \u201eO\u201d, ei ole midagi uut sisse tulnud (omaette kahefaasiline kinnitamine). P\u00e4rast seda m\u00e4rkimisv\u00e4\u00e4rset s\u00fcndmust loeme, et jaotatud tehing on t\u00e4idetud.<br \/>\n <img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/2a9c49729f2607099385fee29f45d1f3.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/li>\n<\/ol>\n<p>\nNii koosneb konsensuse algoritm lihtsas vormis neljast sammust: ettepanek, h\u00e4\u00e4letamine, aktsepteerimine, aktsepteerimise kinnitamine.<\/p>\n<p>Kui m\u00f5nes etapis ei \u00f5nnestunud j\u00f5uda konsensusele, k\u00e4ivitub algoritm uuesti, arvestades teavet, mida annavad s\u00f5lmed, kes ei n\u00f5ustunud pakutud v\u00e4\u00e4rtust kinnitama.<\/p>\n<h2>Konsensuse algoritm as\u00fcnkronses s\u00fcsteemis<\/h2>\n<p>\nKuni k\u00f5ik oli sujuv, r\u00e4\u00e4kisime s\u00fcnkroonsest s\u00f5numivahetusmudelile. Kuid me teame, et t\u00e4nap\u00e4eva maailmas oleme k\u00f5ik harjunud tegema as\u00fcnkroonselt. Kuidas siis sarnane algoritm t\u00f6\u00f6tab s\u00fcsteemis, kus on as\u00fcnkroonse s\u00f5numivahetuse mudel, kus me arvame, et vastuse ootamine s\u00f5lmele v\u00f5ib olla l\u00f5pmatult pikk (muide, s\u00f5lme rike v\u00f5ib samuti olla n\u00e4ide, kui s\u00f5lm v\u00f5ib vastata l\u00f5pmatult kaua). <\/p>\n<blockquote><p>N\u00fc\u00fcd, kui me teame, kuidas p\u00f5him\u00f5tteliselt konsensusalgoritm t\u00f6\u00f6tab, on k\u00fcsimus neile uudishimulikele lugejatele, kes on siia j\u00f5udnud: kui palju s\u00f5lmi N s\u00f5lmest as\u00fcnkroonses s\u00f5numivahetuss\u00fcsteemis v\u00f5ib rikki minna, et s\u00fcsteem saaks endiselt konsensusele j\u00f5uda?<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">\u00d5ige vastus ja p\u00f5hjendus on spoileris.<\/b>\u00d5ige vastus: <b>0<\/b>. Kui v\u00e4hemalt \u00fcks s\u00f5lm as\u00fcnkroonses s\u00fcsteemis rikki l\u00e4heb, ei suuda s\u00fcsteem konsensusele j\u00f5uda. Seda v\u00e4idet t\u00f5estatakse tuntud teoreemi FLP (1985, Fischer, Lynch, Paterson) puhul, mille originaali link on artikli l\u00f5pus: \"Rikkumise korral ei saa saavutada jaotatud konsensust, kui v\u00e4hemalt \u00fcks s\u00f5lm on rikki l\u00e4inud.\"<br \/>\n<img decoding=\"async\" alt=\"Schr\u00f6dinger&#039;s Cat Without a Box: The Consensus Problem in Distributed Systems\" src=\"\/wp-content\/uploads\/2019\/08\/92417aafe00841aaa41cbefe0386e21a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPoisid, siis on meil probleem, me oleme harjunud, et k\u00f5ik on as\u00fcnkroone. Ja n\u00fc\u00fcd on selline asjaolu. Kuidas edasi elada? <\/p>\n<p>Me r\u00e4\u00e4kisime praegu teooriast, matemaatikast. Mida t\u00e4hendab \"konsensus ei saa olla saavutatud\", t\u00f5lkides matemaatilisest keelest meie \u2013 insenerikeelde? See t\u00e4hendab, et \"ei pruugi alati olla saavutatud\", st on olemas selline juhtum, kus konsensus ei ole saavutatav. Mis juhtum see siis on? <\/p>\n<p>See on t\u00e4pselt liveness property rikkumine, mida eespool kirjeldati. Meil ei ole \u00fchisele n\u00f5usolekule, ning s\u00fcsteem ei saa edusamme teha (ei saa l\u00f5ppeda piiratud ajas) juhul, kui meil ei ole k\u00f5igilt s\u00f5lmedelt vastust. Sest as\u00fcnkroonses s\u00fcsteemis ei ole meil ennustatavat vastusaega ja me ei saa teada, kas s\u00f5lm on rikki l\u00e4inud v\u00f5i lihtsalt vastab pika aja jooksul.<\/p>\n<p>Kuid praktikas saame lahenduse leida. Oletame, et meie algoritm v\u00f5ib vigastuste korral kaua t\u00f6\u00f6tada (potentsiaalselt v\u00f5ib t\u00f6\u00f6tada l\u00f5putult). Kuid enamikus olukordades, kus enamus s\u00f5lmi t\u00f6\u00f6tab t\u00f5rgeteta, saavutame s\u00fcsteemis edusamme. <\/p>\n<p>Praktikas puutume kokku osaliselt s\u00fcnkroonsete kommunikatsioonimudelitega. Osalist s\u00fcnkroonsust m\u00f5istetakse nii: tavaliselt on meil as\u00fcnkroonne mudel, kuid ametlikult tuuakse sisse mingi m\u00f5iste \"global stabilization time\" mingist ajast. <\/p>\n<p>See ajamoment v\u00f5ib mitte tulla l\u00f5putult kaua, kuid \u00fchel p\u00e4eval peab see kindlasti toimuma. Virtuaalne \u00e4ratus heliseb ja alates sellest hetkest saame ennustada ajavahemikku, mille jooksul s\u00f5numid kohale j\u00f5uavad. Sellest hetkest muutub as\u00fcnkroonne s\u00fcsteem s\u00fcnkroonses s\u00fcsteemiks. Praktikas puutume kokku just selliste s\u00fcsteemidega. <\/p>\n<h2>Paxos algoritm lahendab konsensuse probleemid<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Paxos_(computer_science)\">Paxos <\/a><\/noindex> on algoritmide perekond, mis lahendab konsensuse probleemi osaliselt s\u00fcnkroonsetes s\u00fcsteemides, kus m\u00f5ned s\u00f5lmed v\u00f5ivad eba\u00f5nnestuda. Paxosi autor on <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Leslie_Lamport\">Leslie Lamport.<\/a><\/noindex>Ta esitas 1989. aastal algoritmi olemasolu ja \u00f5igsuse ametliku t\u00f5estuse. <\/p>\n<p>Kuid t\u00f5estamine osutus kaugel lihtsaks. Esimene publikatsioon ilmus alles 1998. aastal (33 lehek\u00fclge), kus kirjeldati algoritmi. Nagu selgus, oli see \u00e4\u00e4rmiselt keeruline m\u00f5ista, ja 2001. aastal ilmus artikli selgitus, mis h\u00f5ivas 14 lehte. Publikatsioonide mahud on toodud selleks, et n\u00e4idata, et tegelikult on konsensuse probleem \u00fcsna keeruline ning selliste algoritmide taga on tohutu t\u00f6\u00f6 k\u00f5ige targemate inimeste poolt.<\/p>\n<blockquote><p>Huvitav, et Leslie Lamport ise m\u00e4rkis oma loengus, et teises selgitavas artiklis on \u00fcks v\u00e4ide, \u00fcks rida (ta ei t\u00e4psustanud, milline), mille t\u00f5lgendamine v\u00f5ib olla erinev. Ja seet\u00f5ttu toimib suur hulk t\u00e4nap\u00e4evaseid Paxose rakendusi mitte t\u00e4iesti korrektselt. <\/p><\/blockquote>\n<p>\nPaxosi toimimise p\u00f5hjalik k\u00e4sitlus vajab rohkem kui \u00fchte artiklit, seega p\u00fc\u00fcan ma p\u00e4\u00e4seda l\u00fchidalt algoritmi p\u00f5hisisu edastamiseni. Artikli l\u00f5pus leiate lingid edasiseks s\u00fcvenemiseks sellesse teema.<\/p>\n<h4>Rollen Paxoses<\/h4>\n<p>\nPaxose algoritmis on olemas rollide m\u00f5isted. Vaatame kolme peamist (on ka modifikatsioone, kus on lisarolle):<\/p>\n<ol>\n<li><b>Proposers (v\u00f5ivad esineda ka terminid: liidrid v\u00f5i koordinaatorid).<\/b>Need on inimesed, kes saavad teada m\u00f5ne uuest v\u00e4\u00e4rtusest kasutajalt ja v\u00f5tavad juhtrolli. Nende \u00fclesanne on k\u00e4ivitada uue v\u00e4\u00e4rtuse ettepaneku voor ja koordineerida edasised toimingud s\u00f5lmedega. Paxos lubab teatud olukordades mitu liidrit.<\/li>\n<li><b>Acceptors (Voters)<\/b>. Need on s\u00f5lmed, mis h\u00e4\u00e4letavad, kas aktsepteerida v\u00f5i tagasi l\u00fckata teatud v\u00e4\u00e4rtus. Nende roll on v\u00e4ga oluline, kuna just nemad otsustavad, milliseks olekuks s\u00fcsteem l\u00e4heb (v\u00f5i ei l\u00e4he) p\u00e4rast konsensuse algoritmi j\u00e4rgmiste etappide l\u00e4biviimist.<\/li>\n<li><b>Kasutajad<\/b>. Need on s\u00f5lmed, mis lihtsalt aktsepteerivad ja salvestavad uut aktsepteeritud v\u00e4\u00e4rtust, kui s\u00fcsteemi olek muutub. Nad ei tee otsuseid, vaid saavad andmeid ja saavad neid edasi anda l\u00f5ppkasutajale. <\/li>\n<\/ol>\n<p>\n\u00dcks s\u00f5lm v\u00f5ib erinevates olukordades t\u00e4ita mitmeid rolle. <\/p>\n<h4>Kvoorumi m\u00f5isted<\/h4>\n<p>\nEeldame, et meie s\u00fcsteem koosneb <b>N<\/b> s\u00f5lmest. Ja neist v\u00f5ib maksimum <b>F<\/b> s\u00f5lme minna v\u00e4lja. Kui F s\u00f5lme suudab halveneda, peab meie klastris olema v\u00e4hemalt <b>2F + 1<\/b> acceptor s\u00f5lmed. <\/p>\n<p>See on vajalik, et meil oleks alati, isegi halvima olukorra korral, \u201ehead\u201d, korralikult t\u00f6\u00f6tavad s\u00f5lmed, kes moodustavad enamuse. See t\u00e4hendab, et on v\u00e4hemalt <b>F + 1<\/b> \u201ehead\u201d s\u00f5lme, kes on selle poolt, ja l\u00f5plik v\u00e4\u00e4rtus v\u00f5etakse vastu. Vastasel korral v\u00f5ib juhtuda, et meie erinevad kohalikud grupid v\u00f5tavad vastu erinevaid v\u00e4\u00e4rtusi ja ei suuda omavahel kokku leppida. Seep\u00e4rast vajame absoluutset enamust, et v\u00f5ita h\u00e4\u00e4letusel.<\/p>\n<h4>Paxos konsensuse algoritmi \u00fcldine idee<\/h4>\n<p>\nPaxose algoritm koosneb kahest suurest faasist, mis jagunevad omakorda kaheks samaksmiseks:<\/p>\n<ol>\n<li><b>Faas 1a: Ettevalmistamine<\/b>. Ettevalmistuse etapis teatab liider (proposser) k\u00f5ikidele s\u00f5lmedele: \u201eAlustame uut h\u00e4\u00e4letusfaasi. Meil on uus voor. Selle vooru number on n. N\u00fc\u00fcd hakkame h\u00e4\u00e4letama\u201d. Praegu teatab ta lihtsalt uue ts\u00fckli algusest, kuid ei ava uut v\u00e4\u00e4rtust. Loomise \u00fclesanne on alustada uut vooru ja anda k\u00f5igile selle unikaalne number. Vooru number on oluline, see peab olema suurem kui k\u00f5ik eelnevad h\u00e4\u00e4letusnumbrid k\u00f5igilt eelnevatelt liidritelt. Just t\u00e4nu vooru numbrile m\u00f5istavad teised s\u00fcsteemi loksud, kui v\u00e4rsked andmed liider on. T\u00f5en\u00e4oliselt on teistel s\u00f5lmedel juba hilisema vooru h\u00e4\u00e4letamise tulemused ja nad teatavad lihtsalt liidrile, et ta on maha j\u00e4\u00e4nud.<\/li>\n<li><b>Faas 1b: Lubadus<\/b>. Kui acceptor s\u00f5lmed on saanud uue h\u00e4\u00e4letusfaasi numbri, on v\u00f5imalikud kaks tulemust: \n<ul>\n<li>Uue h\u00e4\u00e4letuse number n on suurem kui \u00fcksk\u00f5ik milline eelnevate h\u00e4\u00e4letuste number, milles aktsepteerija osales. Siis saadab aktsepteerija liidri lubaduse, et ta ei osale enam h\u00e4\u00e4letustes, kus numbri v\u00e4\u00e4rtus on v\u00e4iksem kui n. Kui aktsepteerija on juba millegi poolt h\u00e4\u00e4letanud (st on juba teises faasis mingit v\u00e4\u00e4rtust aktsepteerinud), siis lisab ta oma lubadusele aktsepteeritud v\u00e4\u00e4rtuse ja h\u00e4\u00e4letuse numbri, milles ta osales.<\/li>\n<li>Teisest k\u00fcljest, kui aktsepteerija teab h\u00e4\u00e4letusest, mille number on suurem, v\u00f5ib ta lihtsalt ettevalmistuse etapi ignoreerida ning liidri k\u00fcsimusele ei vasta.<\/li>\n<\/ul>\n<\/li>\n<li><b>Faas 2a: Aktsepteerimine<\/b>. Liider peab ootama kvora (s\u00fcsteemis olevate s\u00f5lmede enamuse) vastust ja, kui vajalik number vastuseid on saadud, on tal kaks v\u00f5imalikku v\u00e4ljundit: \n<ul>\n<li>M\u00f5ned acceptor s\u00f5lmed saatsid v\u00e4\u00e4rtusi, mille \u00fcle nad juba h\u00e4\u00e4letasid. Sel juhul valib juht maksimaalse numbri saanud h\u00e4\u00e4letuse p\u00f5hjal v\u00e4\u00e4rtuse. Nimelt, nimetame seda v\u00e4\u00e4rtust x, ning saadab k\u00f5igile s\u00f5lmedele s\u00f5numi vormis: \"Accept (n, x)\", kus esimene v\u00e4\u00e4rtus on h\u00e4\u00e4letuse number tema enda Propose sammest ja teine v\u00e4\u00e4rtus on see, mille p\u00e4rast nad k\u00f5ik koos tulid, st v\u00e4\u00e4rtus, millele nad tegelikult h\u00e4\u00e4letavad.<\/li>\n<li>Kui \u00fckski acceptor s\u00f5lmedest ei saatnud mingeid v\u00e4\u00e4rtusi, vaid nad lihtsalt lubasid selles voorus h\u00e4\u00e4letada, v\u00f5ib juht pakkuda neile oma v\u00e4\u00e4rtuse h\u00e4\u00e4letamiseks, nimelt v\u00e4\u00e4rtuse, mille p\u00e4rast ta \u00fcldse juht oli. Nimeta see y. Ta saadab k\u00f5igile s\u00f5lmedele s\u00f5numi vormis: \"Accept (n, y)\", vastavalt eelnevale tulemusele.<\/li>\n<\/ul>\n<\/li>\n<li><b>Faas 2b: Aktsepteeritud<\/b>. Edasi, acceptor s\u00f5lmed, saades s\u00f5numi \"Accept(...)\", n\u00f5ustuvad juhtiga (saades k\u00f5igile s\u00f5lmedele kinnituse, et nad n\u00f5ustuvad uue v\u00e4\u00e4rtusega) ainult juhul, kui nad ei ole lubanud mingile (teisele) juhile osaleda h\u00e4\u00e4letustes, mille vooru number <b>n' &gt; n<\/b>, vastasel juhul ignoreerivad nad kinnituse p\u00e4ringut.\n<p>Kui liidrile on vastanud enamuse s\u00f5lmedest, ja k\u00f5ik nad on uut v\u00e4\u00e4rtust kinnitanud, loetakse uus v\u00e4\u00e4rtus aktsepteerituks. Hurraa! Kui aga enamust ei saavutata v\u00f5i on s\u00f5lmed, kes keeldusid uue v\u00e4\u00e4rtuse vastuv\u00f5tmisest, algab k\u00f5ik uuesti.<\/li>\n<\/ol>\n<p>\nNii t\u00f6\u00f6tab Paxose algoritm. Igal neist etappidest on palju n\u00fcansse, me ei k\u00e4sitlenud praktiliselt erinevaid rikke t\u00fc\u00fcpe, mitmerealise liidri probleeme ja palju muud, kuid selle artikli eesm\u00e4rk on tutvustada lugejat jagatud arvutuse maailma pealiskaudselt.<\/p>\n<p>Oluline on m\u00e4rkida, et Paxos ei ole ainus oma liigis, on ka teisi algoritme, n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/raft.github.io\/\">Raft<\/a><\/noindex>, kuid see on juba teema teiseks artikliks.<\/p>\n<h2>Viidatud materjalid edasiseks uurimiseks<\/h2>\n<p>\nNovice tase:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/s\/story\/lets-take-a-crack-at-understanding-distributed-consensus-dad23d0dc95\">Kuidas jaotatud konsensus toimib?<\/a><\/noindex>, Preethi Kasireddy, blogiarutelu Mediumis<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@nevverlander\/paxos-made-simple-for-real-aa221be7d91b\">Paxos lihtsustatud kujul. T\u00f5eliselt<\/a><\/noindex>, Adi Kancherla, blogiarutelu Mediumis<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/\">Detsentraliseeritud m\u00f5tted<\/a><\/noindex>, Ittai Abraham, blogi<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/2019-06-01-2019-5-31-models\/\">S\u00fcnkroonsus, As\u00fcnkroonsus ja osaline s\u00fcnkroonsus<\/a><\/noindex>, Ittai Abraham, blogiarutelu<\/li>\n<\/ul>\n<p>\nLeslie Lamporti tase:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Jaotatud konsensuse v\u00f5imatuse probleem \u00fche vigase protsessiga (FLP v\u00f5imatuse probleem)<\/a><\/noindex>, Fischer, Lynch ja Paterson, teadust\u00f6\u00f6, 1985<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/lamport-paxos.pdf\">Osaline parlament<\/a><\/noindex>, Leslie Lamport, teadust\u00f6\u00f6, 1998<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/paxos-simple.pdf\">Paxos lihtsustatud kujul<\/a><\/noindex>, Leslie Lamport, teadust\u00f6\u00f6, 2001<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/463469\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451. \u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0432 \u2013 \u043a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0442\u044b \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u041a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?\u00bb \u0412 \u044d\u0442\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28009,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430 \u0431\u0435\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438: \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Schr\u00f6dingeri kass ilma kastita: konsensuse probleem jaotatud s\u00fcsteemides | ProHoster","description":"Nii, kujutame ette. Toas on kinni viis kassi ja et minna omaniku \u00fcles \u00e4ratamiseks, peavad nad k\u00f5ik koos omavahel kokkuleppele j\u00f5udma, sest nad saavad ukse avada vaid kelmuse m\u00e4ngides viiekesi selle peale toetudes.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430 \u0431\u0435\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438: \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 | ProHoster","og:description":"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:01+00:00","article:modified_time":"2019-10-31T19:17:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37335","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 17:20:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:28:27","updated":"2026-01-23 17:20:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=37335"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28009"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}