"/>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?/h1>

Posted JavaGuide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?/h1>

相关的知识,希望对你有一定的参考价值。



鏈枃鐢?FrancisQ 鑰佸摜鎶曠锛?/span>

鏂囩珷寰堥暱锛岀偣璧炲啀鐪嬶紝鍏绘垚濂戒範鎯煒嬸煒嬸煒?/span>

ZooKeeper

濂戒箙涓嶈

绂讳笂涓€绡囨枃绔犵殑鍙戝竷涔熷揩涓€涓湀浜嗭紝鎯虫兂宸茬粡蹇竴涓湀娌″啓涓滆タ浜嗭紝鍏朵腑鍙兘鏈夋湡鏈€冭瘯銆佽绋嬭璁″拰椹剧収鑰冭瘯锛屼絾杩欓兘涓嶆槸鍊熷彛锛?/p>

涓€鍒板啲澶╁氨鎳掔殑涓嶈锛屾湜骞垮ぇ鎺樺弸鐫d績鎴戰煓勷煓勨湇锔忊湇锔忋€?/p>

鈥?/span>

鏂囩珷寰堥暱锛屽厛璧炲悗鐪嬶紝鍏绘垚涔犳儻銆傗潳锔?馃А 馃挍 馃挌 馃挋 馃挏

鈥?/span>

浠€涔堟槸ZooKeeper

ZooKeeper 鐢?nbsp;Yahoo 寮€鍙戯紝鍚庢潵鎹愯禒缁欎簡 Apache 锛岀幇宸叉垚涓?nbsp;Apache 椤剁骇椤圭洰銆?code class="mq-25">ZooKeeper 鏄竴涓紑婧愮殑鍒嗗竷寮忓簲鐢ㄧ▼搴忓崗璋冩湇鍔″櫒锛屽叾涓哄垎甯冨紡绯荤粺鎻愪緵涓€鑷存€ф湇鍔°€傚叾涓€鑷存€ф槸閫氳繃鍩轰簬 Paxos 绠楁硶鐨?nbsp;ZAB 鍗忚瀹屾垚鐨勩€傚叾涓昏鍔熻兘鍖呮嫭锛氶厤缃淮鎶ゃ€佸垎甯冨紡鍚屾銆侀泦缇ょ鐞嗐€佸垎甯冨紡浜嬪姟绛夈€?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= zookeeper

绠€鍗曟潵璇达紝 ZooKeeper 鏄竴涓?nbsp;鍒嗗竷寮忓崗璋冩湇鍔℃鏋?/strong> 銆傚垎甯冨紡锛熷崗璋冩湇鍔★紵杩欏暐鐜╂剰锛燄煠旔煠?/p>

鍏跺疄瑙i噴鍒板垎甯冨紡杩欎釜姒傚康鐨勬椂鍊欙紝鎴戝彂鐜版湁浜涘悓瀛﹀苟涓嶆槸鑳芥妸 **鍒嗗竷寮忓拰闆嗙兢 **杩欎袱涓蹇靛緢濂界殑鐞嗚В閫忋€傚墠娈垫椂闂存湁鍚屽鍜屾垜鎺㈣璧峰垎甯冨紡鐨勪笢瑗匡紝浠栬鍒嗗竷寮忎笉灏辨槸鍔犳満鍣ㄥ悧锛熶竴鍙版満鍣ㄤ笉澶熺敤鍐嶅姞涓€鍙版姉鍘嬪憲銆傚綋鐒跺姞鏈哄櫒杩欑璇存硶涔熸棤鍙帤闈烇紝浣犱竴涓垎甯冨紡绯荤粺蹇呭畾娑夊強鍒板涓満鍣紝浣嗘槸浣犲埆蹇樹簡锛岃绠楁満瀛︾涓繕鏈変竴涓浉浼肩殑姒傚康鈥斺€?nbsp;Cluster 锛岄泦缇や笉涔熸槸鍔犳満鍣ㄥ悧锛熶絾鏄?闆嗙兢 鍜?鍒嗗竷寮?鍏跺疄灏辨槸涓や釜瀹屽叏涓嶅悓鐨勬蹇点€?/p>

姣斿锛屾垜鐜板湪鏈変竴涓鏉€鏈嶅姟锛屽苟鍙戦噺澶ぇ鍗曟満绯荤粺鎵垮彈涓嶄綇锛岄偅鎴戝姞鍑犲彴鏈嶅姟鍣ㄤ篃 涓€鏍?/strong> 鎻愪緵绉掓潃鏈嶅姟锛岃繖涓椂鍊欏氨鏄?nbsp;Cluster 闆嗙兢 銆?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= cluster

浣嗘槸锛屾垜鐜板湪鎹竴绉嶆柟寮忥紝鎴戝皢涓€涓鏉€鏈嶅姟 鎷嗗垎鎴愬涓瓙鏈嶅姟 锛屾瘮濡傚垱寤鸿鍗曟湇鍔★紝澧炲姞绉垎鏈嶅姟锛屾墸浼樻儬鍒告湇鍔$瓑绛夛紝鐒跺悗鎴戝皢杩欎簺瀛愭湇鍔¢兘閮ㄧ讲鍦ㄤ笉鍚岀殑鏈嶅姟鍣ㄤ笂 锛岃繖涓椂鍊欏氨鏄? Distributed 鍒嗗竷寮?/strong> 銆?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= distributed

鑰屾垜涓轰粈涔堝弽椹冲悓瀛︽墍璇寸殑鍒嗗竷寮忓氨鏄姞鏈哄櫒鍛紵鍥犱负鎴戣涓哄姞鏈哄櫒鏇村姞閫傜敤浜庢瀯寤洪泦缇わ紝鍥犱负瀹冪湡鏄彧鏈夊姞鏈哄櫒銆傝€屽浜庡垎甯冨紡鏉ヨ锛屼綘棣栧厛闇€瑕佸皢涓氬姟杩涜鎷嗗垎锛岀劧鍚庡啀鍔犳満鍣紙涓嶄粎浠呮槸鍔犳満鍣ㄩ偅涔堢畝鍗曪級锛屽悓鏃朵綘杩樿鍘昏В鍐冲垎甯冨紡甯︽潵鐨勪竴绯诲垪闂銆?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=姣斿鍚勪釜鍒嗗竷寮忕粍浠跺浣曞崗璋冭捣鏉ワ紝濡備綍鍑忓皯鍚勪釜绯荤粺涔嬮棿鐨勮€﹀悎搴︼紝鍒嗗竷寮忎簨鍔$殑澶勭悊锛屽浣曞幓閰嶇疆鏁翠釜鍒嗗竷寮忕郴缁熺瓑绛夈€?code class="mq-55">ZooKeeper 涓昏灏辨槸瑙e喅杩欎簺闂鐨勩€?/p>

涓€鑷存€ч棶棰?/span>

璁捐涓€涓垎甯冨紡绯荤粺蹇呭畾浼氶亣鍒颁竴涓棶棰樷€斺€?nbsp;鍥犱负鍒嗗尯瀹瑰繊鎬э紙partition tolerance锛夌殑瀛樺湪锛屽氨蹇呭畾瑕佹眰鎴戜滑闇€瑕佸湪绯荤粺鍙敤鎬э紙availability锛夊拰鏁版嵁涓€鑷存€э紙consistency锛変腑鍋氬嚭鏉冭  銆傝繖灏辨槸钁楀悕鐨?nbsp;CAP 瀹氱悊銆?/p>

鐞嗚В璧锋潵鍏跺疄寰堢畝鍗曪紝姣斿璇存妸涓€涓彮绾т綔涓烘暣涓郴缁燂紝鑰屽鐢熸槸绯荤粺涓殑涓€涓釜鐙珛鐨勫瓙绯荤粺銆傝繖涓椂鍊欑彮閲岀殑灏忕孩灏忔槑鍋峰伔璋堟亱鐖辫鐝噷鐨勫ぇ鍢村反灏忚姳鍙戠幇浜嗭紝灏忚姳娆e枩鑻ョ媯鍛婅瘔浜嗗懆鍥寸殑浜猴紝鐒跺悗灏忕孩灏忔槑璋堟亱鐖辩殑娑堟伅鍦ㄧ彮绾ч噷浼犳挱璧锋潵浜嗐€傚綋鍦ㄦ秷鎭殑浼犳挱锛堟暎甯冿級杩囩▼涓紝浣犳姄鍒颁竴涓悓瀛﹂棶浠栦滑鐨勬儏鍐碉紝濡傛灉鍥炵瓟浣犱笉鐭ラ亾锛岄偅涔堣鏄庢暣涓彮绾х郴缁熷嚭鐜颁簡鏁版嵁涓嶄竴鑷寸殑闂锛堝洜涓哄皬鑺卞凡缁忕煡閬撹繖涓秷鎭簡锛夈€傝€屽鏋滀粬鐩存帴涓嶅洖绛斾綘锛屽洜涓烘暣涓彮绾ф湁娑堟伅鍦ㄨ繘琛屼紶鎾紙涓轰簡淇濊瘉涓€鑷存€э紝闇€瑕佹墍鏈変汉閮界煡閬撴墠鍙彁渚涙湇鍔★級锛岃繖涓椂鍊欏氨鍑虹幇浜嗙郴缁熺殑鍙敤鎬ч棶棰樸€?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=鑰屼笂杩板墠鑰呭氨鏄?nbsp;Eureka 鐨勫鐞嗘柟寮忥紝瀹冧繚璇佷簡AP锛堝彲鐢ㄦ€э級锛屽悗鑰呭氨鏄垜浠粖澶╂墍瑕佸皢鐨?nbsp;ZooKeeper 鐨勫鐞嗘柟寮忥紝瀹冧繚璇佷簡CP锛堟暟鎹竴鑷存€э級銆?/p>

涓€鑷存€у崗璁拰绠楁硶

鑰屼负浜嗚В鍐虫暟鎹竴鑷存€ч棶棰橈紝鍦ㄧ瀛﹀鍜岀▼搴忓憳鐨勪笉鏂帰绱腑锛屽氨鍑虹幇浜嗗緢澶氱殑涓€鑷存€у崗璁拰绠楁硶銆傛瘮濡?2PC锛堜袱闃舵鎻愪氦锛夛紝3PC锛堜笁闃舵鎻愪氦锛夛紝Paxos绠楁硶绛夌瓑銆?/p>

杩欐椂鍊欒浣犳€濊€冧竴涓棶棰橈紝鍚屽涔嬮棿濡傛灉閲囩敤浼犵焊鏉$殑鏂瑰紡鍘讳紶鎾秷鎭紝閭d箞灏变細鍑虹幇涓€涓棶棰樷€斺€旀垜鍜嬬煡閬撴垜鐨勫皬绾告潯鏈夋病鏈変紶鍒版垜鎯宠浼犻€掔殑閭d釜浜烘墜涓憿锛熶竾涓€琚摢涓皬瀹朵紮缁欏姭鎸佺鏀逛簡鍛紝瀵瑰惂锛?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=杩欎釜鏃跺€欏氨寮曠敵鍑轰竴涓蹇碘€斺€?nbsp;鎷滃崰搴皢鍐涢棶棰?/strong> 銆傚畠鎰忔寚 鍦ㄤ笉鍙潬淇¢亾涓婅瘯鍥鹃€氳繃娑堟伅浼犻€掔殑鏂瑰紡杈惧埌涓€鑷存€ф槸涓嶅彲鑳界殑锛?鎵€浠ユ墍鏈夌殑涓€鑷存€х畻娉曠殑 蹇呰鍓嶆彁 灏辨槸瀹夊叏鍙潬鐨勬秷鎭€氶亾銆?/p>

