{"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\/hr\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","title":{"rendered":"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Zamislite sljede\u0107e. U prostoriji su zaklju\u010dana 5 ma\u010daka, i kako bi oti\u0161le probuditi vlasnika, moraju se zajedno dogovoriti o tome, jer mogu otvoriti vrata samo zajedno, nasloniv\u0161i se na njih. Ako je jedna od ma\u010daka ma\u010dka Schr\u00f6dinger, a ostale ma\u010dke ne znaju za njezinu odluku, postavlja se pitanje: \"Kako to mogu u\u010diniti?\" <\/p>\n<p>U ovom \u010dlanku \u0107u vam jednostavnim jezikom objasniti teoretske osnove svijeta distribuiranih sustava i principe njihovog rada. Tako\u0111er, povr\u0161no \u0107u razmotriti glavnu ideju koja le\u017ei u osnovi Paxosa. <\/p>\n<p><img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" 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 \/>\nKada programeri koriste obla\u010dne infrastrukture, razli\u010dite baze podataka i rade u klasterima s velikim brojem \u010dvorova, uvjereni su da \u0107e podaci biti cjeloviti, o\u010duvani i uvijek dostupni. No, odakle dolaze jamstva?<\/p>\n<p>U su\u0161tini, jamstva koja imamo su jamstva davatelja usluga. Oni su opisana u dokumentaciji otprilike ovako: \u201eOva usluga je dovoljno pouzdana, ima zadani SLA, ne brinite, sve \u0107e raditi distribuirano, kao \u0161to o\u010dekujete.\u201c <\/p>\n<p>Skloni smo vjerovati u najbolje, jer nas pametni mu\u0161ki iz velikih kompanija uvjeravaju da \u0107e sve biti u redu. Ne postavljamo si pitanje: za\u0161to bi ovo uop\u0107e moglo raditi? Ima li nekog formalnog opravdanja ispravnosti rada takvih sustava?<\/p>\n<p>Nedavno sam i\u0161ao na <noindex><a rel=\"nofollow\" href=\"https:\/\/sptdc.ru\">\u0161kolu o distribuiranim ra\u010dunalnim sustavima<\/a><\/noindex> i bio sam jako inspiriran ovom temom. Predavanja u \u0161koli vi\u0161e su podsje\u0107ala na satove iz matemati\u010dke analize nego na ne\u0161to vezano uz ra\u010dunalne sustave. No, upravo su tako u svoje vrijeme dokazivani najva\u017eniji algoritmi koje svakodnevno koristimo, a da toga nismo ni svjesni. <\/p>\n<p>U ve\u0107ini modernih distribuiranih sustava koristi se algoritam konsenzusa Paxos i njegove razne modifikacije. Najbolje je \u0161to se opravdanost i, u principu, sama mogu\u0107nost postojanja ovog algoritma mo\u017ee dokazati jednostavno uz pomo\u0107 olovke i papira. Pri tom se algoritam prakti\u010dno primjenjuje u velikim sustavima koji rade na ogromnom broju \u010dvorova u oblacima. <\/p>\n<p><b class=\"spoiler_title\">Lagana ilustracija o \u010demu \u0107e se dalje raditi: zadatak dvaju generala<\/b>Hajde da se malo razgibamo analizom <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\">zadatka dvaju generala<\/a><\/noindex>. <\/p>\n<p>Imamo dvije vojske \u2013 crvenu i bijelu. Bijele trupe su smje\u0161tene u opsjednutom gradu. Crvene trupe pod vodstvom generala A1 i A2 nalaze se s obje strane grada. Zadatak crvenih je napasti bijeli grad i pobijediti. Me\u0111utim, vojska svakog crvenog generala pojedina\u010dno je manja od vojske bijelih.<\/p>\n<p><img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/2a684a484d4f6cb3d4e33f2367206d9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUvjeti pobjede za crvene: obojica generala moraju napasti istovremeno kako bi imali broj\u010danu prednost nad bijelima. Za to se generali A1 i A2 trebaju dogovoriti me\u0111usobno. Ako svaki napadne pojedina\u010dno, crveni \u0107e izgubiti. <\/p>\n<p>Da bi se dogovorili, generali A1 i A2 mogu slati glasnike jedni drugima kroz teritorij bijelog grada. Glasnik mo\u017ee uspje\u0161no do\u0107i do saveznika ili ga mo\u017ee uhvatiti protivnik. Pitanje je: postoji li takva sekvenca komunikacija izme\u0111u crvenih generala (sekvenca slanja glasnika od A1 do A2 i obrnuto od A2 do A1), u kojoj \u0107e se oni jam\u010divo dogovoriti o napadu u \u010das X. Ovdje, pod jamstvima podrazumijevamo da \u0107e obojica generala imati jednozna\u010dnu potvrdu da saveznik (drugi general) sigurno napada u dogovoreno vrijeme X.<\/p>\n<p>Pretpostavimo da A1 \u0161alje glasnika A2 s porukom: \u201eNapadnimo danas u pono\u0107!\u201c. General A1 ne mo\u017ee napasti bez potvrde od generala A2. Ako je glasnik od A1 stigao, tada general A2 \u0161alje potvrdu s porukom: \u201eDa, napadnimo danas bijele\u201c. No sada general A2 ne zna je li njegov glasnik stigao ili ne, nema jamstava da \u0107e napad biti simultan. Sada generalu A2 opet treba potvrda.<\/p>\n<p>Ako se nastavi s njihovom komunikacijom, otkriva se sljede\u0107e: koliko god ciklusa razmjene poruka bilo, ne postoji na\u010din da se jam\u010dito obavijeste obojica generala o tome da su njihove poruke primljene (pod uvjetom da bilo koji glasnik mo\u017ee biti uhva\u0107en).<\/p>\n<p>Zadatak dva generala odli\u010dna je ilustracija vrlo jednostavnog distribuiranog sustava, gdje postoje dva \u010dvora s nepouzdanom komunikacijom. To zna\u010di da nemamo 100% jamstvo da \u0107e se sinkronizirati. O sli\u010dnim problemima, ali na ve\u0107em razmjeru, bit \u0107e rije\u010di dalje u \u010dlanku.<\/p>\n<h2>Uvodimo pojam distribuiranih sustava.<\/h2>\n<p>\nDistribuirani sustav je skup ra\u010dunala (dalje \u0107emo ih zvati \u010dvorovima) koji mogu razmjenjivati poruke. Svaki pojedini \u010dvor je autonomna entitet. \u010cvor mo\u017ee samostalno obra\u0111ivati zadatke, ali da bi komunicirao s drugim \u010dvorovima, mora slati i primati poruke. <\/p>\n<p>Kako su poruke konkretno implementirane, koje se protokoli koriste \u2013 to nas ne zanima u ovom kontekstu. Va\u017eno je da \u010dvorovi distribuiranog sustava mogu razmjenjivati podatke me\u0111usobno slanjem poruka.<\/p>\n<p>Samo definicija izgleda prili\u010dno jednostavno, ali treba uzeti u obzir da distribuirani sustav ima brojne atribute koji \u0107e nam biti va\u017eni.<\/p>\n<h4>Atributi distribuiranih sustava<\/h4>\n<p><\/p>\n<ol>\n<li><b>Konkurentnost<\/b> je mogu\u0107nost nastanka istovremenih ili konkurentnih doga\u0111aja u sustavu. \u0160tovi\u0161e, smatrat \u0107emo da su doga\u0111aji koji su se dogodili na dva razli\u010dita \u010dvora potencijalno konkurentni sve dok nemamo jasan redoslijed nastanka tih doga\u0111aja. A, obi\u010dno, nemamo.<\/li>\n<li><b>Nedostatak globalnog vremena<\/b>. Nemamo jasan redoslijed doga\u0111aja zbog nedostatka globalnog vremena. U obi\u010dnom ljudskom svijetu navikli smo da imamo satove i apsolutno vrijeme. Sve se mijenja kada se radi o distribuiranim sustavima. \u010cak i najto\u010dniji atomski satovi imaju pomake, a mogu\u0107a su i stanja kada ne mo\u017eemo re\u0107i koji od dva doga\u0111aja se dogodio ranije. Stoga se ne mo\u017eemo oslanjati na vrijeme.<\/li>\n<li><b>Neovisno otkazivanje \u010dvorova sustava<\/b>. Postoji jo\u0161 jedan problem: ne\u0161to mo\u017ee po\u0107i po zlu jednostavno zato \u0161to na\u0161i \u010dvorovi nisu vje\u010dni. Mo\u017ee otkazati tvrdi disk, virtualka u oblaku se mo\u017ee ponovno pokrenuti, mre\u017ea mo\u017ee zatreptati i poruke se mogu izgubiti. \u0160tovi\u0161e, mogu\u0107a su i stanja kada \u010dvorovi rade, ali istovremeno djeluju protiv sustava. Posljednja klasa problema \u010dak je dobila posebno ime: problem <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\">bizantskih generala<\/a><\/noindex>. Najpopularniji primjer distribuiranog sustava s ovakvim problemom je Blockchain. No, danas ne\u0107emo razmatrati ovu posebnu klasu problema. Zanimat \u0107e nas situacije u kojima jednostavno jedan ili vi\u0161e \u010dvorova mogu otkazati.<\/li>\n<li><b>Modeli komunikacije (modeli razmjene poruka) izme\u0111u \u010dvorova<\/b>. Utvrdili smo da \u010dvorovi komuniciraju putem razmjene poruka. Postoje dva poznata modela razmjene poruka: sinkroni i asinkroni.<\/li>\n<\/ol>\n<p><\/p>\n<h4>Modeli komunikacije izme\u0111u \u010dvorova u distribuiranim sustavima<\/h4>\n<p>\n<b>Sinkroni model<\/b> \u2013 znamo to\u010dno da postoji kona\u010dna poznata delta vremena u kojoj poruka garancirano dolazi s jednog \u010dvora na drugi. Ako to vrijeme istekne, a poruka nije stigla, mo\u017eemo sigurno re\u0107i da je \u010dvor otkazao. U takvom modelu imamo predvidivo vrijeme \u010dekanja. <\/p>\n<p><b>Asinkroni model<\/b> \u2013 u asinkronim modelima smatramo da je vrijeme \u010dekanja kona\u010dno, ali ne postoji takva delta vremena nakon koje mo\u017eemo jam\u010diti da je \u010dvor otkazao. Tj. vrijeme \u010dekanja poruke od \u010dvora mo\u017ee biti proizvoljno dugo. Ovo je va\u017eno definiranje, i o tome \u0107emo dalje razgovarati. <\/p>\n<h2>Pojam konzensa u distribuiranim sustavima<\/h2>\n<p>\nPrije formalne definicije pojma konzensa, razmotrimo primjer situacije u kojoj nam je potreban, a to je \u2013 <b>Replikacija strojne dr\u017eave<\/b>. <\/p>\n<p>Imamo neki distribuirani zapis. \u017deljeli bismo da bude dosljedan i da sadr\u017ei identi\u010dne podatke na svim \u010dvorovima distribuiranog sustava. Kada neki od \u010dvorova sazna novu vrijednost koju \u017eeli zabilje\u017eiti u zapis, njegov zadatak postaje predlo\u017eiti tu vrijednost svim ostalim \u010dvorovima kako bi se zapis a\u017eurirao na svim \u010dvorovima i sustav pre\u0161ao u novo dosljedno stanje. Pritom je va\u017eno da se \u010dvorovi dogovore: svi \u010dvorovi su se slo\u017eili da je predlo\u017eena nova vrijednost ispravna, svi \u010dvorovi su prihvatili tu vrijednost, i samo u tom slu\u010daju svi mogu zabilje\u017eiti novu vrijednost u zapis. <\/p>\n<p>Drugim rije\u010dima: nitko od \u010dvorova nije prigovorio da ima a\u017eurirane informacije, a predlo\u017eena vrijednost je neto\u010dna. Dogovor izme\u0111u \u010dvorova i suglasnost o jedinstvenoj ispravnoj prihva\u0107enoj vrijednosti jest konsenzus u distribuiranom sustavu. Dalje \u0107emo govoriti o algoritmima koji omogu\u0107uju da distribuirani sustav garantirano postigne konsenzus.<br \/>\n<img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/300b0834985d5d29286a83b00e6775a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMo\u017eemo formalno definirati algoritam postizanja konsenzusa (ili jednostavno algoritam konsenzusa) kao funkciju koja prenosi distribuirani sustav iz stanja A u stanje B. Ovo stanje trebaju prihvatiti svi \u010dvorovi, a svi \u010dvorovi ga moraju potvrditi. Kako pokazuje iskustvo, ovaj zadatak nije nimalo trivijalan kao \u0161to se na prvi pogled \u010dini.<\/p>\n<h4>Svojstva algoritma konsenzusa<\/h4>\n<p>\nAlgoritam konsenzusa mora imati tri svojstva kako bi sustav mogao postojati i napredovati u prijelazu iz jednog stanja u drugo:<\/p>\n<ol>\n<li><b>Sporazum <\/b> \u2013 svi ispravno funkcioniraju\u0107i \u010dvorovi moraju prihvatiti istu vrijednost (u literaturi, ovo svojstvo se tako\u0111er naziva svojstvo sigurnosti). Svi \u010dvorovi koji trenutno rade (nisu u kvaru i nisu izgubili vezu s ostalima) trebaju posti\u0107i sporazum i prihvatiti neku kona\u010dnu zajedni\u010dku vrijednost.\n<p>Ovdje je va\u017eno razumjeti da \u010dvorovi u ovom distribuiranom sustavu \u017eele posti\u0107i dogovor. Drugim rije\u010dima, govorimo o sustavima u kojima mo\u017ee do\u0107i do kvara (na primjer, neki \u010dvor mo\u017ee otkazati), ali u ovom sustavu nema \u010dvorova koji namjerno djeluju protiv drugih (zadatak bizantijskih generala). Zbog ovog svojstva sustav ostaje konzistentan.<\/li>\n<li><b>Integritet <\/b> \u2013 ako svi ispravno funkcioniraju\u0107i \u010dvorovi nude istu vrijednost <b>v<\/b>, svaki ispravno funkcioniraju\u0107i \u010dvor mora prihvatiti tu vrijednost <b>v<\/b>. <\/li>\n<li><b>Zavr\u0161etak <\/b>\u2013 svi ispravno funkcioniraju\u0107i \u010dvorovi na kraju \u0107e prihvatiti neku vrijednost (svojstvo aktivnosti), \u0161to omogu\u0107uje algoritmu napredovanje u sustavu. Svaki pojedina\u010dni ispravno funkcioniraju\u0107i \u010dvor mora prije ili kasnije prihvatiti kona\u010dnu vrijednost i potvrditi to: \u201eZa mene, ova vrijednost je istinita, sla\u017eem se s cijelim sustavom.\u201c<\/li>\n<\/ol>\n<p><\/p>\n<h4>Primjer rada algoritma konsenzusa<\/h4>\n<p>\nDok svojstva algoritma mo\u017eda nisu potpuno jasna, ilustrirajmo na primjeru koje faze prolazi najjednostavniji algoritam konsenzusa u sustavu s sinkronim modelom razmjene poruka, gdje svi \u010dvorovi rade ispravno, poruke se ne gube i ni\u0161ta se ne kvari (stvarno li se to doga\u0111a?).<\/p>\n<ol>\n<li>Sve po\u010dinje s prijedlogom ruke i srca (Propose). Pretpostavimo da se klijent povezao na \u010dvor nazvan \"\u010cvor 1\" i zapo\u010deo transakciju, \u0161aljuci \u010dvoru novu vrijednost \u2013 O. Od ovog trenutka \"\u010cvor 1\" nazivamo <b>proposer<\/b>. Kao proposer, \"\u010cvor 1\" sada mora obavijestiti cijeli sustav da ima nove podatke i \u0161alje poruke svim ostalim \u010dvorovima: \"Gledajte! Primio sam vrijednost 'O', i \u017eelim je zapisati! Molim vas, potvrdite da \u0107ete i vi zapisati 'O' u svoj log.\"\n<p><img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/bd6a9394229b8a2a5b0bf987ba53500b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Sljede\u0107a faza je glasovanje za predlo\u017eenu vrijednost (Voting). Za\u0161to je to potrebno? Mo\u017ee se dogoditi da su drugim \u010dvorovima do\u0161le novije informacije i da imaju podatke o istoj transakciji.\n<p><img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/7080d6222971c6bab012410ef9e074e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKada \u010dvor \"\u010cvor 1\" po\u0161alje svoj prijedlog, ostali \u010dvorovi provjeravaju u svojim logovima podatke o ovom doga\u0111aju. Ako nema proturje\u010dnosti, \u010dvorovi objavljuju: \"Da, nemam drugih podataka o ovom doga\u0111aju. Vrijednost 'O' je najnovija informacija koju smo dobili.\" <\/p>\n<p>U svakom drugom slu\u010daju, \u010dvorovi mogu odgovoriti \"\u010cvoru 1\": \"Slu\u0161aj! Imam novije podatke o ovoj transakciji. Ne 'O', nego ne\u0161to bolje.\"<\/p>\n<p>U fazi glasovanja \u010dvorovi donose odluku: ili svi prihva\u0107aju jednu vrijednost, ili netko od njih glasa protiv, ozna\u010davaju\u0107i da ima novije podatke. <\/li>\n<li> Ako je krug glasovanja pro\u0161ao uspje\u0161no, i svi su bili 'za', sustav prelazi u novu fazu - prihva\u0107anje vrijednosti (Accept). \"\u010cvor 1\" prikuplja sve odgovore drugih \u010dvorova i javlja: \"Svi su se slo\u017eili s vrijedno\u0161\u0107u 'O'! Sada slu\u017ebeno izjavljujem da je 'O' na\u0161a nova vrijednost, jedinstvena za sve! Zapisujte u svoju knji\u017eicu, ne zaboravite. Zapisujte u svoj log!\"\n<p><img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/c4bc2af053a27d7030824d45c3ad6def.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Ostali \u010dvorovi \u0161alju potvrdu (Accepted) da su zapisali vrijednost 'O', ni\u0161ta novo tijekom tog vremena nije pristiglo (svojstveni dvofazni commit). Nakon ovog zna\u010dajnog doga\u0111aja, smatramo da je distribuirana transakcija izvr\u0161ena.<br \/>\n <img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/2a9c49729f2607099385fee29f45d1f3.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/li>\n<\/ol>\n<p>\nTako algoritam konsenzusa u jednostavnom slu\u010daju sastoji se od \u010detiri koraka: propose, glasovanje (voting), prihva\u0107anje (accept), potvrda prihva\u0107anja (accepted).<\/p>\n<p>Ako na nekom koraku nismo uspjeli posti\u0107i saglasnost, algoritam se pokre\u0107e ispo\u010detka, uzimaju\u0107i u obzir informacije koje \u0107e pru\u017eiti \u010dvorovi koji su odbili potvrditi predlo\u017eenu vrijednost.<\/p>\n<h2>Konsenzus algoritam u asinkronom sustavu<\/h2>\n<p>\nDo sada je sve bilo jednostavno, jer se radilo o sinkronom modelu razmjene poruka. No, mi znamo da smo u modernom svijetu navikli raditi asinkrono. Kako onda sli\u010dan algoritam funkcionira u sustavu s asinkronim modelom razmjene poruka, gdje smatramo da vrijeme \u010dekanja na odgovor od \u010dvora mo\u017ee biti proizvoljno dugo (usput, kvar \u010dvora tako\u0111er mo\u017eemo smatrati primjerom kada \u010dvor mo\u017ee odgovarati koliko god dugo \u017eeli). <\/p>\n<blockquote><p>Sada kada znamo kako algoritam konsenzusa u osnovi funkcionira, pitanje za znati\u017eeljne \u010ditatelje koji su stigli do ovog mjesta: koliko \u010dvorova u sustavu od N \u010dvorova s asinkronim modelom poruka mo\u017ee otkazati da bi sustav i dalje mogao posti\u0107i konsenzus?<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">To\u010dan odgovor i obja\u0161njenje su ispod.<\/b>To\u010dan odgovor: <b>0<\/b>. Ako barem jedan \u010dvor u asinkronom sustavu otka\u017ee, sustav ne mo\u017ee posti\u0107i konsenzus. Ova tvrdnja je dokazana u poznatoj teoremi FLP (1985, Fischer, Lynch, Paterson, izvor u zavr\u0161nom dijelu \u010dlanka): \u201eNemogu\u0107nost postizanja distribuiranog konsenzusa pri otkazu barem jednog \u010dvora\u201c.<br \/>\n<img decoding=\"async\" alt=\"Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima\" src=\"\/wp-content\/uploads\/2019\/08\/92417aafe00841aaa41cbefe0386e21a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDakle, imamo problem, navikli smo da je sve asinkrono. A sada ovo. Kako dalje \u017eivjeti? <\/p>\n<p>Sada smo govorili o teoriji, o matematici. \u0160to zna\u010di \u201ekonsenzus se ne mo\u017ee posti\u0107i\u201c, prevo\u0111enjem s matemati\u010dkog jezika na na\u0161 \u2013 in\u017eenjerski? To zna\u010di da \u201ene mo\u017ee uvijek biti postignut\u201c, tj. postoji slu\u010daj u kojem konsenzus nije mogu\u0107e posti\u0107i. A koji je to slu\u010daj? <\/p>\n<p>To je zapravo kr\u0161enje svojstva \u017eivosti, opisano iznad. Nemamo zajedni\u010dki dogovor, i sustav ne mo\u017ee napredovati (ne mo\u017ee zavr\u0161iti u kona\u010dnom vremenu) u slu\u010daju kada nemamo odgovor od svih \u010dvorova. Jer u asinkronom sustavu nemamo predvidivo vrijeme odgovora, i ne mo\u017eemo znati je li \u010dvor otkazao ili samo dugo odgovara.<\/p>\n<p>No, u praksi mo\u017eemo prona\u0107i re\u0161enje. Neka na\u0161 algoritam mo\u017ee raditi dugo u slu\u010daju otkaza (potencijalno mo\u017ee raditi beskona\u010dno). No, u ve\u0107ini situacija, kada ve\u0107ina \u010dvorova ispravno funkcionira, imat \u0107emo napredak u sustavu. <\/p>\n<p>U praksi se susre\u0107emo s djelomi\u010dno sinkronim komunikacijskim modelima. Djelomi\u010dna sinkronost se shva\u0107a ovako: op\u0107enito imamo asinkroni model, ali se formalno uvodi koncept \u201eglobal stabilization time\u201c nekog vremenskog trenutka. <\/p>\n<p>Ovaj vremenski trenutak mo\u017ee se ne ostvarivati beskrajno dugo, ali jednom mora do\u0107i. Aktivirat \u0107e se virtualni alarm, i od tog trenutka mo\u017eemo predvidjeti delta vremena potrebno da poruke stignu. Od tog trenutka sustav se iz asinkronog pretvara u sinkroni. U praksi se radi upravo o takvim sustavima. <\/p>\n<h2>Paxos algoritam rje\u0161ava probleme konsenzusa<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Paxos_(computer_science)\">Paxos <\/a><\/noindex> \u2013 to je porodica algoritama koji rje\u0161avaju problem konsenzusa za djelomi\u010dno sinkrone sustave, pod uvjetom da neki \u010dvorovi mogu otkazati. Autor Paxosa je <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Leslie_Lamport\">Leslie Lamport<\/a><\/noindex>. On je 1989. godine predlo\u017eio formalni dokaz o postojanju i to\u010dnosti algoritma. <\/p>\n<p>No, dokaz se pokazao daleko od trivijalnog. Prva publikacija objavljena je tek 1998. godine (33 stranice) s opisom algoritma. Kako se ispostavilo, bila je izuzetno te\u0161ka za razumijevanje, a 2001. godine objavljeno je obja\u0161njenje \u010dlanka koje je zauzelo 14 stranica. Obujam publikacija naveden je kako bi se pokazalo da je problem konsenzusa zapravo vrlo slo\u017een i da iza takvih algoritama stoji ogroman trud najpametnijih ljudi.<\/p>\n<blockquote><p>Zanimljivo je da je sam Leslie Lamport u svom predavanju primijetio da u drugom \u010dlanku-obja\u0161njenju postoji jedno tvrdnja, jedna re\u010denica (nije precizirao koja), koja se mo\u017ee razli\u010dito tuma\u010diti. Zbog toga veliki broj modernih implementacija Paxosa ne radi potpuno ispravno. <\/p><\/blockquote>\n<p>\nDetaljna analiza rada Paxosa zahtijevat \u0107e vi\u0161e od jednog \u010dlanka, stoga \u0107u poku\u0161ati vrlo sa\u017eeto prenijeti glavnu ideju algoritma. U linkovima na kraju mog \u010dlanka prona\u0107i \u0107ete materijale za daljnje istra\u017eivanje ove teme.<\/p>\n<h4>Uloge u Paxosu<\/h4>\n<p>\nU algoritmu Paxos postoji pojam uloga. Razmotrit \u0107emo tri osnovne (postoje modifikacije s dodatnim ulogama):<\/p>\n<ol>\n<li><b>Proposers (tako\u0111er se mogu susresti termini: vo\u0111e ili koordinatori)<\/b>. To su momci koji saznaju o nekom novom predlogu od korisnika i preuzimaju ulogu lidera. Njihov zadatak je da pokrenu krug predlaganja novog vrednovanja i koordiniraju daljnje akcije \u010dvorova. Osim toga, Paxos dopu\u0161ta postojanje vi\u0161e lidera u odre\u0111enim situacijama.<\/li>\n<li><b>Priznavaoci (Glasa\u010di)<\/b>. To su \u010dvorovi koji glasaju za usvajanje ili odbijanje odre\u0111enog vrednovanja. Njihova uloga je veoma va\u017ena, jer upravo od njih zavisi odluka: u koje stanje \u0107e pre\u0107i (ili ne\u0107e pre\u0107i) sistem nakon slede\u0107e faze algoritma konsenzusa.<\/li>\n<li><b>U\u010ditelji<\/b>. \u010cvorovi koji jednostavno prihvataju i bele\u017ee novo usvojeno vrednovanje kada se stanje sistema promeni. Oni ne donose odluke, samo primaju podatke i mogu ih predati krajnjem korisniku. <\/li>\n<\/ol>\n<p>\nJedan \u010dvor mo\u017ee obavljati vi\u0161e uloga u razli\u010ditim situacijama. <\/p>\n<h4>Pojam kvoruma<\/h4>\n<p>\nPretpostavljamo da imamo sistem od <b>N<\/b> \u010dvorova. I od njih najvi\u0161e <b>F<\/b> \u010dvorova mo\u017ee otkazati rad. Ako F \u010dvorova otka\u017ee rad, to zna\u010di da u klasteru mora biti najmanje <b>2F + 1<\/b> \u010dvorova acceptora. <\/p>\n<p>To je neophodno za to da uvek, \u010dak i u najgorem scenariju, imamo ve\u0107inu \u201edobrih\u201c, ispravno funkcioni\u0161u\u0107ih \u010dvorova. To jest, <b>F + 1<\/b> \u201edobrih\u201c \u010dvorova koji su se slo\u017eili, i kona\u010dna vrednost \u0107e biti prihva\u0107ena. U suprotnom, mo\u017ee do\u0107i do situacije u kojoj razli\u010dite lokalne grupe prihvate razli\u010dite vrednosti i ne mogu se dogovoriti. Stoga nam je potrebno apsolutna ve\u0107ina da pobedimo u glasovanju.<\/p>\n<h4>Op\u0161ta ideja rada algoritma konsenzusa Paxos<\/h4>\n<p>\nAlgoritam Paxos podrazumeva dve velike faze, koje se dalje dele na dva koraka svaka:<\/p>\n<ol>\n<li><b>Faza 1a: Priprema<\/b>. U fazi pripreme vo\u0111a (proposer) obavje\u0161tava sve \u010dvorove: \u00abZapo\u010dinjemo novu fazu glasovanja. Imamo novi krug. Broj ovog kruga \u2013 n. Sada \u0107emo po\u010deti glasovati\u00bb. Dok samo obavje\u0161tava o po\u010detku novog ciklusa, ne objavljuje novu vrijednost. Zadatak ove faze je pokrenuti novi krug i obavijestiti sve o njegovom jedinstvenom broju. Broj kruga je va\u017ean, to mora biti vrijednost ve\u0107a od svih prethodnih brojeva glasovanja od svih prethodnih lidera. Zato \u0161to upravo zahvaljuju\u0107i broju kruga drugi \u010dvorovi u sustavu \u0107e shvatiti koliko su svje\u017ei podaci kod vo\u0111e. Vjerojatno ve\u0107 drugi \u010dvorovi imaju rezultate glasovanja iz mnogo kasnijih krugova i samo \u0107e obavijestiti vo\u0111u da je zapeo.<\/li>\n<li><b>Faza 1b: Obe\u0107anje<\/b>. Kada su \u010dvorovi-acceptori primili broj nove faze glasovanja, mogu\u0107a su dva ishoda: \n<ul>\n<li>Broj n novog glasovanja je ve\u0107i od broja bilo kojeg od prethodnih glasovanja u kojem je sudjelovao acceptor. Tada acceptor \u0161alje vo\u0111i obe\u0107anje da se vi\u0161e ne\u0107e sudjelovati u bilo kojem glasovanju s manjim brojem od n. Ako je acceptor ve\u0107 glasovao za neku vrijednost (tj. ve\u0107 je u drugoj fazi prihvatio neku vrijednost), tada uz svoje obe\u0107anje prila\u017ee prihva\u0107enu vrijednost i broj glasovanja u kojem je sudjelovao.<\/li>\n<li>U suprotnom, ako acceptor ve\u0107 zna za glasovanje s ve\u0107im brojem, mo\u017ee jednostavno ignorirati fazu pripreme i ne odgovarati vo\u0111i.<\/li>\n<\/ul>\n<\/li>\n<li><b>Faza 2a: Prihvati<\/b>. Vo\u0111a treba \u010dekati odgovor od kvoruma (ve\u0107ine \u010dvorova u sustavu) i, ako dobije potreban broj odgovora, ima dva mogu\u0107a scenarija: \n<ul>\n<li>Neki od acceptora poslali su vrijednosti za koje su ve\u0107 glasali. U tom slu\u010daju, vo\u0111a odabire vrijednost iz glasovanja s maksimalnim brojem. Nazovimo tu vrijednost x i \u0161alje svim \u010dvorovima poruku u obliku: \u201eAccept (n, x)\u201c, gdje je prva vrijednost broj glasovanja iz njegovog koraka Propose, a druga vrijednost je ona za koju smo se zapravo okupili, tj. vrijednost za koju se glasuje.<\/li>\n<li>Ako nijedan od acceptora nije poslao nikakve vrijednosti, nego su samo obe\u0107ali glasovati u ovom krugu, vo\u0111a mo\u017ee predlo\u017eiti da glasaju za svoju vrijednost, tj. vrijednost zbog koje je postao vo\u0111a. Nazovimo je y. On \u0161alje svim \u010dvorovima poruku u obliku: \u201eAccept (n, y)\u201c, na sli\u010dan na\u010din kao u prethodnom ishodu.<\/li>\n<\/ul>\n<\/li>\n<li><b>Faza 2b: Prihva\u0107eno<\/b>. Dalje, \u010dvorovi-acceptori, prilikom primanja poruke \u201eAccept(&hellip;)\u201c, od vo\u0111e sla\u017eu se s njim (\u0161alju svim \u010dvorovima potvrdu da se sla\u017eu s novom vrijedno\u0161\u0107u) samo ako nisu obe\u0107ali nekom (drugom) vo\u0111i sudjelovati u glasovanjima s brojem runde <b>n' &gt; n<\/b>, u suprotnom ignoriraju zahtjev za potvrdom.\n<p>Ako je lideru odgovorilo ve\u0107ina \u010dvorova, i svi su potvrdili novu vrijednost, nova vrijednost se smatra prihva\u0107enom. Hura! Ako ve\u0107ina nije dostignuta ili postoje \u010dvorovi koji su odbili prihvatiti novu vrijednost, sve po\u010dinje iznova.<\/li>\n<\/ol>\n<p>\nEto kako radi algoritam Paxos. Svaka od ovih faza ima mnogo suptilnosti, gotovo nismo razmatrali razne tipove gre\u0161aka, probleme vi\u0161estrukih lidera i jo\u0161 mnogo toga, ali svrha ovog \u010dlanka je samo upoznati \u010ditatelja s svijetom distribuiranih ra\u010dunala na visokom nivou.<\/p>\n<p>Tako\u0111er vrijedi napomenuti da Paxos nije jedini svog tipa, postoje i drugi algoritmi, na primjer, <noindex><a rel=\"nofollow\" href=\"https:\/\/raft.github.io\/\">Raft<\/a><\/noindex>, ali to je tema za drugi \u010dlanak.<\/p>\n<h2>Linkovi na materijale za daljnje istra\u017eivanje<\/h2>\n<p>\nRazina \u201enovih\u201c:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/s\/story\/lets-take-a-crack-at-understanding-distributed-consensus-dad23d0dc95\">Kako funkcionira distribuirani konsenzus?<\/a><\/noindex>, Preethi Kasireddy, \u010dlanak na Mediumu<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@nevverlander\/paxos-made-simple-for-real-aa221be7d91b\">Paxos je jednostavan. Zaista<\/a><\/noindex>, Adi Kancherla, \u010dlanak na Mediumu<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/\">Decentralizirane misli<\/a><\/noindex>, Ittai Abraham, blog<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/2019-06-01-2019-5-31-models\/\">Sinkronicitet, asinkronicitet i parcijalni sinkronicitet<\/a><\/noindex>, Ittai Abraham, \u010dlanak na blogu<\/li>\n<\/ul>\n<p>\nRazina \u201eLeslie Lamport\u201c:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Nemogu\u0107nost distribuiranog konsenzusa s jednim gre\u0161kom (FLP nemogu\u0107nost)<\/a><\/noindex>, Fischer, Lynch i Paterson, istra\u017eiva\u010dki rad, 1985<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/lamport-paxos.pdf\">Parlament u dijelu vremena<\/a><\/noindex>, Leslie Lamport, istra\u017eiva\u010dki rad, 1998<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/paxos-simple.pdf\">Paxos je jednostavan<\/a><\/noindex>, Leslie Lamport, istra\u017eiva\u010dki rad, 2001<\/li>\n<\/ul>\n<p>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Ma\u010dka Schr\u00f6dinger bez kutije: problem konsenzusa u distribuiranim sustavima | ProHoster","description":"Dakle, zamislite. U sobi su zaklju\u010dana 5 ma\u010daka, i da bi i\u0161le probuditi vlasnika, moraju se sve zajedno dogovoriti o tome, jer vrata mogu otvoriti samo petorica u naslanjanju na njih.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/37335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=37335"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/37335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/28009"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=37335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=37335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=37335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}