鑰屼负浠€涔堣鍘昏В鍐虫暟鎹竴鑷存€х殑闂锛熶綘鎯虫兂锛屽鏋滀竴涓鏉€绯荤粺灏嗘湇鍔℃媶鍒嗘垚浜嗕笅璁㈠崟鍜屽姞绉垎鏈嶅姟锛岃繖涓や釜鏈嶅姟閮ㄧ讲鍦ㄤ笉鍚岀殑鏈哄櫒涓婁簡锛屼竾涓€鍦ㄦ秷鎭殑浼犳挱杩囩▼涓Н鍒嗙郴缁熷畷鏈轰簡锛屾€讳笉鑳戒綘杩欒竟涓嬩簡璁㈠崟鍗存病鍔犵Н鍒嗗惂锛熶綘鎬诲緱淇濊瘉涓よ竟鐨勬暟鎹渶瑕佷竴鑷村惂锛?/p>

2PC锛堜袱闃舵鎻愪氦锛?/h3>

涓ら樁娈垫彁浜ゆ槸涓€绉嶄繚璇佸垎甯冨紡绯荤粺鏁版嵁涓€鑷存€х殑鍗忚锛岀幇鍦ㄥ緢澶氭暟鎹簱閮芥槸閲囩敤鐨勪袱闃舵鎻愪氦鍗忚鏉ュ畬鎴?nbsp;鍒嗗竷寮忎簨鍔?/strong> 鐨勫鐞嗐€?/p>

鍦ㄤ粙缁?PC涔嬪墠锛屾垜浠厛鏉ユ兂鎯冲垎甯冨紡浜嬪姟鍒板簳鏈変粈涔堥棶棰樺憿锛?/p>

杩樻嬁绉掓潃绯荤粺鐨勪笅璁㈠崟鍜屽姞绉垎涓や釜绯荤粺鏉ヤ妇渚嬪惂锛堟垜鎯充綘浠彲鑳介兘鍚愪簡馃ぎ馃ぎ馃ぎ锛夛紝鎴戜滑姝ゆ椂涓嬪畬璁㈠崟浼氬彂涓秷鎭粰绉垎绯荤粺鍛婅瘔瀹冧笅闈㈣澧炲姞绉垎浜嗐€傚鏋滄垜浠粎浠呮槸鍙戦€佷竴涓秷鎭篃涓嶆敹鍥炲锛岄偅涔堟垜浠殑璁㈠崟绯荤粺鎬庝箞鑳界煡閬撶Н鍒嗙郴缁熺殑鏀跺埌娑堟伅鐨勬儏鍐靛憿锛熷鏋滄垜浠鍔犱竴涓敹鍥炲鐨勮繃绋嬶紝閭d箞褰撶Н鍒嗙郴缁熸敹鍒版秷鎭悗杩斿洖缁欒鍗曠郴缁熶竴涓?nbsp;Response 锛屼絾鍦ㄤ腑闂村嚭鐜颁簡缃戠粶娉㈠姩锛岄偅涓洖澶嶆秷鎭病鏈夊彂閫佹垚鍔燂紝璁㈠崟绯荤粺鏄笉鏄互涓虹Н鍒嗙郴缁熸秷鎭帴鏀跺け璐ヤ簡锛熷畠鏄笉鏄細鍥炴粴浜嬪姟锛熶絾姝ゆ椂绉垎绯荤粺鏄垚鍔熸敹鍒版秷鎭殑锛屽畠灏变細鍘诲鐞嗘秷鎭劧鍚庣粰鐢ㄦ埛澧炲姞绉垎锛岃繖涓椂鍊欏氨浼氬嚭鐜扮Н鍒嗗姞浜嗕絾鏄鍗曟病涓嬫垚鍔熴€?/p>

鎵€浠ユ垜浠墍闇€瑕佽В鍐崇殑鏄湪鍒嗗竷寮忕郴缁熶腑锛屾暣涓皟鐢ㄩ摼涓紝鎴戜滑鎵€鏈夋湇鍔$殑鏁版嵁澶勭悊瑕佷箞閮芥垚鍔熻涔堥兘澶辫触锛屽嵆鎵€鏈夋湇鍔$殑 鍘熷瓙鎬ч棶棰?/strong> 銆?/p>

鍦ㄤ袱闃舵鎻愪氦涓紝涓昏娑夊強鍒颁袱涓鑹诧紝鍒嗗埆鏄崗璋冭€呭拰鍙備笌鑰呫€?/p>

绗竴闃舵锛氬綋瑕佹墽琛屼竴涓垎甯冨紡浜嬪姟鐨勬椂鍊欙紝浜嬪姟鍙戣捣鑰呴鍏堝悜鍗忚皟鑰呭彂璧蜂簨鍔¤姹傦紝鐒跺悗鍗忚皟鑰呬細缁欐墍鏈夊弬涓庤€呭彂閫?nbsp;prepare 璇锋眰锛堝叾涓寘鎷簨鍔″唴瀹癸級鍛婅瘔鍙備笌鑰呬綘浠渶瑕佹墽琛屼簨鍔′簡锛屽鏋滆兘鎵ц鎴戝彂鐨勪簨鍔″唴瀹归偅涔堝氨鍏堟墽琛屼絾涓嶆彁浜わ紝鎵ц鍚庤缁欐垜鍥炲銆傜劧鍚庡弬涓庤€呮敹鍒?nbsp;prepare 娑堟伅鍚庯紝浠栦滑浼氬紑濮嬫墽琛屼簨鍔★紙浣嗕笉鎻愪氦锛夛紝骞跺皢 Undo 鍜?nbsp;Redo 淇℃伅璁板叆浜嬪姟鏃ュ織涓紝涔嬪悗鍙備笌鑰呭氨鍚戝崗璋冭€呭弽棣堟槸鍚﹀噯澶囧ソ浜嗐€?/p>

绗簩闃舵锛氱浜岄樁娈典富瑕佹槸鍗忚皟鑰呮牴鎹弬涓庤€呭弽棣堢殑鎯呭喌鏉ュ喅瀹氭帴涓嬫潵鏄惁鍙互杩涜浜嬪姟鐨勬彁浜ゆ搷浣滐紝鍗虫彁浜や簨鍔℃垨鑰呭洖婊氫簨鍔°€?/p>

姣斿杩欎釜鏃跺€?nbsp;鎵€鏈夌殑鍙備笌鑰?/strong> 閮借繑鍥炰簡鍑嗗濂戒簡鐨勬秷鎭紝杩欎釜鏃跺€欏氨杩涜浜嬪姟鐨勬彁浜わ紝鍗忚皟鑰呮鏃朵細缁欐墍鏈夌殑鍙備笌鑰呭彂閫?nbsp;Commit 璇锋眰 锛屽綋鍙備笌鑰呮敹鍒?nbsp;Commit 璇锋眰鐨勬椂鍊欎細鎵ц鍓嶉潰鎵ц鐨勪簨鍔$殑 鎻愪氦鎿嶄綔 锛屾彁浜ゅ畬姣曚箣鍚庡皢缁欏崗璋冭€呭彂閫佹彁浜ゆ垚鍔熺殑鍝嶅簲銆?/p>

鑰屽鏋滃湪绗竴闃舵骞朵笉鏄墍鏈夊弬涓庤€呴兘杩斿洖浜嗗噯澶囧ソ浜嗙殑娑堟伅锛岄偅涔堟鏃跺崗璋冭€呭皢浼氱粰鎵€鏈夊弬涓庤€呭彂閫?nbsp;鍥炴粴浜嬪姟鐨?nbsp;rollback 璇锋眰锛屽弬涓庤€呮敹鍒颁箣鍚庡皢浼?nbsp;鍥炴粴瀹冨湪绗竴闃舵鎵€鍋氱殑浜嬪姟澶勭悊 锛岀劧鍚庡啀灏嗗鐞嗘儏鍐佃繑鍥炵粰鍗忚皟鑰咃紝鏈€缁堝崗璋冭€呮敹鍒板搷搴斿悗渚跨粰浜嬪姟鍙戣捣鑰呰繑鍥炲鐞嗗け璐ョ殑缁撴灉銆?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 2PC娴佺▼

涓汉瑙夊緱 2PC 瀹炵幇寰楄繕鏄瘮杈冮浮鑲嬬殑锛屽洜涓轰簨瀹炰笂瀹冨彧瑙e喅浜嗗悇涓簨鍔$殑鍘熷瓙鎬ч棶棰橈紝闅忎箣涔熷甫鏉ヤ簡寰堝鐨勯棶棰樸€?/p>

鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <ul data-tool=
  • 鍗曠偣鏁呴殰闂锛屽鏋滃崗璋冭€呮寕浜嗛偅涔堟暣涓郴缁熼兘澶勪簬涓嶅彲鐢ㄧ殑鐘舵€佷簡銆?
  • 闃诲闂锛屽嵆褰撳崗璋冭€呭彂閫?nbsp; prepare 璇锋眰锛屽弬涓庤€呮敹鍒颁箣鍚庡鏋滆兘澶勭悊閭d箞瀹冨皢浼氳繘琛屼簨鍔$殑澶勭悊浣嗗苟涓嶆彁浜わ紝杩欎釜鏃跺€欎細涓€鐩村崰鐢ㄧ潃璧勬簮涓嶉噴鏀撅紝濡傛灉姝ゆ椂鍗忚皟鑰呮寕浜嗭紝閭d箞杩欎簺璧勬簮閮戒笉浼氬啀閲婃斁浜嗭紝杩欎細鏋佸ぇ褰卞搷鎬ц兘銆?
  • 鏁版嵁涓嶄竴鑷撮棶棰?/strong>锛屾瘮濡傚綋绗簩闃舵锛屽崗璋冭€呭彧鍙戦€佷簡涓€閮ㄥ垎鐨?nbsp; commit 璇锋眰灏辨寕浜嗭紝閭d箞涔熷氨鎰忓懗鐫€锛屾敹鍒版秷鎭殑鍙備笌鑰呬細杩涜浜嬪姟鐨勬彁浜わ紝鑰屽悗闈㈡病鏀跺埌鐨勫垯涓嶄細杩涜浜嬪姟鎻愪氦锛岄偅涔堣繖鏃跺€欏氨浼氫骇鐢熸暟鎹笉涓€鑷存€ч棶棰樸€?
  • 3PC锛堜笁闃舵鎻愪氦锛?/h3>

    鍥犱负2PC瀛樺湪鐨勪竴绯诲垪闂锛屾瘮濡傚崟鐐癸紝瀹归敊鏈哄埗缂洪櫡绛夌瓑锛屼粠鑰屼骇鐢熶簡 3PC锛堜笁闃舵鎻愪氦锛?/strong> 銆傞偅涔堣繖涓夐樁娈靛張鍒嗗埆鏄粈涔堝憿锛?/p>

    鈥?/span>

    鍗冧竾涓嶈鍚C鐞嗚В鎴愪釜浜虹數鑴戜簡锛屽叾瀹炰粬浠槸 phase-commit 鐨勭缉鍐欙紝鍗抽樁娈垫彁浜ゃ€?/p> 鈥?/span>

    1. CanCommit闃舵锛氬崗璋冭€呭悜鎵€鏈夊弬涓庤€呭彂閫?nbsp; CanCommit 璇锋眰锛屽弬涓庤€呮敹鍒拌姹傚悗浼氭牴鎹嚜韬儏鍐垫煡鐪嬫槸鍚﹁兘鎵ц浜嬪姟锛屽鏋滃彲浠ュ垯杩斿洖 YES 鍝嶅簲骞惰繘鍏ラ澶囩姸鎬侊紝鍚﹀垯杩斿洖 NO 銆?
    2. PreCommit闃舵锛氬崗璋冭€呮牴鎹弬涓庤€呰繑鍥炵殑鍝嶅簲鏉ュ喅瀹氭槸鍚﹀彲浠ヨ繘琛屼笅闈㈢殑  PreCommit 鎿嶄綔銆傚鏋滀笂闈㈠弬涓庤€呰繑鍥炵殑閮芥槸 YES锛岄偅涔堝崗璋冭€呭皢鍚戞墍鏈夊弬涓庤€呭彂閫?nbsp; PreCommit 棰勬彁浜よ姹傦紝 鍙備笌鑰呮敹鍒伴鎻愪氦璇锋眰鍚庯紝浼氳繘琛屼簨鍔$殑鎵ц鎿嶄綔锛屽苟灏?nbsp;Undo 鍜?nbsp;Redo 淇℃伅鍐欏叆浜嬪姟鏃ュ織涓?/strong> 锛屾渶鍚庡鏋滃弬涓庤€呴『鍒╂墽琛屼簡浜嬪姟鍒欑粰鍗忚皟鑰呰繑鍥炴垚鍔熺殑鍝嶅簲銆傚鏋滃湪绗竴闃舵鍗忚皟鑰呮敹鍒颁簡  浠讳綍涓€涓?NO 鐨勪俊鎭紝鎴栬€?nbsp; 鍦ㄤ竴瀹氭椂闂村唴 骞舵病鏈夋敹鍒板叏閮ㄧ殑鍙備笌鑰呯殑鍝嶅簲锛岄偅涔堝氨浼氫腑鏂簨鍔★紝瀹冧細鍚戞墍鏈夊弬涓庤€呭彂閫佷腑鏂姹傦紙abort锛夛紝鍙備笌鑰呮敹鍒颁腑鏂姹備箣鍚庝細绔嬪嵆涓柇浜嬪姟锛屾垨鑰呭湪涓€瀹氭椂闂村唴娌℃湁鏀跺埌鍗忚皟鑰呯殑璇锋眰锛屽畠涔熶細涓柇浜嬪姟銆?
    3. DoCommit闃舵锛氳繖涓樁娈靛叾瀹炲拰  2PC 鐨勭浜岄樁娈靛樊涓嶅锛屽鏋滃崗璋冭€呮敹鍒颁簡鎵€鏈夊弬涓庤€呭湪  PreCommit 闃舵鐨?YES 鍝嶅簲锛岄偅涔堝崗璋冭€呭皢浼氱粰鎵€鏈夊弬涓庤€呭彂閫?nbsp; DoCommit 璇锋眰锛? 鍙備笌鑰呮敹鍒?nbsp;DoCommit 璇锋眰鍚庡垯浼氳繘琛屼簨鍔$殑鎻愪氦宸ヤ綔锛屽畬鎴愬悗鍒欎細缁欏崗璋冭€呰繑鍥炲搷搴旓紝鍗忚皟鑰呮敹鍒版墍鏈夊弬涓庤€呰繑鍥炵殑浜嬪姟鎻愪氦鎴愬姛鐨勫搷搴斾箣鍚庡垯瀹屾垚浜嬪姟銆傝嫢鍗忚皟鑰呭湪  PreCommit 闃舵  鏀跺埌浜嗕换浣曚竴涓?NO 鎴栬€呭湪涓€瀹氭椂闂村唴娌℃湁鏀跺埌鎵€鏈夊弬涓庤€呯殑鍝嶅簲 锛岄偅涔堝氨浼氳繘琛屼腑鏂姹傜殑鍙戦€侊紝鍙備笌鑰呮敹鍒颁腑鏂姹傚悗鍒欎細  閫氳繃涓婇潰璁板綍鐨勫洖婊氭棩蹇?/strong> 鏉ヨ繘琛屼簨鍔$殑鍥炴粴鎿嶄綔锛屽苟鍚戝崗璋冭€呭弽棣堝洖婊氱姸鍐碉紝鍗忚皟鑰呮敹鍒板弬涓庤€呰繑鍥炵殑娑堟伅鍚庯紝涓柇浜嬪姟銆?
    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 3PC娴佺▼
    鈥?/span>

    杩欓噷鏄?nbsp;3PC 鍦ㄦ垚鍔熺殑鐜涓嬬殑娴佺▼鍥撅紝浣犲彲浠ョ湅鍒?nbsp;3PC 鍦ㄥ緢澶氬湴鏂硅繘琛屼簡瓒呮椂涓柇鐨勫鐞嗭紝姣斿鍗忚皟鑰呭湪鎸囧畾鏃堕棿鍐呬负鏀跺埌鍏ㄩ儴鐨勭‘璁ゆ秷鎭垯杩涜浜嬪姟涓柇鐨勫鐞嗭紝杩欐牱鑳?nbsp;鍑忓皯鍚屾闃诲鐨勬椂闂?/strong> 銆傝繕鏈夐渶瑕佹敞鎰忕殑鏄紝3PC 鍦?nbsp;DoCommit 闃舵鍙備笌鑰呭鏈敹鍒板崗璋冭€呭彂閫佺殑鎻愪氦浜嬪姟鐨勮姹傦紝瀹冧細鍦ㄤ竴瀹氭椂闂村唴杩涜浜嬪姟鐨勬彁浜?/strong>銆備负浠€涔堣繖涔堝仛鍛紵鏄洜涓鸿繖涓椂鍊欐垜浠偗瀹?span class="mq-160">淇濊瘉浜嗗湪绗竴闃舵鎵€鏈夌殑鍗忚皟鑰呭叏閮ㄨ繑鍥炰簡鍙互鎵ц浜嬪姟鐨勫搷搴?/strong>锛岃繖涓椂鍊欐垜浠湁鐞嗙敱鐩镐俊鍏朵粬绯荤粺閮借兘杩涜浜嬪姟鐨勬墽琛屽拰鎻愪氦锛屾墍浠?span class="mq-162">涓嶇鍗忚皟鑰呮湁娌℃湁鍙戞秷鎭粰鍙備笌鑰咃紝杩涘叆绗笁闃舵鍙備笌鑰呴兘浼氳繘琛屼簨鍔$殑鎻愪氦鎿嶄綔銆?/p> 鈥?/span>

    鎬讳箣锛?code class="mq-165">3PC 閫氳繃涓€绯诲垪鐨勮秴鏃舵満鍒跺緢濂界殑缂撹В浜嗛樆濉為棶棰橈紝浣嗘槸鏈€閲嶈鐨勪竴鑷存€у苟娌℃湁寰楀埌鏍规湰鐨勮В鍐筹紝姣斿鍦?nbsp;PreCommit 闃舵锛屽綋涓€涓弬涓庤€呮敹鍒颁簡璇锋眰涔嬪悗鍏朵粬鍙備笌鑰呭拰鍗忚皟鑰呮寕浜嗘垨鑰呭嚭鐜颁簡缃戠粶鍒嗗尯锛岃繖涓椂鍊欐敹鍒版秷鎭殑鍙備笌鑰呴兘浼氳繘琛屼簨鍔℃彁浜わ紝杩欏氨浼氬嚭鐜版暟鎹笉涓€鑷存€ч棶棰樸€?/p>

    鎵€浠ワ紝瑕佽В鍐充竴鑷存€ч棶棰樿繕闇€瑕侀潬 Paxos 绠楁硶猸愶笍 猸愶笍 猸愶笍 銆?/p>

    Paxos 绠楁硶

    Paxos 绠楁硶鏄熀浜?span class="mq-172">娑堟伅浼犻€掍笖鍏锋湁楂樺害瀹归敊鐗规€х殑涓€鑷存€х畻娉?/strong>锛屾槸鐩墠鍏鐨勮В鍐冲垎甯冨紡涓€鑷存€ч棶棰樻渶鏈夋晥鐨勭畻娉曚箣涓€锛?span class="mq-173">鍏惰В鍐崇殑闂灏辨槸鍦ㄥ垎甯冨紡绯荤粺涓浣曞氨鏌愪釜鍊硷紙鍐宠锛夎揪鎴愪竴鑷?/strong> 銆?/p>

    鍦?nbsp;Paxos 涓富瑕佹湁涓変釜瑙掕壊锛屽垎鍒负 Proposer鎻愭鑰?/code>銆?code class="mq-177">Acceptor琛ㄥ喅鑰?/code>銆?code class="mq-178">Learner瀛︿範鑰?/code>銆?code class="mq-179">Paxos 绠楁硶鍜?nbsp;2PC 涓€鏍凤紝涔熸湁涓や釜闃舵锛屽垎鍒负 Prepare 鍜?nbsp;accept 闃舵銆?/p>

    prepare 闃舵

    • Proposer鎻愭鑰?/code>锛氳礋璐f彁鍑?nbsp; proposal锛屾瘡涓彁妗堣€呭湪鎻愬嚭鎻愭鏃堕兘浼氶鍏堣幏鍙栧埌涓€涓?nbsp; 鍏锋湁鍏ㄥ眬鍞竴鎬х殑銆侀€掑鐨勬彁妗堢紪鍙種锛屽嵆鍦ㄦ暣涓泦缇や腑鏄敮涓€鐨勭紪鍙?N锛岀劧鍚庡皢璇ョ紪鍙疯祴浜堝叾瑕佹彁鍑虹殑鎻愭锛屽湪 绗竴闃舵鏄彧灏嗘彁妗堢紪鍙峰彂閫佺粰鎵€鏈夌殑琛ㄥ喅鑰?/strong>銆?
    • Acceptor琛ㄥ喅鑰?/code>锛氭瘡涓〃鍐宠€呭湪  accept 鏌愭彁妗堝悗锛屼細灏嗚鎻愭缂栧彿N璁板綍鍦ㄦ湰鍦帮紝杩欐牱姣忎釜琛ㄥ喅鑰呬腑淇濆瓨鐨勫凡缁忚 accept 鐨勬彁妗堜腑浼氬瓨鍦ㄤ竴涓? 缂栧彿鏈€澶х殑鎻愭锛屽叾缂栧彿鍋囪涓?nbsp; maxN銆傛瘡涓〃鍐宠€呬粎浼?nbsp; accept 缂栧彿澶т簬鑷繁鏈湴  maxN 鐨勬彁妗堬紝鍦ㄦ壒鍑嗘彁妗堟椂琛ㄥ喅鑰呬細灏嗕互鍓嶆帴鍙楄繃鐨勬渶澶х紪鍙风殑鎻愭浣滀负鍝嶅簲鍙嶉缁?nbsp; Proposer 銆?
    鈥?/span>

    涓嬮潰鏄?nbsp;prepare 闃舵鐨勬祦绋嬪浘锛屼綘鍙互瀵圭収鐫€鍙傝€冧竴涓嬨€?/p> 鈥?/span>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= paxos绗竴闃舵

    accept 闃舵

    褰撲竴涓彁妗堣 Proposer 鎻愬嚭鍚庯紝濡傛灉 Proposer 鏀跺埌浜嗚秴杩囧崐鏁扮殑 Acceptor 鐨勬壒鍑嗭紙Proposer 鏈韩鍚屾剰锛夛紝閭d箞姝ゆ椂 Proposer 浼氱粰鎵€鏈夌殑 Acceptor 鍙戦€佺湡姝g殑鎻愭锛堜綘鍙互鐞嗚В涓虹涓€闃舵涓鸿瘯鎺級锛岃繖涓椂鍊?nbsp;Proposer 灏变細鍙戦€佹彁妗堢殑鍐呭鍜屾彁妗堢紪鍙枫€?/p>

    琛ㄥ喅鑰呮敹鍒版彁妗堣姹傚悗浼氬啀娆℃瘮杈冩湰韬凡缁忔壒鍑嗚繃鐨勬渶澶ф彁妗堢紪鍙峰拰璇ユ彁妗堢紪鍙凤紝濡傛灉璇ユ彁妗堢紪鍙?nbsp;澶т簬绛変簬 宸茬粡鎵瑰噯杩囩殑鏈€澶ф彁妗堢紪鍙凤紝閭d箞灏?nbsp;accept 璇ユ彁妗堬紙姝ゆ椂鎵ц鎻愭鍐呭浣嗕笉鎻愪氦锛夛紝闅忓悗灏嗘儏鍐佃繑鍥炵粰 Proposer 銆傚鏋滀笉婊¤冻鍒欎笉鍥炲簲鎴栬€呰繑鍥?NO 銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= paxos绗簩闃舵1

    褰?nbsp;Proposer 鏀跺埌瓒呰繃鍗婃暟鐨?nbsp;accept 锛岄偅涔堝畠杩欎釜鏃跺€欎細鍚戞墍鏈夌殑 acceptor 鍙戦€佹彁妗堢殑鎻愪氦璇锋眰銆傞渶瑕佹敞鎰忕殑鏄紝鍥犱负涓婅堪浠呬粎鏄秴杩囧崐鏁扮殑 acceptor 鎵瑰噯鎵ц浜嗚鎻愭鍐呭锛屽叾浠栨病鏈夋壒鍑嗙殑骞舵病鏈夋墽琛岃鎻愭鍐呭锛屾墍浠ヨ繖涓椂鍊欓渶瑕?span class="mq-227">鍚戞湭鎵瑰噯鐨?nbsp;acceptor 鍙戦€佹彁妗堝唴瀹瑰拰鎻愭缂栧彿骞惰瀹冩棤鏉′欢鎵ц鍜屾彁浜?/strong>锛岃€屽浜庡墠闈㈠凡缁忔壒鍑嗚繃璇ユ彁妗堢殑 acceptor 鏉ヨ 浠呬粎闇€瑕佸彂閫佽鎻愭鐨勭紪鍙?/strong> 锛岃 acceptor 鎵ц鎻愪氦灏辫浜嗐€?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= paxos绗簩闃舵2

    鑰屽鏋?nbsp;Proposer 濡傛灉娌℃湁鏀跺埌瓒呰繃鍗婃暟鐨?nbsp;accept  閭d箞瀹冨皢浼氬皢 閫掑 璇?nbsp;Proposal 鐨勭紪鍙凤紝鐒跺悗 閲嶆柊杩涘叆 Prepare 闃舵 銆?/p>

    鈥?/span>

    瀵逛簬 Learner 鏉ヨ濡備綍鍘诲涔?nbsp;Acceptor 鎵瑰噯鐨勬彁妗堝唴瀹癸紝杩欐湁寰堝鏂瑰紡锛岃鑰呭彲浠ヨ嚜宸卞幓浜嗚В涓€涓嬶紝杩欓噷涓嶅仛杩囧瑙i噴銆?/p> 鈥?/span>

    paxos 绠楁硶鐨勬寰幆闂

    鍏跺疄灏辨湁鐐圭被浼间簬涓や釜浜哄惖鏋讹紝灏忔槑璇存垜鏄鐨勶紝灏忕孩璇存垜鎵嶆槸瀵圭殑锛屼袱涓汉鎹悊鍔涗簤鐨勮皝涔熶笉璁╄皝馃が馃が銆?/p>

    姣斿璇达紝姝ゆ椂鎻愭鑰?P1 鎻愬嚭涓€涓柟妗?M1锛屽畬鎴愪簡 Prepare 闃舵鐨勫伐浣滐紝杩欎釜鏃跺€?nbsp;acceptor 鍒欐壒鍑嗕簡 M1锛屼絾鏄鏃舵彁妗堣€?P2 鍚屾椂涔熸彁鍑轰簡涓€涓柟妗?M2锛屽畠涔熷畬鎴愪簡 Prepare 闃舵鐨勫伐浣溿€傜劧鍚?P1 鐨勬柟妗堝凡缁忎笉鑳藉湪绗簩闃舵琚壒鍑嗕簡锛堝洜涓?nbsp;acceptor 宸茬粡鎵瑰噯浜嗘瘮 M1 鏇村ぇ鐨?M2锛夛紝鎵€浠?P1 鑷鏂规鍙樹负 M3 閲嶆柊杩涘叆 Prepare 闃舵锛岀劧鍚?nbsp;acceptor 锛屽張鎵瑰噯浜嗘柊鐨?M3 鏂规锛屽畠鍙堜笉鑳芥壒鍑?M2 浜嗭紝杩欎釜鏃跺€?M2 鍙堣嚜澧炶繘鍏?nbsp;Prepare 闃舵銆傘€傘€?/p>

    灏辫繖鏍锋棤浼戞棤姝㈢殑姘歌繙鎻愭涓嬪幓锛岃繖灏辨槸 paxos 绠楁硶鐨勬寰幆闂銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=閭d箞濡備綍瑙e喅鍛紵寰堢畝鍗曪紝浜哄浜嗗鏄撳惖鏋讹紝鎴戠幇鍦?nbsp;灏卞厑璁镐竴涓兘鎻愭 灏辫浜嗐€?/p>

    寮曞嚭 ZAB

    Zookeeper 鏋舵瀯

    浣滀负涓€涓紭绉€楂樻晥涓斿彲闈犵殑鍒嗗竷寮忓崗璋冩鏋讹紝ZooKeeper 鍦ㄨВ鍐冲垎甯冨紡鏁版嵁涓€鑷存€ч棶棰樻椂骞舵病鏈夌洿鎺ヤ娇鐢?nbsp;Paxos 锛岃€屾槸涓撻棬瀹氬埗浜嗕竴鑷存€у崗璁彨鍋?nbsp;ZAB(ZooKeeper Automic Broadcast) 鍘熷瓙骞挎挱鍗忚锛岃鍗忚鑳藉寰堝ソ鍦版敮鎸?nbsp;宕╂簝鎭㈠ 銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= Zookeeper鏋舵瀯

    ZAB 涓殑涓変釜瑙掕壊

    鍜屼粙缁?nbsp;Paxos 涓€鏍凤紝鍦ㄤ粙缁?nbsp;ZAB 鍗忚涔嬪墠锛屾垜浠鍏堟潵浜嗚В涓€涓嬪湪 ZAB 涓笁涓富瑕佺殑瑙掕壊锛?code class="mq-280">Leader 棰嗗鑰?/code>銆?code class="mq-281">Follower璺熼殢鑰?/code>銆?code class="mq-282">Observer瑙傚療鑰?/code> 銆?/p>

    • Leader 锛氶泦缇や腑  鍞竴鐨勫啓璇锋眰澶勭悊鑰?/strong> 锛岃兘澶熷彂璧锋姇绁紙鎶曠エ涔熸槸涓轰簡杩涜鍐欒姹傦級銆?
    • Follower锛氳兘澶熸帴鏀跺鎴风鐨勮姹傦紝濡傛灉鏄璇锋眰鍒欏彲浠ヨ嚜宸卞鐞嗭紝 濡傛灉鏄啓璇锋眰鍒欒杞彂缁?nbsp;Leader 銆傚湪閫変妇杩囩▼涓細鍙備笌鎶曠エ锛? 鏈夐€変妇鏉冨拰琚€変妇鏉?/strong> 銆?
    • Observer 锛氬氨鏄病鏈夐€変妇鏉冨拰琚€変妇鏉冪殑  Follower 銆?

    鍦?nbsp;ZAB 鍗忚涓 zkServer(鍗充笂闈㈡垜浠鐨勪笁涓鑹茬殑鎬荤О) 杩樻湁涓ょ妯″紡鐨勫畾涔夛紝鍒嗗埆鏄?nbsp;娑堟伅骞挎挱 鍜?nbsp;宕╂簝鎭㈠ 銆?/p>

    娑堟伅骞挎挱妯″紡

    璇寸櫧浜嗗氨鏄?nbsp;ZAB 鍗忚鏄浣曞鐞嗗啓璇锋眰鐨勶紝涓婇潰鎴戜滑涓嶆槸璇村彧鏈?nbsp;Leader 鑳藉鐞嗗啓璇锋眰鍢涳紵閭d箞鎴戜滑鐨?nbsp;Follower 鍜?nbsp;Observer 鏄笉鏄篃闇€瑕?nbsp;鍚屾鏇存柊鏁版嵁 鍛紵鎬讳笉鑳芥暟鎹彧鍦?nbsp;Leader 涓洿鏂颁簡锛屽叾浠栬鑹查兘娌℃湁寰楀埌鏇存柊鍚э紵

    涓嶅氨鏄?nbsp;鍦ㄦ暣涓泦缇や腑淇濇寔鏁版嵁鐨勪竴鑷存€?/strong> 鍢涳紵濡傛灉鏄綘锛屼綘浼氭€庝箞鍋氬憿锛?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=搴熻瘽锛岀涓€姝ヨ偗瀹氶渶瑕?nbsp;Leader 灏嗗啓璇锋眰 骞挎挱 鍑哄幓鍛€锛岃 Leader 闂棶 Followers 鏄惁鍚屾剰鏇存柊锛屽鏋滆秴杩囧崐鏁颁互涓婄殑鍚屾剰閭d箞灏辫繘琛?nbsp;Follower 鍜?nbsp;Observer 鐨勬洿鏂帮紙鍜?nbsp;Paxos 涓€鏍凤級銆傚綋鐒惰繖涔堣鏈夌偣铏氾紝鐢诲紶鍥剧悊瑙d竴涓嬨€?/p>
    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 娑堟伅骞挎挱

    鍡€傘€傘€傜湅璧锋潵寰堢畝鍗曪紝璨屼技鎳備簡馃ぅ馃ぅ馃ぅ銆傝繖涓や釜 Queue 鍝啋鍑烘潵鐨勶紵绛旀鏄?nbsp;ZAB 闇€瑕佽 Follower 鍜?nbsp;Observer 淇濊瘉椤哄簭鎬?/strong> 銆備綍涓洪『搴忔€э紝姣斿鎴戠幇鍦ㄦ湁涓€涓啓璇锋眰A锛屾鏃?nbsp;Leader 灏嗚姹侫骞挎挱鍑哄幓锛屽洜涓哄彧闇€瑕佸崐鏁板悓鎰忓氨琛岋紝鎵€浠ュ彲鑳借繖涓椂鍊欐湁涓€涓?nbsp;Follower F1鍥犱负缃戠粶鍘熷洜娌℃湁鏀跺埌锛岃€?nbsp;Leader 鍙堝箍鎾簡涓€涓姹侭锛屽洜涓虹綉缁滃師鍥狅紝F1绔熺劧鍏堟敹鍒颁簡璇锋眰B鐒跺悗鎵嶆敹鍒颁簡璇锋眰A锛岃繖涓椂鍊欒姹傚鐞嗙殑椤哄簭涓嶅悓灏变細瀵艰嚧鏁版嵁鐨勪笉鍚岋紝浠庤€?nbsp;浜х敓鏁版嵁涓嶄竴鑷撮棶棰?/strong> 銆?/p>

    鎵€浠ュ湪 Leader 杩欑锛屽畠涓烘瘡涓叾浠栫殑 zkServer 鍑嗗浜嗕竴涓?nbsp;闃熷垪 锛岄噰鐢ㄥ厛杩涘厛鍑虹殑鏂瑰紡鍙戦€佹秷鎭€傜敱浜庡崗璁槸 **閫氳繃 TCP **鏉ヨ繘琛岀綉缁滈€氫俊鐨勶紝淇濊瘉浜嗘秷鎭殑鍙戦€侀『搴忔€э紝鎺ュ彈椤哄簭鎬т篃寰楀埌浜嗕繚璇併€?/p>

    闄ゆ涔嬪锛屽湪 ZAB 涓繕瀹氫箟浜嗕竴涓?nbsp;鍏ㄥ眬鍗曡皟閫掑鐨勪簨鍔D ZXID 锛屽畠鏄竴涓?4浣峫ong鍨嬶紝鍏朵腑楂?2浣嶈〃绀?nbsp;epoch 骞翠唬锛屼綆32浣嶈〃绀轰簨鍔d銆?code class="mq-343">epoch 鏄細鏍规嵁 Leader 鐨勫彉鍖栬€屽彉鍖栫殑锛屽綋涓€涓?nbsp;Leader 鎸備簡锛屾柊鐨?nbsp;Leader 涓婁綅鐨勬椂鍊欙紝骞翠唬锛?code class="mq-347">epoch锛夊氨鍙樹簡銆傝€屼綆32浣嶅彲浠ョ畝鍗曠悊瑙d负閫掑鐨勪簨鍔d銆?/p>

    瀹氫箟杩欎釜鐨勫師鍥犱篃鏄负浜嗛『搴忔€э紝姣忎釜 proposal 鍦?nbsp;Leader 涓敓鎴愬悗闇€瑕?nbsp;閫氳繃鍏?nbsp;ZXID 鏉ヨ繘琛屾帓搴?/strong> 锛屾墠鑳藉緱鍒板鐞嗐€?/p>

    宕╂簝鎭㈠妯″紡

    璇村埌宕╂簝鎭㈠鎴戜滑棣栧厛瑕佹彁鍒?nbsp;ZAB 涓殑 Leader 閫変妇绠楁硶锛屽綋绯荤粺鍑虹幇宕╂簝褰卞搷鏈€澶у簲璇ユ槸 Leader 鐨勫穿婧冿紝鍥犱负鎴戜滑鍙湁涓€涓?nbsp;Leader 锛屾墍浠ュ綋 Leader 鍑虹幇闂鐨勬椂鍊欐垜浠娍蹇呴渶瑕侀噸鏂伴€変妇 Leader 銆?/p>

    Leader 閫変妇鍙互鍒嗕负涓や釜涓嶅悓鐨勯樁娈碉紝绗竴涓槸鎴戜滑鎻愬埌鐨?nbsp;Leader 瀹曟満闇€瑕侀噸鏂伴€変妇锛岀浜屽垯鏄綋 Zookeeper 鍚姩鏃堕渶瑕佽繘琛岀郴缁熺殑 Leader 鍒濆鍖栭€変妇銆備笅闈㈡垜鍏堟潵浠嬬粛涓€涓?nbsp;ZAB 鏄浣曡繘琛屽垵濮嬪寲閫変妇鐨勩€?/p>

    鍋囪鎴戜滑闆嗙兢涓湁3鍙版満鍣紝閭d篃灏辨剰鍛崇潃鎴戜滑闇€瑕佷袱鍙颁互涓婂悓鎰忥紙瓒呰繃鍗婃暟锛夈€傛瘮濡傝繖涓椂鍊欐垜浠惎鍔ㄤ簡 server1 锛屽畠浼氶鍏?nbsp;鎶曠エ缁欒嚜宸?/strong> 锛屾姇绁ㄥ唴瀹逛负鏈嶅姟鍣ㄧ殑 myid 鍜?nbsp;ZXID 锛屽洜涓哄垵濮嬪寲鎵€浠?nbsp;ZXID 閮戒负0锛屾鏃?nbsp;server1 鍙戝嚭鐨勬姇绁ㄤ负 (1,0)銆備絾姝ゆ椂 server1 鐨勬姇绁ㄤ粎涓?锛屾墍浠ヤ笉鑳戒綔涓?nbsp;Leader 锛屾鏃惰繕鍦ㄩ€変妇闃舵鎵€浠ユ暣涓泦缇ゅ浜?nbsp;Looking 鐘舵€?/strong>銆?/p>

    鎺ョ潃 server2 鍚姩浜嗭紝瀹冮鍏堜篃浼氬皢鎶曠エ閫夌粰鑷繁(2,0)锛屽苟灏嗘姇绁ㄤ俊鎭箍鎾嚭鍘伙紙server1涔熶細锛屽彧鏄畠閭f椂娌℃湁鍏朵粬鐨勬湇鍔″櫒浜嗭級锛?code class="mq-381">server1 鍦ㄦ敹鍒?nbsp;server2 鐨勬姇绁ㄤ俊鎭悗浼氬皢鎶曠エ淇℃伅涓庤嚜宸辩殑浣滄瘮杈冦€?span class="mq-383">棣栧厛瀹冧細姣旇緝 ZXID 锛?code class="mq-385">ZXID 澶х殑浼樺厛涓?nbsp;Leader锛屽鏋滅浉鍚屽垯姣旇緝 myid锛?code class="mq-388">myid 澶х殑浼樺厛浣滀负 Leader銆傛墍浠ユ鏃?code class="mq-390">server1 鍙戠幇 server2 鏇撮€傚悎鍋?nbsp;Leader锛屽畠灏变細灏嗚嚜宸辩殑鎶曠エ淇℃伅鏇存敼涓?2,0)鐒跺悗鍐嶅箍鎾嚭鍘伙紝涔嬪悗server2  鏀跺埌涔嬪悗鍙戠幇鍜岃嚜宸辩殑涓€鏍锋棤闇€鍋氭洿鏀癸紝骞朵笖鑷繁鐨?nbsp;鎶曠エ宸茬粡瓒呰繃鍗婃暟 锛屽垯 纭畾 server2 涓?nbsp;Leader锛?code class="mq-398">server1 涔熶細灏嗚嚜宸辨湇鍔″櫒璁剧疆涓?nbsp;Following 鍙樹负 Follower銆傛暣涓湇鍔″櫒灏变粠 Looking 鍙樹负浜嗘甯哥姸鎬併€?/p>

    褰?nbsp;server3 鍚姩鍙戠幇闆嗙兢娌℃湁澶勪簬 Looking 鐘舵€佹椂锛屽畠浼氱洿鎺ヤ互 Follower 鐨勮韩浠藉姞鍏ラ泦缇ゃ€?/p>

    杩樻槸鍓嶉潰涓変釜 server 鐨勪緥瀛愶紝濡傛灉鍦ㄦ暣涓泦缇よ繍琛岀殑杩囩▼涓?nbsp;server2 鎸備簡锛岄偅涔堟暣涓泦缇や細濡備綍閲嶆柊閫変妇 Leader 鍛紵鍏跺疄鍜屽垵濮嬪寲閫変妇宸笉澶氥€?/p>

    棣栧厛姣棤鐤戦棶鐨勬槸鍓╀笅鐨勪袱涓?nbsp;Follower 浼氬皢鑷繁鐨勭姸鎬?nbsp;浠?nbsp;Following 鍙樹负 Looking 鐘舵€?/strong> 锛岀劧鍚庢瘡涓?nbsp;server 浼氬悜鍒濆鍖栨姇绁ㄤ竴鏍烽鍏堢粰鑷繁鎶曠エ锛堣繖涓嶈繃杩欓噷鐨?nbsp;zxid 鍙兘涓嶆槸0浜嗭紝杩欓噷涓轰簡鏂逛究闅忎究鍙栦釜鏁板瓧锛夈€?/p>

    鍋囪 server1 缁欒嚜宸辨姇绁ㄤ负(1,99)锛岀劧鍚庡箍鎾粰鍏朵粬 server锛?code class="mq-420">server3 棣栧厛涔熶細缁欒嚜宸辨姇绁?3,95)锛岀劧鍚庝篃骞挎挱缁欏叾浠?nbsp;server銆?code class="mq-422">server1 鍜?nbsp;server3 姝ゆ椂浼氭敹鍒板郊姝ょ殑鎶曠エ淇℃伅锛屽拰涓€寮€濮嬮€変妇涓€鏍凤紝浠栦滑涔熶細姣旇緝鑷繁鐨勬姇绁ㄥ拰鏀跺埌鐨勬姇绁紙zxid 澶х殑浼樺厛锛屽鏋滅浉鍚岄偅涔堝氨 myid 澶х殑浼樺厛锛夈€傝繖涓椂鍊?nbsp;server1 鏀跺埌浜?nbsp;server3 鐨勬姇绁ㄥ彂鐜版病鑷繁鐨勫悎閫傛晠涓嶅彉锛?code class="mq-428">server3 鏀跺埌 server1 鐨勬姇绁ㄧ粨鏋滃悗鍙戠幇姣旇嚜宸辩殑鍚堥€備簬鏄洿鏀规姇绁ㄤ负(1,99)鐒跺悗骞挎挱鍑哄幓锛屾渶鍚?nbsp;server1 鏀跺埌浜嗗彂鐜拌嚜宸辩殑鎶曠エ宸茬粡瓒呰繃鍗婃暟灏辨妸鑷繁璁句负 Leader锛?code class="mq-432">server3 涔熼殢涔嬪彉涓?nbsp;Follower銆?/p>

    鈥?/span>

    璇锋敞鎰?nbsp;ZooKeeper 涓轰粈涔堣璁剧疆濂囨暟涓粨鐐癸紵姣斿杩欓噷鎴戜滑鏄笁涓紝鎸備簡涓€涓垜浠繕鑳芥甯稿伐浣滐紝鎸備簡涓や釜鎴戜滑灏变笉鑳芥甯稿伐浣滀簡锛堝凡缁忔病鏈夎秴杩囧崐鏁扮殑鑺傜偣鏁颁簡锛屾墍浠ユ棤娉曡繘琛屾姇绁ㄧ瓑鎿嶄綔浜嗭級銆傝€屽亣璁炬垜浠幇鍦ㄦ湁鍥涗釜锛屾寕浜嗕竴涓篃鑳藉伐浣滐紝浣嗘槸鎸備簡涓や釜涔熶笉鑳芥甯稿伐浣滀簡锛岃繖鏄拰涓変釜涓€鏍风殑锛岃€屼笁涓瘮鍥涗釜杩樺皯涓€涓紝甯︽潵鐨勬晥鐩婃槸涓€鏍风殑锛屾墍浠?nbsp;Zookeeper 鎺ㄨ崘濂囨暟涓?nbsp;server 銆?/p> 鈥?/span>

    閭d箞璇村畬浜?nbsp;ZAB 涓殑 Leader 閫変妇鏂瑰紡涔嬪悗鎴戜滑鍐嶆潵浜嗚В涓€涓?nbsp;宕╂簝鎭㈠ 鏄粈涔堢帺鎰忥紵

    鍏跺疄涓昏灏辨槸 褰撻泦缇や腑鏈夋満鍣ㄦ寕浜嗭紝鎴戜滑鏁翠釜闆嗙兢濡備綍淇濊瘉鏁版嵁涓€鑷存€э紵

    濡傛灉鍙槸 Follower 鎸備簡锛岃€屼笖鎸傜殑娌¤秴杩囧崐鏁扮殑鏃跺€欙紝鍥犱负鎴戜滑涓€寮€濮嬭浜嗗湪 Leader 涓細缁存姢闃熷垪锛屾墍浠ヤ笉鐢ㄦ媴蹇冨悗闈㈢殑鏁版嵁娌℃帴鏀跺埌瀵艰嚧鏁版嵁涓嶄竴鑷存€с€?/p>

    濡傛灉 Leader 鎸備簡閭e氨楹荤儲浜嗭紝鎴戜滑鑲畾闇€瑕佸厛鏆傚仠鏈嶅姟鍙樹负 Looking 鐘舵€佺劧鍚庤繘琛?nbsp;Leader 鐨勯噸鏂伴€変妇锛堜笂闈㈡垜璁茶繃浜嗭級锛屼絾杩欎釜灏辫鍒嗕负涓ょ鎯呭喌浜嗭紝鍒嗗埆鏄?nbsp;纭繚宸茬粡琚獿eader鎻愪氦鐨勬彁妗堟渶缁堣兘澶熻鎵€鏈夌殑Follower鎻愪氦 鍜?nbsp;璺宠繃閭d簺宸茬粡琚涪寮冪殑鎻愭 銆?/p>

    纭繚宸茬粡琚獿eader鎻愪氦鐨勬彁妗堟渶缁堣兘澶熻鎵€鏈夌殑Follower鎻愪氦鏄粈涔堟剰鎬濆憿锛?/p>

    鍋囪 Leader (server2) 鍙戦€?nbsp;commit 璇锋眰锛堝繕浜嗚鐪嬩笂闈㈢殑娑堟伅骞挎挱妯″紡锛夛紝浠栧彂閫佺粰浜?nbsp;server3锛岀劧鍚庤鍙戠粰 server1 鐨勬椂鍊欑獊鐒舵寕浜嗐€傝繖涓椂鍊欓噸鏂伴€変妇鐨勬椂鍊欐垜浠鏋滄妸 server1 浣滀负 Leader 鐨勮瘽锛岄偅涔堣偗瀹氫細浜х敓鏁版嵁涓嶄竴鑷存€э紝鍥犱负 server3 鑲畾浼氭彁浜ゅ垰鍒?nbsp;server2 鍙戦€佺殑 commit 璇锋眰鐨勬彁妗堬紝鑰?nbsp;server1 鏍规湰娌℃敹鍒版墍浠ヤ細涓㈠純銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 宕╂簝鎭㈠

    閭f€庝箞瑙e喅鍛紵

    鑱槑鐨勫悓瀛﹁偗瀹氫細璐ㄧ枒锛?span class="mq-474">杩欎釜鏃跺€?nbsp;server1 宸茬粡涓嶅彲鑳芥垚涓?nbsp;Leader 浜嗭紝鍥犱负 server1 鍜?nbsp;server3 杩涜鎶曠エ閫変妇鐨勬椂鍊欎細姣旇緝 ZXID 锛岃€屾鏃?nbsp;server3 鐨?nbsp;ZXID 鑲畾姣?nbsp;server1 鐨勫ぇ浜?/strong>銆?涓嶇悊瑙e彲浠ョ湅鍓嶉潰鐨勯€変妇绠楁硶)

    閭d箞璺宠繃閭d簺宸茬粡琚涪寮冪殑鎻愭鍙堟槸浠€涔堟剰鎬濆憿锛?/p>

    鍋囪 Leader (server2) 姝ゆ椂鍚屾剰浜嗘彁妗圢1锛岃嚜韬彁浜や簡杩欎釜浜嬪姟骞朵笖瑕佸彂閫佺粰鎵€鏈?nbsp;Follower 瑕?nbsp;commit 鐨勮姹傦紝鍗村湪杩欎釜鏃跺€欐寕浜嗭紝姝ゆ椂鑲畾瑕侀噸鏂拌繘琛?nbsp;Leader 鐨勯€変妇锛屾瘮濡傝姝ゆ椂閫?nbsp;server1 涓?nbsp;Leader 锛堣繖鏃犳墍璋擄級銆備絾鏄繃浜嗕竴浼氾紝杩欎釜 鎸傛帀鐨?nbsp;Leader 鍙堥噸鏂版仮澶嶄簡 锛屾鏃跺畠鑲畾浼氫綔涓?nbsp;Follower 鐨勮韩浠借繘鍏ラ泦缇や腑锛岄渶瑕佹敞鎰忕殑鏄垰鍒?nbsp;server2 宸茬粡鍚屾剰鎻愪氦浜嗘彁妗圢1锛屼絾鍏朵粬 server 骞舵病鏈夋敹鍒板畠鐨?nbsp;commit 淇℃伅锛屾墍浠ュ叾浠?nbsp;server 涓嶅彲鑳藉啀鎻愪氦杩欎釜鎻愭N1浜嗭紝杩欐牱灏变細鍑虹幇鏁版嵁涓嶄竴鑷存€ч棶棰樹簡锛屾墍浠?nbsp;璇ユ彁妗圢1鏈€缁堥渶瑕佽鎶涘純鎺?/strong> 銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 宕╂簝鎭㈠

    Zookeeper鐨勫嚑涓悊璁虹煡璇?/span>

    浜嗚В浜?nbsp;ZAB 鍗忚杩樹笉澶燂紝瀹冧粎浠呮槸 Zookeeper 鍐呴儴瀹炵幇鐨勪竴绉嶆柟寮忥紝鑰屾垜浠浣曢€氳繃 Zookeeper 鍘诲仛涓€浜涘吀鍨嬬殑搴旂敤鍦烘櫙鍛紵姣斿璇撮泦缇ょ鐞嗭紝鍒嗗竷寮忛攣锛?code class="mq-508">Master 閫変妇绛夌瓑銆?/p>

    杩欏氨娑夊強鍒板浣曚娇鐢?nbsp;Zookeeper 浜嗭紝浣嗗湪浣跨敤涔嬪墠鎴戜滑杩橀渶瑕佹帉鎻″嚑涓蹇点€傛瘮濡?nbsp;Zookeeper 鐨?nbsp;鏁版嵁妯″瀷 銆?span class="mq-513">浼氳瘽鏈哄埗銆?span class="mq-514">ACL銆?span class="mq-515">Watcher鏈哄埗 绛夌瓑銆?/p>

    鏁版嵁妯″瀷

    zookeeper 鏁版嵁瀛樺偍缁撴瀯涓庢爣鍑嗙殑 Unix 鏂囦欢绯荤粺闈炲父鐩镐技锛岄兘鏄湪鏍硅妭鐐逛笅鎸傚緢澶氬瓙鑺傜偣(鏍戝瀷)銆備絾鏄?nbsp;zookeeper 涓病鏈夋枃浠剁郴缁熶腑鐩綍涓庢枃浠剁殑姒傚康锛岃€屾槸 浣跨敤浜?nbsp;znode 浣滀负鏁版嵁鑺傜偣 銆?code class="mq-523">znode 鏄?nbsp;zookeeper 涓殑鏈€灏忔暟鎹崟鍏冿紝姣忎釜 znode 涓婇兘鍙互淇濆瓨鏁版嵁锛屽悓鏃惰繕鍙互鎸傝浇瀛愯妭鐐癸紝褰㈡垚涓€涓爲褰㈠寲鍛藉悕绌洪棿銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= zk鏁版嵁妯″瀷

    姣忎釜 znode 閮芥湁鑷繁鎵€灞炵殑 鑺傜偣绫诲瀷 鍜?nbsp;鑺傜偣鐘舵€?/strong>銆?/p>

    鍏朵腑鑺傜偣绫诲瀷鍙互鍒嗕负 鎸佷箙鑺傜偣銆?span class="mq-535">鎸佷箙椤哄簭鑺傜偣銆?span class="mq-536">涓存椂鑺傜偣 鍜?nbsp;涓存椂椤哄簭鑺傜偣銆?/p>

    • 鎸佷箙鑺傜偣锛氫竴鏃﹀垱寤哄氨涓€鐩村瓨鍦紝鐩村埌灏嗗叾鍒犻櫎銆?
    • 鎸佷箙椤哄簭鑺傜偣锛氫竴涓埗鑺傜偣鍙互涓哄叾瀛愯妭鐐?nbsp; 缁存姢涓€涓垱寤虹殑鍏堝悗椤哄簭 锛岃繖涓『搴忎綋鐜板湪  鑺傜偣鍚嶇О 涓婏紝鏄妭鐐瑰悕绉板悗鑷姩娣诲姞涓€涓敱 10 浣嶆暟瀛楃粍鎴愮殑鏁板瓧涓诧紝浠?0 寮€濮嬭鏁般€?
    • 涓存椂鑺傜偣锛氫复鏃惰妭鐐圭殑鐢熷懡鍛ㄦ湡鏄笌  瀹㈡埛绔細璇?/strong> 缁戝畾鐨勶紝 浼氳瘽娑堝け鍒欒妭鐐规秷澶?/strong> 銆備复鏃惰妭鐐?nbsp; 鍙兘鍋氬彾瀛愯妭鐐?/strong> 锛屼笉鑳藉垱寤哄瓙鑺傜偣銆?
    • 涓存椂椤哄簭鑺傜偣锛氱埗鑺傜偣鍙互鍒涘缓涓€涓淮鎸佷簡椤哄簭鐨勪复鏃惰妭鐐?鍜屽墠闈㈢殑鎸佷箙椤哄簭鎬ц妭鐐逛竴鏍?銆?

    鑺傜偣鐘舵€佷腑鍖呭惈浜嗗緢澶氳妭鐐圭殑灞炴€ф瘮濡?nbsp;czxid 銆?code class="mq-550">mzxid 绛夌瓑锛屽湪 zookeeper 涓槸浣跨敤 Stat 杩欎釜绫绘潵缁存姢鐨勩€備笅闈㈡垜鍒椾妇涓€浜涘睘鎬цВ閲娿€?/p>

    • czxid锛? Created ZXID锛岃鏁版嵁鑺傜偣琚?nbsp; 鍒涘缓 鏃剁殑浜嬪姟ID銆?
    • mzxid锛? Modified ZXID锛岃妭鐐?nbsp; 鏈€鍚庝竴娆¤鏇存柊鏃?/strong> 鐨勪簨鍔D銆?
    • ctime锛? Created Time锛岃鑺傜偣琚垱寤虹殑鏃堕棿銆?
    • mtime锛? Modified Time锛岃鑺傜偣鏈€鍚庝竴娆¤淇敼鐨勬椂闂淬€?
    • version锛氳妭鐐圭殑鐗堟湰鍙枫€?
    • cversion锛? 瀛愯妭鐐?/strong> 鐨勭増鏈彿銆?
    • aversion锛氳妭鐐圭殑  ACL 鐗堟湰鍙枫€?
    • ephemeralOwner锛氬垱寤鸿鑺傜偣鐨勪細璇濈殑  sessionID 锛屽鏋滆鑺傜偣涓烘寔涔呰妭鐐癸紝璇ュ€间负0銆?
    • dataLength锛氳妭鐐规暟鎹唴瀹圭殑闀垮害銆?
    • numChildre锛氳鑺傜偣鐨勫瓙鑺傜偣涓暟锛屽鏋滀负涓存椂鑺傜偣涓?銆?
    • pzxid锛氳鑺傜偣瀛愯妭鐐瑰垪琛ㄦ渶鍚庝竴娆¤淇敼鏃剁殑浜嬪姟ID锛屾敞鎰忔槸瀛愯妭鐐圭殑  鍒楄〃 锛屼笉鏄唴瀹广€?

    浼氳瘽

    鎴戞兂杩欎釜瀵逛簬鍚庣寮€鍙戠殑鏈嬪弸鑲畾涓嶉檶鐢燂紝涓嶅氨鏄?nbsp;session 鍚楋紵鍙笉杩?nbsp;zk 瀹㈡埛绔拰鏈嶅姟绔槸閫氳繃 TCP 闀胯繛鎺?/strong> 缁存寔鐨勪細璇濇満鍒讹紝鍏跺疄瀵逛簬浼氳瘽鏉ヨ浣犲彲浠ョ悊瑙d负 淇濇寔杩炴帴鐘舵€?/strong> 銆?/p>

    鍦?nbsp;zookeeper 涓紝浼氳瘽杩樻湁瀵瑰簲鐨勪簨浠讹紝姣斿 CONNECTION_LOSS 杩炴帴涓㈠け浜嬩欢 銆?code class="mq-596">SESSION_MOVED 浼氳瘽杞Щ浜嬩欢 銆?code class="mq-597">SESSION_EXPIRED 浼氳瘽瓒呮椂澶辨晥浜嬩欢 銆?/p>

    ACL

    ACL 涓?nbsp;Access Control Lists 锛屽畠鏄竴绉嶆潈闄愭帶鍒躲€傚湪 zookeeper 涓畾涔変簡5绉嶆潈闄愶紝瀹冧滑鍒嗗埆涓猴細

    • CREATE 锛氬垱寤哄瓙鑺傜偣鐨勬潈闄愩€?
    • READ锛氳幏鍙栬妭鐐规暟鎹拰瀛愯妭鐐瑰垪琛ㄧ殑鏉冮檺銆?
    • WRITE锛氭洿鏂拌妭鐐规暟鎹殑鏉冮檺銆?
    • DELETE锛氬垹闄ゅ瓙鑺傜偣鐨勬潈闄愩€?
    • ADMIN锛氳缃妭鐐?ACL 鐨勬潈闄愩€?

    Watcher鏈哄埗

    Watcher 涓轰簨浠剁洃鍚櫒锛屾槸 zk 闈炲父閲嶈鐨勪竴涓壒鎬э紝寰堝鍔熻兘閮戒緷璧栦簬瀹冿紝瀹冩湁鐐圭被浼间簬璁㈤槄鐨勬柟寮忥紝鍗冲鎴风鍚戞湇鍔$ 娉ㄥ唽 鎸囧畾鐨?nbsp;watcher 锛屽綋鏈嶅姟绔鍚堜簡 watcher 鐨勬煇浜涗簨浠舵垨瑕佹眰鍒欎細 鍚戝鎴风鍙戦€佷簨浠堕€氱煡 锛屽鎴风鏀跺埌閫氱煡鍚庢壘鍒拌嚜宸卞畾涔夌殑 Watcher 鐒跺悗 鎵ц鐩稿簲鐨勫洖璋冩柟娉?/strong> 銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= watcher鏈哄埗

    Zookeeper鐨勫嚑涓吀鍨嬪簲鐢ㄥ満鏅?/span>

    鍓嶉潰璇翠簡杩欎箞澶氱殑鐞嗚鐭ヨ瘑锛屼綘鍙兘鍚緱涓€澶撮浘姘达紝杩欎簺鐜╂剰鏈夊暐鐢紵鑳藉共鍟ヤ簨锛熷埆鎬ワ紝鍚垜鎱㈡參閬撴潵銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <h3 data-tool=閫変富

    杩樿寰椾笂闈㈡垜浠殑鎵€璇寸殑涓存椂鑺傜偣鍚楋紵鍥犱负 Zookeeper 鐨勫己涓€鑷存€э紝鑳藉寰堝ソ鍦板湪淇濊瘉 鍦ㄩ珮骞跺彂鐨勬儏鍐典笅淇濊瘉鑺傜偣鍒涘缓鐨勫叏灞€鍞竴鎬?/strong> (鍗虫棤娉曢噸澶嶅垱寤哄悓鏍风殑鑺傜偣)銆?/p>

    鍒╃敤杩欎釜鐗规€э紝鎴戜滑鍙互 璁╁涓鎴风鍒涘缓涓€涓寚瀹氱殑鑺傜偣 锛屽垱寤烘垚鍔熺殑灏辨槸 master銆?/p>

    浣嗘槸锛屽鏋滆繖涓?nbsp;master 鎸備簡鎬庝箞鍔烇紵锛燂紵

    浣犳兂鎯充负浠€涔堟垜浠鍒涘缓涓存椂鑺傜偣锛熻繕璁板緱涓存椂鑺傜偣鐨勭敓鍛藉懆鏈熷悧锛?code class="mq-642">master 鎸備簡鏄笉鏄唬琛ㄤ細璇濇柇浜嗭紵浼氳瘽鏂簡鏄笉鏄剰鍛崇潃杩欎釜鑺傜偣娌′簡锛熻繕璁板緱 watcher 鍚楋紵鎴戜滑鏄笉鏄彲浠?nbsp;璁╁叾浠栦笉鏄?nbsp;master 鐨勮妭鐐圭洃鍚妭鐐圭殑鐘舵€?/strong> 锛屾瘮濡傝鎴戜滑鐩戝惉杩欎釜涓存椂鑺傜偣鐨勭埗鑺傜偣锛屽鏋滃瓙鑺傜偣涓暟鍙樹簡灏变唬琛?nbsp;master 鎸備簡锛岃繖涓椂鍊欐垜浠?nbsp;瑙﹀彂鍥炶皟鍑芥暟杩涜閲嶆柊閫変妇 锛屾垨鑰呮垜浠洿鎺ョ洃鍚妭鐐圭殑鐘舵€侊紝鎴戜滑鍙互閫氳繃鑺傜偣鏄惁宸茬粡澶卞幓杩炴帴鏉ュ垽鏂?nbsp;master 鏄惁鎸備簡绛夌瓑銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 閫変富

    鎬荤殑鏉ヨ锛屾垜浠彲浠ュ畬鍏?nbsp;鍒╃敤 涓存椂鑺傜偣銆佽妭鐐圭姸鎬?鍜?nbsp;watcher 鏉ュ疄鐜伴€変富鐨勫姛鑳?/strong>锛屼复鏃惰妭鐐逛富瑕佺敤鏉ラ€変妇锛岃妭鐐圭姸鎬佸拰watcher 鍙互鐢ㄦ潵鍒ゆ柇 master 鐨勬椿鎬у拰杩涜閲嶆柊閫変妇銆?/p>

    鍒嗗竷寮忛攣

    鍒嗗竷寮忛攣鐨勫疄鐜版柟寮忔湁寰堝绉嶏紝姣斿 Redis 銆佹暟鎹簱 銆?code class="mq-660">zookeeper 绛夈€備釜浜鸿涓?nbsp;zookeeper 鍦ㄥ疄鐜板垎甯冨紡閿佽繖鏂归潰鏄潪甯搁潪甯哥畝鍗曠殑銆?/p>

    涓婇潰鎴戜滑宸茬粡鎻愬埌杩囦簡 zk鍦ㄩ珮骞跺彂鐨勬儏鍐典笅淇濊瘉鑺傜偣鍒涘缓鐨勫叏灞€鍞竴鎬?/strong>锛岃繖鐜╂剰涓€鐪嬪氨鐭ラ亾鑳藉共鍟ヤ簡銆傚疄鐜颁簰鏂ラ攣鍛楋紝鍙堝洜涓鸿兘鍦ㄥ垎甯冨紡鐨勬儏鍐典笅锛屾墍浠ヨ兘瀹炵幇鍒嗗竷寮忛攣鍛椼€?/p>

    濡備綍瀹炵幇鍛紵杩欑帺鎰忓叾瀹炶窡閫変富鍩烘湰涓€鏍凤紝鎴戜滑涔熷彲浠ュ埄鐢ㄤ复鏃惰妭鐐圭殑鍒涘缓鏉ュ疄鐜般€?/p>

    棣栧厛鑲畾鏄浣曡幏鍙栭攣锛屽洜涓哄垱寤鸿妭鐐圭殑鍞竴鎬э紝鎴戜滑鍙互璁╁涓鎴风鍚屾椂鍒涘缓涓€涓复鏃惰妭鐐癸紝鍒涘缓鎴愬姛鐨勫氨璇存槑鑾峰彇鍒颁簡閿?/strong> 銆傜劧鍚庢病鏈夎幏鍙栧埌閿佺殑瀹㈡埛绔篃鍍忎笂闈㈤€変富鐨勯潪涓昏妭鐐瑰垱寤轰竴涓?nbsp;watcher 杩涜鑺傜偣鐘舵€佺殑鐩戝惉锛屽鏋滆繖涓簰鏂ラ攣琚噴鏀句簡锛堝彲鑳借幏鍙栭攣鐨勫鎴风瀹曟満浜嗭紝鎴栬€呴偅涓鎴风涓诲姩閲婃斁浜嗛攣锛夊彲浠ヨ皟鐢ㄥ洖璋冨嚱鏁伴噸鏂拌幏寰楅攣銆?/p>

    鈥?/span>

    zk 涓笉闇€瑕佸悜 redis 閭f牱鑰冭檻閿佸緱涓嶅埌閲婃斁鐨勯棶棰樹簡锛屽洜涓哄綋瀹㈡埛绔寕浜嗭紝鑺傜偣涔熸寕浜嗭紝閿佷篃閲婃斁浜嗐€傛槸涓嶆槸寰堢畝绛旓紵

    鈥?/span>

    閭h兘涓嶈兘浣跨敤 zookeeper 鍚屾椂瀹炵幇 鍏变韩閿佸拰鐙崰閿?/strong> 鍛紵绛旀鏄彲浠ョ殑锛屼笉杩囩◢寰湁鐐瑰鏉傝€屽凡銆?/p>

    杩樿寰?nbsp;鏈夊簭鐨勮妭鐐?/strong> 鍚楋紵

    杩欎釜鏃跺€欐垜瑙勫畾鎵€鏈夊垱寤鸿妭鐐瑰繀椤绘湁搴忥紝褰撲綘鏄璇锋眰锛堣鑾峰彇鍏变韩閿侊級鐨勮瘽锛屽鏋?nbsp;娌℃湁姣旇嚜宸辨洿灏忕殑鑺傜偣锛屾垨姣旇嚜宸卞皬鐨勮妭鐐归兘鏄璇锋眰 锛屽垯鍙互鑾峰彇鍒拌閿侊紝鐒跺悗灏卞彲浠ュ紑濮嬭浜嗐€?span class="mq-681">鑻ユ瘮鑷繁灏忕殑鑺傜偣涓湁鍐欒姹?/strong> 锛屽垯褰撳墠瀹㈡埛绔棤娉曡幏鍙栧埌璇婚攣锛屽彧鑳界瓑寰呭墠闈㈢殑鍐欒姹傚畬鎴愩€?/p>

    濡傛灉浣犳槸鍐欒姹傦紙鑾峰彇鐙崰閿侊級锛岃嫢 娌℃湁姣旇嚜宸辨洿灏忕殑鑺傜偣 锛屽垯琛ㄧず褰撳墠瀹㈡埛绔彲浠ョ洿鎺ヨ幏鍙栧埌鍐欓攣锛屽鏁版嵁杩涜淇敼銆傝嫢鍙戠幇 鏈夋瘮鑷繁鏇村皬鐨勮妭鐐癸紝鏃犺鏄鎿嶄綔杩樻槸鍐欐搷浣滐紝褰撳墠瀹㈡埛绔兘鏃犳硶鑾峰彇鍒板啓閿?/strong> 锛岀瓑寰呮墍鏈夊墠闈㈢殑鎿嶄綔瀹屾垚銆?/p>

    杩欏氨寰堝ソ鍦板悓鏃跺疄鐜颁簡鍏变韩閿佸拰鐙崰閿侊紝褰撶劧杩樻湁浼樺寲鐨勫湴鏂癸紝姣斿褰撲竴涓攣寰楀埌閲婃斁瀹冧細閫氱煡鎵€鏈夌瓑寰呯殑瀹㈡埛绔粠鑰岄€犳垚 缇婄兢鏁堝簲 銆傛鏃朵綘鍙互閫氳繃璁╃瓑寰呯殑鑺傜偣鍙洃鍚粬浠墠闈㈢殑鑺傜偣銆?/p>

    鍏蜂綋鎬庝箞鍋氬憿锛熷叾瀹炰篃寰堢畝鍗曪紝浣犲彲浠ヨ 璇昏姹傜洃鍚瘮鑷繁灏忕殑鏈€鍚庝竴涓啓璇锋眰鑺傜偣锛屽啓璇锋眰鍙洃鍚瘮鑷繁灏忕殑鏈€鍚庝竴涓妭鐐?/strong> 锛屾劅鍏磋叮鐨勫皬浼欎即鍙互鑷繁鍘荤爺绌朵竴涓嬨€?/p>

    鍛藉悕鏈嶅姟

    濡備綍缁欎竴涓璞¤缃甀D锛屽ぇ瀹跺彲鑳介兘浼氭兂鍒?nbsp;UUID锛屼絾鏄?nbsp;UUID 鏈€澶х殑闂灏卞湪浜庡畠澶暱浜嗐€傘€傘€?澶暱涓嶄竴瀹氭槸濂戒簨锛屽樋鍢垮樋)銆傞偅涔堝湪鏉′欢鍏佽鐨勬儏鍐典笅锛屾垜浠兘涓嶈兘浣跨敤 zookeeper 鏉ュ疄鐜板憿锛?/p>

    鎴戜滑涔嬪墠鎻愬埌杩?nbsp;zookeeper 鏄€氳繃 鏍戝舰缁撴瀯 鏉ュ瓨鍌ㄦ暟鎹妭鐐圭殑锛岄偅涔熷氨鏄锛屽浜庢瘡涓妭鐐圭殑 鍏ㄨ矾寰?/strong>锛屽畠蹇呭畾鏄敮涓€鐨勶紝鎴戜滑鍙互浣跨敤鑺傜偣鐨勫叏璺緞浣滀负鍛藉悕鏂瑰紡浜嗐€傝€屼笖鏇撮噸瑕佺殑鏄紝璺緞鏄垜浠彲浠ヨ嚜宸卞畾涔夌殑锛岃繖瀵逛簬鎴戜滑瀵规湁浜涙湁璇剰鐨勫璞$殑ID璁剧疆鍙互鏇村姞渚夸簬鐞嗚В銆?/p>

    闆嗙兢绠$悊鍜屾敞鍐屼腑蹇?/h3>

    鐪嬪埌杩欓噷鏄笉鏄寰?nbsp;zookeeper 瀹炲湪鏄お寮哄ぇ浜嗭紝瀹冩€庝箞鑳借繖涔堣兘骞诧紒

    鍒€ワ紝瀹冭兘骞茬殑浜嬫儏杩樺緢澶氬憿銆傚彲鑳芥垜浠細鏈夎繖鏍风殑闇€姹傦紝鎴戜滑闇€瑕佷簡瑙f暣涓泦缇や腑鏈夊灏戞満鍣ㄥ湪宸ヤ綔锛屾垜浠兂瀵瑰強缇や紬鐨勬瘡鍙版満鍣ㄧ殑杩愯鏃剁姸鎬佽繘琛屾暟鎹噰闆嗭紝瀵归泦缇や腑鏈哄櫒杩涜涓婁笅绾挎搷浣滅瓑绛夈€?/p>

    鑰?nbsp;zookeeper 澶╃劧鏀寔鐨?nbsp;watcher 鍜?涓存椂鑺傜偣鑳藉緢濂界殑瀹炵幇杩欎簺闇€姹傘€傛垜浠彲浠ヤ负姣忔潯鏈哄櫒鍒涘缓涓存椂鑺傜偣锛屽苟鐩戞帶鍏剁埗鑺傜偣锛屽鏋滃瓙鑺傜偣鍒楄〃鏈夊彉鍔紙鎴戜滑鍙兘鍒涘缓鍒犻櫎浜嗕复鏃惰妭鐐癸級锛岄偅涔堟垜浠彲浠ヤ娇鐢ㄥ湪鍏剁埗鑺傜偣缁戝畾鐨?nbsp;watcher 杩涜鐘舵€佺洃鎺у拰鍥炶皟銆?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 闆嗙兢绠$悊
    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
  <figcaption class= 娉ㄥ唽涓績

    鎬荤粨

    鐪嬪埌杩欓噷鐨勫悓瀛﹀疄鍦ㄦ槸澶湁鑰愬績浜嗮煈嶐煈嶐煈嶏紝濡傛灉瑙夊緱鎴戝啓寰椾笉閿欑殑璇濈偣涓禐鍝堛€?/p>

    涓嶇煡閬撳ぇ瀹舵槸鍚﹁繕璁板緱鎴戣浜嗕粈涔堭煒掋€?/p>

    鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?> 
 </figure> 
 <p data-tool=杩欑瘒鏂囩珷涓垜甯﹀ぇ瀹跺叆闂ㄤ簡 zookeeper 杩欎釜寮哄ぇ鐨勫垎甯冨紡鍗忚皟妗嗘灦銆傜幇鍦ㄦ垜浠潵绠€鍗曟⒊鐞嗕竴涓嬫暣绡囨枃绔犵殑鍐呭銆?/p>
    • 鍒嗗竷寮忎笌闆嗙兢鐨勫尯鍒?/p>

    • 2PC 銆?code class="mq-726">3PC 浠ュ強 paxos 绠楁硶杩欎簺涓€鑷存€ф鏋剁殑鍘熺悊鍜屽疄鐜般€?/p>

    • zookeeper 涓撻棬鐨勪竴鑷存€х畻娉?nbsp;ZAB 鍘熷瓙骞挎挱鍗忚鐨勫唴瀹癸紙Leader 閫変妇銆佸穿婧冩仮澶嶃€佹秷鎭箍鎾級銆?/p>

    • zookeeper 涓殑涓€浜涘熀鏈蹇碉紝姣斿 ACL锛屾暟鎹妭鐐癸紝浼氳瘽锛?code class="mq-737">watcher鏈哄埗绛夌瓑銆?/p>

    • zookeeper 鐨勫吀鍨嬪簲鐢ㄥ満鏅紝姣斿閫変富锛屾敞鍐屼腑蹇冪瓑绛夈€?/p>

      濡傛灉蹇樹簡鍙互鍥炲幓鐪嬬湅鍐嶆鐞嗚В涓€涓嬶紝濡傛灉鏈夌枒闂拰寤鸿娆㈣繋鎻愬嚭馃馃馃銆?/p>

    鏂囩珷鎺ㄨ崘


    浣犵偣鐨勬瘡涓ソ鐪嬶紝鎴戦兘璁ょ湡褰撴垚浜嗗枩娆?

    以上是关于鏄殑锛佷竴绡囨枃绔犲氨鑳藉甫浣犵湅瀹孼ooKeeper锛?/h1>

    的主要内容,如果未能解决你的问题,请参考以下文章

    銆岀畻娉曚笌鏁版嵁缁撴瀯銆嶅甫浣犵湅鍝堝笇绠楁硶涔嬬編

    浣犺繕鍦ㄧ湅鍒嗗竷寮忓井鏈嶅姟鏋舵瀯锛熻繖绡囨枃绔犺冻澶熻浣犲涔犲埌

    鍚浣犳兂鍐欎釜 React - virtual dom