锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Zookeeper涓殑瑙掕壊涓昏鏈変互涓嬩笁綾伙紝濡備笅琛ㄦ墍紺猴細 1.鏈緇堜竴鑷存э細client涓嶈榪炴帴鍒板摢涓猄erver錛屽睍紺虹粰瀹冮兘鏄悓涓涓鍥撅紝榪欐槸zookeeper鏈閲嶈鐨勬ц兘銆?/p> 2 .鍙潬鎬э細鍏鋒湁綆鍗曘佸仴澹佽壇濂界殑鎬ц兘錛屽鏋滄秷鎭痬琚埌涓鍙版湇鍔″櫒鎺ュ彈錛岄偅涔堝畠灝嗚鎵鏈夌殑鏈嶅姟鍣ㄦ帴鍙椼?/p> 3 .瀹炴椂鎬э細Zookeeper淇濊瘉瀹㈡埛绔皢鍦ㄤ竴涓椂闂撮棿闅旇寖鍥村唴鑾峰緱鏈嶅姟鍣ㄧ殑鏇存柊淇℃伅錛屾垨鑰呮湇鍔″櫒澶辨晥鐨勪俊鎭備絾鐢變簬緗戠粶寤舵椂絳夊師鍥狅紝Zookeeper涓嶈兘淇濊瘉涓や釜瀹㈡埛绔兘鍚屾椂寰楀埌鍒氭洿鏂扮殑鏁版嵁錛屽鏋滈渶瑕佹渶鏂版暟鎹紝搴旇鍦ㄨ鏁版嵁涔嬪墠璋冪敤sync()鎺ュ彛銆?/p> 4 .絳夊緟鏃犲叧錛坵ait-free錛夛細鎱㈢殑鎴栬呭け鏁堢殑client涓嶅緱騫查蹇熺殑client鐨勮姹傦紝浣垮緱姣忎釜client閮借兘鏈夋晥鐨勭瓑寰呫?/p> 5.鍘熷瓙鎬э細鏇存柊鍙兘鎴愬姛鎴栬呭け璐ワ紝娌℃湁涓棿鐘舵併?/p> 6 .欏哄簭鎬э細鍖呮嫭鍏ㄥ眬鏈夊簭鍜屽亸搴忎袱縐嶏細鍏ㄥ眬鏈夊簭鏄寚濡傛灉鍦ㄤ竴鍙版湇鍔″櫒涓婃秷鎭痑鍦ㄦ秷鎭痓鍓嶅彂甯冿紝鍒欏湪鎵鏈塖erver涓婃秷鎭痑閮藉皢鍦ㄦ秷鎭痓鍓嶈鍙戝竷錛涘亸搴忔槸鎸囧鏋滀竴涓秷鎭痓鍦ㄦ秷鎭痑鍚庤鍚屼竴涓彂閫佽呭彂甯冿紝a蹇呭皢鎺掑湪b鍓嶉潰銆?/p> Zookeeper鐨勬牳蹇冩槸鍘熷瓙騫挎挱錛岃繖涓満鍒朵繚璇佷簡鍚勪釜Server涔嬮棿鐨勫悓姝ャ傚疄鐜拌繖涓満鍒剁殑鍗忚鍙仛Zab鍗忚銆俍ab鍗忚鏈変袱縐嶆ā寮忥紝瀹冧滑鍒嗗埆鏄仮澶嶆ā寮忥紙閫変富錛夊拰騫挎挱妯″紡錛堝悓姝ワ級銆傚綋鏈嶅姟鍚姩鎴栬呭湪棰嗗鑰呭穿婧冨悗錛孼ab灝辮繘鍏ヤ簡鎭㈠妯″紡錛屽綋棰嗗鑰呰閫変婦鍑烘潵錛屼笖澶у鏁癝erver瀹屾垚浜嗗拰leader鐨勭姸鎬佸悓姝ヤ互鍚庯紝鎭㈠妯″紡灝辯粨鏉熶簡銆傜姸鎬佸悓姝ヤ繚璇佷簡leader鍜孲erver鍏鋒湁鐩稿悓鐨勭郴緇熺姸鎬併?/p> 涓轟簡淇濊瘉浜嬪姟鐨勯『搴忎竴鑷存э紝zookeeper閲囩敤浜嗛掑鐨勪簨鍔d鍙鳳紙zxid錛夋潵鏍囪瘑浜嬪姟銆傛墍鏈夌殑鎻愯錛坧roposal錛夐兘鍦ㄨ鎻愬嚭鐨勬椂鍊欏姞涓婁簡zxid銆傚疄鐜頒腑zxid鏄竴涓?4浣嶇殑鏁板瓧錛屽畠楂?2浣嶆槸epoch鐢ㄦ潵鏍囪瘑leader鍏崇郴鏄惁鏀瑰彉錛屾瘡嬈′竴涓猯eader琚夊嚭鏉ワ紝瀹冮兘浼氭湁涓涓柊鐨別poch錛屾爣璇嗗綋鍓嶅睘浜庨偅涓猯eader鐨勭粺娌繪椂鏈熴備綆32浣嶇敤浜庨掑璁℃暟銆?/p> 姣忎釜Server鍦ㄥ伐浣滆繃紼嬩腑鏈変笁縐嶇姸鎬侊細 褰搇eader宕╂簝鎴栬卨eader澶卞幓澶у鏁扮殑follower錛岃繖鏃跺檢k榪涘叆鎭㈠妯″紡錛屾仮澶嶆ā寮忛渶瑕侀噸鏂伴変婦鍑轟竴涓柊鐨刲eader錛岃鎵鏈夌殑Server閮芥仮澶嶅埌涓涓紜殑鐘舵併俍k鐨勯変婦綆楁硶鏈変袱縐嶏細涓縐嶆槸鍩轟簬basic paxos瀹炵幇鐨勶紝鍙﹀涓縐嶆槸鍩轟簬fast paxos綆楁硶瀹炵幇鐨勩傜郴緇熼粯璁ょ殑閫変婦綆楁硶涓篺ast paxos銆傚厛浠嬬粛basic paxos嫻佺▼錛?/p> 閫氳繃嫻佺▼鍒嗘瀽鎴戜滑鍙互寰楀嚭錛氳浣縇eader鑾峰緱澶氭暟Server鐨勬敮鎸侊紝鍒橲erver鎬繪暟蹇呴』鏄鏁?n+1錛屼笖瀛樻椿鐨凷erver鐨勬暟鐩笉寰楀皯浜巒+1. 姣忎釜Server鍚姩鍚庨兘浼氶噸澶嶄互涓婃祦紼嬨傚湪鎭㈠妯″紡涓嬶紝濡傛灉鏄垰浠庡穿婧冪姸鎬佹仮澶嶇殑鎴栬呭垰鍚姩鐨剆erver榪樹細浠庣鐩樺揩鐓т腑鎭㈠鏁版嵁鍜屼細璇濅俊鎭紝zk浼氳褰曚簨鍔℃棩蹇楀茍瀹氭湡榪涜蹇収錛屾柟渚垮湪鎭㈠鏃惰繘琛岀姸鎬佹仮澶嶃傞変富鐨勫叿浣撴祦紼嬪浘濡備笅鎵紺猴細 閫夊畬leader浠ュ悗錛寊k灝辮繘鍏ョ姸鎬佸悓姝ヨ繃紼嬨?/p> 嫻佺▼鍥懼涓嬫墍紺猴細 Leader涓昏鏈変笁涓姛鑳斤細 PING娑堟伅鏄寚Learner鐨勫績璺充俊鎭紱REQUEST娑堟伅鏄疐ollower鍙戦佺殑鎻愯淇℃伅錛屽寘鎷啓璇鋒眰鍙婂悓姝ヨ姹傦紱ACK娑堟伅鏄疐ollower鐨勫鎻愯鐨勫洖澶嶏紝瓚呰繃鍗婃暟鐨凢ollower閫氳繃錛屽垯commit璇ユ彁璁紱REVALIDATE娑堟伅鏄敤鏉ュ歡闀縎ESSION鏈夋晥鏃墮棿銆?br />Leader鐨勫伐浣滄祦紼嬬畝鍥懼涓嬫墍紺猴紝鍦ㄥ疄闄呭疄鐜頒腑錛屾祦紼嬭姣斾笅鍥懼鏉傚緱澶氾紝鍚姩浜嗕笁涓嚎紼嬫潵瀹炵幇鍔熻兘銆?/p> Follower涓昏鏈夊洓涓姛鑳斤細 Follower鐨勬秷鎭驚鐜鐞嗗涓嬪嚑縐嶆潵鑷狶eader鐨勬秷鎭細 Follower鐨勫伐浣滄祦紼嬬畝鍥懼涓嬫墍紺猴紝鍦ㄥ疄闄呭疄鐜頒腑錛孎ollower鏄氳繃5涓嚎紼嬫潵瀹炵幇鍔熻兘鐨勩?/p> http://blog.csdn.net/historyasamirror/article/details/3870168 鍐欏畬浜咷oogle Cluster錛岃杞埌Chubby浜嗐?/span> 鍩烘湰涓婂垎涓轟簡涓ら儴鍒嗭細鏈嶅姟鍣ㄤ竴绔紝縐頒負Chubby cell錛沜lient涓绔紝姣忎釜Chubby鐨刢lient閮芥湁涓涓狢hubby library銆傝繖涓ら儴鍒嗛氳繃RPC榪涜閫氫俊銆?/span>1 Zookeeper鐨勫熀鏈蹇?/h1>
1.1 瑙掕壊

1.2 璁捐鐩殑
2 ZooKeeper鐨勫伐浣滃師鐞?/h1>
2.1 閫変富嫻佺▼

fast paxos嫻佺▼鏄湪閫変婦榪囩▼涓紝鏌怱erver棣栧厛鍚戞墍鏈塖erver鎻愯鑷繁瑕佹垚涓簂eader錛屽綋鍏跺畠Server鏀跺埌鎻愯浠ュ悗錛岃В鍐砮poch鍜寊xid鐨勫啿紿侊紝騫舵帴鍙楀鏂圭殑鎻愯錛岀劧鍚庡悜瀵規柟鍙戦佹帴鍙楁彁璁畬鎴愮殑娑堟伅錛岄噸澶嶈繖涓祦紼嬶紝鏈鍚庝竴瀹氳兘閫変婦鍑篖eader銆傚叾嫻佺▼鍥懼涓嬫墍紺猴細
2.2 鍚屾嫻佺▼

2.3 宸ヤ綔嫻佺▼
2.3.1 Leader宸ヤ綔嫻佺▼

2.3.2 Follower宸ヤ綔嫻佺▼

瀵逛簬observer鐨勬祦紼嬩笉鍐嶅彊榪幫紝observer嫻佺▼鍜孎ollower鐨勫敮涓涓嶅悓鐨勫湴鏂瑰氨鏄痮bserver涓嶄細鍙傚姞leader鍙戣搗鐨勬姇紲ㄣ?/span>
]]>
]]>
鍙傝冩枃鐚細
[1] The Chubby lock service for loosely-coupled distributed systems
[2] Paxos Made Simple
澹版槑
鏂囦腑澶ч儴鍒嗙殑瑙傜偣鏉ヨ嚜浜庢枃鐚甗1]涓殑鎻忚堪錛屼絾涔熷す鏉備簡閮ㄥ垎鏈漢鑷繁鐨勭悊瑙o紝鎵浠ヤ笉鑳戒繚璇佹湰鏂囩殑姝g‘鎬с傜湡鎯蟲繁鍏ヤ簡瑙hubby榪樻槸濂藉ソ璇誨師鐗堣鏂囧惂錛?
鍓嶈█
MapReduce寰堝浜哄凡緇忕煡閬撲簡錛屼絾鍏充簬Chubyy浼間箮鐔熸倝瀹冪殑灝遍潪甯告湁闄愶紝榪欏掓槸涓嶅鎬紝鍥犱負MapReduce鏄竴涓拡瀵瑰紑鍙戜漢鍛樼殑ProgrammingModel錛岃嚜鐒朵細鏈夊緢澶氫漢鍘誨涔犲畠錛岃孋hubby鏇村鐨勬槸涓縐嶄負浜嗗疄鐜癕apReduce鎴栬匓igtable鑰屾瀯寤虹殑鍐呴儴鐨?nbsp;宸ュ叿錛屽浜庡紑鍙戜漢鍛樻潵璇村熀鏈笂鏄忔槑鐨勩傛枃鐚甗1]鎴戝弽澶嶈浜嗚嚦灝戞湁涓や笁澶╋紝浣嗘劅瑙変篃鍙槸涓涓洬鍥靛悶鏋g殑緇撴灉錛岄噷闈㈡湁寰堝宸ョ▼瀹炵幇涓婄殑緇嗚妭錛屽鏋滀笉鏄嚜宸?nbsp;浜茶嚜鍘昏璁℃垨鑰呭疄鐜幫紝寰堥毦浣撲細鍒板叾涓殑閬撶悊鍜屽ゥ濡欍備絾鏄紝瀵逛簬榪欐牱涓涓垎甯冨紡service鐨勭爺絀訛紝榪樻槸璁╂垜瀵逛竴涓垎甯冨紡緋葷粺鐨勭粨鏋勫拰璁捐鎬濇兂鏈変簡鏇村姞鐩?nbsp;瑙傜殑鎰熻銆?/span>
浠巇istributed consensus problem璇磋搗
distributed consensus problem(鍒嗗竷鐨勪竴鑷存ч棶棰?鏄垎甯冨紡綆楁硶涓殑涓涓粡鍏擱棶棰樸傚畠鐨勯棶棰樻弿榪板ぇ姒傛槸榪欐牱鐨勶細鍦ㄤ竴涓垎甯冨紡緋葷粺涓紝鏈変竴緇勭殑Process錛屽畠浠渶瑕佺‘ 瀹氫竴涓猇alue銆備簬鏄瘡涓狿rocess閮芥彁鍑轟簡涓涓猇alue錛宑onsensus灝辨槸鎸囧彧鏈夊叾涓殑涓涓猇alue鑳藉琚変腑浣滀負鏈鍚庣‘瀹氱殑鍊鹼紝騫朵笖 褰撹繖涓艱閫夊嚭鏉ヤ互鍚庯紝鎵鏈夌殑Process閮介渶瑕佽閫氱煡鍒般?/span>
琛ㄩ潰涓婄湅錛岃繖涓棶棰樺緢瀹規槗瑙e喅銆傛瘮濡傝緗竴涓猻erver錛屾墍鏈夌殑process閮?nbsp;鍚戣繖涓猻erver鎻愪氦涓涓猇alue錛岃繖涓猻erver鍙互閫氳繃涓涓畝鍗曠殑瑙勫垯鏉ユ寫閫夊嚭涓涓猇alue錛堜緥濡傛渶鍏堝埌杈劇殑Value琚変腑錛夛紝鐒跺悗鐢辮繖涓猻erver閫氱煡鎵鏈夌殑Process銆備絾鏄湪鍒嗗竷寮忕郴緇熶腑錛屽氨浼氭湁鍚勭鐨勯棶棰樺彂鐢燂紝渚嬪錛岃繖涓猻erver宕╂簝浜嗘庝箞鍔烇紝鎵浠ユ垜浠彲鑳介渶瑕佹湁鍑犲彴server鍏卞悓鍐沖畾銆傝繕鏈夛紝Process鎻愪氦Value鐨勬椂闂撮兘涓嶄竴鏍鳳紝緗戠粶浼犺緭榪囩▼涓敱浜庡歡榪熻繖浜沄alue鍒拌揪server鐨勯『搴忎篃閮芥病鏈変繚璇併?/span>
涓?nbsp;浜嗚В鍐寵繖涓棶棰橈紝鏈夊緢澶氫漢鎻愬嚭浜嗗悇縐嶅悇鏍風殑Protocol錛岃繖浜汸rotocol鍙互鐪嬪仛鏄竴緇勯渶瑕侀伒寰殑瑙勫垯錛屾寜鐓ц繖浜涜鍒欙紝榪欎簺Process灝辮兘 澶熼変婦鍑轟竴涓敮涓鐨刅alue銆傚叾涓紝鏈鏈夊悕鐨勪竴涓狿rotocol灝辨槸Paxos綆楁硶銆傦紙鍏崷涓涓嬶紝Paxos鐨勬彁鍑鴻呭彨鍋歀amport錛屾湁寰堝鍒嗗竷 寮忕殑綆楁硶閮芥槸浠栨彁鍑虹殑錛屼粬榪樻槸Latex鐨勪綔鑰咃紝澶х墰鍟?..錛夈傛兂鏇村姞浜嗚ВPaxos綆楁硶鍙互鍙傝冩枃鐚甗2]錛屽緢婕備寒鐨勪竴綃囨枃绔犮?/span>
閭d箞 榪欎簺鍜孋hubby鏈変粈涔堝叧緋誨憿錛熷叾瀹濩hubby灝辨槸涓轟簡榪欎釜闂鑰屾瀯寤哄嚭鏉ョ殑銆傚彧鏄畠騫朵笉鏄竴涓狿rotocol鎴栬呮槸涓涓畻娉曪紝鑰屾槸google綺?nbsp;蹇冭璁$殑涓涓猻ervice銆傝繖涓猻ervice涓嶄粎鑳藉瑙e喅涓鑷存ч棶棰橈紝榪樻湁鍏跺畠鐨勪竴浜涘緢瀹炵敤鐨勫ソ澶勶紝浼氬湪涓嬫枃鎱㈡參浠嬬粛銆?/span>
涓涓疄渚?/span>
鍦℅oogle File System(GFS)涓紝鏈夊緢澶氱殑server錛岃繖浜泂erver闇瑕侀変婦鍏朵腑鐨勪竴鍙頒綔涓簃aster server銆傝繖鍏跺疄鏄竴涓緢鍏稿瀷鐨刢onsensus闂錛孷alue灝辨槸master server鐨勫湴鍧銆侴FS灝辨槸鐢–hubby鏉ヨВ鍐崇殑榪欎釜闂錛屾墍鏈夌殑server閫氳繃Chubby鎻愪緵鐨勯氫俊鍗忚鍒癈hubby server涓婂垱寤哄悓涓涓枃浠訛紝褰撶劧錛屾渶緇堝彧鏈変竴涓猻erver鑳藉鑾峰噯鍒涘緩榪欎釜鏂囦歡錛岃繖涓猻erver灝辨垚涓轟簡master錛屽畠浼氬湪榪欎釜鏂囦歡涓啓鍏ヨ嚜宸?nbsp;鐨勫湴鍧錛岃繖鏍峰叾瀹冪殑server閫氳繃璇誨彇榪欎釜鏂囦歡灝辮兘鐭ラ亾琚夊嚭鐨刴aster鐨勫湴鍧銆?/span>
Chubby鏄粈涔?/span>
浠?nbsp;涓婇潰鐨勮繖涓疄渚嬪彲浠ョ湅鍑猴紝Chubby棣栧厛鏄竴涓垎甯冨紡鐨勬枃浠剁郴緇熴侰hubby鑳藉鎻愪緵鏈哄埗浣垮緱client鍙互鍦–hubby service涓婂垱寤烘枃浠跺拰鎵ц涓浜涙枃浠剁殑鍩烘湰鎿嶄綔銆傝瀹冩槸鍒嗗竷寮忕殑鏂囦歡緋葷粺錛屾槸鍥犱負涓涓狢hubby cell鏄竴涓垎甯冨紡鐨勭郴緇燂紝涓鑸寘鍚簡5鍙版満鍣紝鏁翠釜鏂囦歡緋葷粺鏄儴緗插湪榪?鍙版満鍣ㄤ笂鐨勩?/span>
浣嗘槸錛屼粠鏇撮珮涓鐐圭殑璇箟灞傞潰涓婏紝Chubby鏄竴涓猯ock service錛屼竴涓拡瀵規澗鑰﹀悎鐨勫垎甯冨紡緋葷粺鐨刲ock service銆傛墍璋搇ock service錛屽氨鏄繖涓猻ervice鑳藉鎻愪緵寮鍙戜漢鍛樼粡甯哥敤鐨?#8220;閿?#8221;錛?#8220;瑙i攣”鍔熻兘銆傞氳繃Chubby錛屼竴涓垎甯冨紡緋葷粺涓殑涓婂崈涓猚lient閮借兘澶?nbsp;瀵逛簬鏌愰」璧勬簮榪涜“鍔犻攣”錛?#8220;瑙i攣”銆?/span>
閭d箞錛孋hubby鏄庢牱瀹炵幇榪欐牱鐨?#8220;閿?#8221;鍔熻兘鐨勶紵灝辨槸閫氳繃鏂囦歡銆侰hubby涓殑“閿?#8221;灝辨槸鏂囦歡錛屽湪涓婁緥 涓紝鍒涘緩鏂囦歡鍏跺疄灝辨槸榪涜“鍔犻攣”鎿嶄綔錛屽垱寤烘枃浠舵垚鍔熺殑閭d釜server鍏跺疄灝辨槸鎶㈠崰鍒頒簡“閿?#8221;銆傜敤鎴烽氳繃鎵撳紑銆佸叧闂拰璇誨彇鏂囦歡錛岃幏鍙栧叡浜攣鎴栬呯嫭鍗犻攣錛?nbsp;騫朵笖閫氳繃閫氫俊鏈哄埗錛屽悜鐢ㄦ埛鍙戦佹洿鏂頒俊鎭?/span>
緇間笂鎵榪幫紝Chubby鏄竴涓猯ock service錛岄氳繃榪欎釜lock service鍙互瑙e喅鍒嗗竷寮忎腑鐨勪竴鑷存ч棶棰橈紝鑰岃繖涓猯ock service鐨勫疄鐜版槸涓涓垎甯冨紡鐨勬枃浠剁郴緇熴?/span>
鍙兘浼氭湁浜洪棶錛屼負浠涔堜笉鏄洿鎺ュ疄鐜頒竴涓被浼間簬Paxos綆楁硶榪欐牱鐨凱rotocol鏉ヨВ鍐充竴鑷存ч棶棰橈紝鑰屾槸瑕侀氳繃涓涓猯ock service鏉ヨВ鍐籌紵鏂囩尞[1]涓彁鍒幫紝鐢╨ock service榪欑鏂瑰紡鏈夊嚑涓ソ澶勶細
1.澶ч儴鍒嗗紑鍙戜漢鍛樺湪寮濮嬪紑鍙憇ervice鐨勬椂鍊欓兘涓嶄細鑰冭檻鍒拌繖縐嶄竴鑷存х殑闂錛屾墍浠ヤ竴寮濮嬮兘涓嶄細浣跨敤consensus protocol銆傚彧鏈夊綋service鎱㈡參鎴愮啛浠ュ悗錛屾墠寮濮嬭鐪熷寰呰繖涓棶棰樸傞噰鐢╨ock service鍙互浣垮緱鍦ㄤ繚鎸佸師鏈夌殑紼嬪簭鏋舵瀯鍜岄氫俊鏈哄埗鐨勬儏鍐典笅錛岄氳繃娣誨姞綆鍗曠殑璇彞灝卞彲浠ヨВ鍐充竴鑷存ч棶棰橈紱
2.姝e涓婃枃瀹炰緥涓墍灞曠幇錛屽緢澶氭椂鍊欏茍涓嶄粎浠呮槸閫変婦鍑轟竴涓猰aster錛岃繕闇瑕佸皢榪欎釜master鐨勫湴鍧鍛婅瘔鍏跺畠浜烘垨鑰呬繚瀛樻煇涓俊鎭紝榪欑鏃跺欙紝浣跨敤Chubby涓殑鏂囦歡錛屼笉浠呬粎鏄彁渚涢攣鍔熻兘錛岃繕鑳藉湪鏂囦歡涓褰曚笅鏈夌敤鐨勪俊鎭紙姣斿master鐨勫湴鍧錛夈傛墍浠ワ紝寰堝鐨勫紑鍙戜漢鍛橀氳繃浣跨敤Chubby鏉ヤ繚瀛榤etadata鍜宑onfiguration銆?/span>
3. 涓涓熀浜庨攣鐨勫紑鍙戞帴鍙f洿瀹規槗琚紑鍙戜漢鍛樻墍鐔熸倝銆傚茍涓嶆槸鎵鏈夌殑寮鍙戜漢鍛橀兘浜嗚Вconsensus protocol鐨勶紝浣嗗ぇ閮ㄥ垎浜哄簲璇ラ兘鐢ㄨ繃閿併?/span>
4. 涓涓猚onsensus protocol涓鑸潵璇撮渶瑕佷嬌鐢ㄥ埌濂藉嚑鍙板壇鏈潵淇濊瘉HA錛堣瑙丳axos綆楁硶錛夛紝鑰屼嬌鐢–hubby錛屽氨綆楀彧鏈変竴涓猚lient涔熻兘鐢ㄣ?/span>
鍙互鐪嬪嚭錛屼箣鎵浠ョ敤lock service榪欐牱鐨勫艦寮忥紝鏄洜涓篊hubby涓嶄粎浠呮兂瑙e喅涓鑷存ч棶棰橈紝榪樺彲浠ユ彁渚涙洿澶氭洿鏈夌敤鐨勫姛鑳姐備簨瀹炰笂錛孏oogle鏈夊緢澶氬紑鍙戜漢鍛樺皢Chubby褰撳仛name service浣跨敤錛屾晥鏋滈潪甯稿ソ銆?/span>
鍏充簬lock service錛岃繕鏈変袱涓悕璇嶉渶瑕佹彁鍙娿?/span>
涓 涓槸advisory lock銆侰hubby涓殑lock閮芥槸advisory lock銆傛墍璋撶殑advisory lock錛屼婦涓緥瀛愶紝灝辨槸璇村綋鏈変漢灝嗘煇涓枃浠墮攣浣忎互鍚庯紝濡傛灉鏈夊叾浠栫殑浜烘兂涓嶈В閿佽岀洿鎺ヨ闂繖涓枃浠訛紝榪欑琛屼負鏄笉浼氳闃繪鐨勩傚拰advisory lock瀵瑰簲鐨勬槸mandatory lock錛屽嵆濡傛灉鏌愪釜鏂囦歡琚攣浣忎互鍚庯紝濡傛灉鏈夊叾浠栫殑浜虹洿鎺ヨ闂畠錛岄偅涔堣繖縐嶈涓烘槸浼氫駭鐢焑xception鐨勩?/span>
鍙?nbsp;涓涓槸coarse-grained錛堢矖棰楃矑搴︾殑錛夈侰hubby鐨刲ock service鏄痗oarse-grained錛屽氨鏄Chubby涓殑lock涓鑸攣浣忕殑鏃墮棿閮芥瘮杈冮暱錛屽彲鑳芥槸鍑犲皬鏃舵垨鑰呭嚑澶┿備笌涔嬪搴旂殑鏄痜ined-grained錛岃繖縐峫ock涓鑸彧緇存寔鍑犵鎴栬呮洿灝戙傝繖涓ょ閿佸湪瀹炵幇鐨勬椂鍊欐槸浼氭湁寰堝涓嶅悓鐨勮冭檻鐨勶紝姣斿coarse-grained鐨刲ock service鐨勮礋杞借灝忓緢澶氾紝鍥犱負鍔犻攣瑙i攣騫朵笉浼氬お棰戠箒銆傚叾瀹冪殑宸埆璇﹁鏂囩尞[1]銆?/span>
Chubby鐨勬灦鏋?/span>![]()
![]()

涓婂浘灝辨槸Chubby鐨勭郴緇熸灦鏋勩?nbsp;
client绔氳繃Chubby library鐨勬帴鍙h皟鐢紝鍦–hubby cell涓婂垱寤烘枃浠舵潵鑾峰緱鐩稿簲鐨勯攣鐨勫姛鑳姐?/span>
鐢變簬鏁翠釜Chubby緋葷粺姣旇緝澶嶆潅錛屼笖緇嗚妭寰堝錛屾垜涓漢鍙堝皢鏁翠釜緋葷粺鍒嗕負浜嗕笁涓儴鍒嗭細
Chubby cell鐨勪竴鑷存ч儴鍒?/span>
鍒嗗竷寮忔枃浠剁郴緇熼儴鍒?/span>
client涓嶤hubby cell鐨勯氫俊鍜岃繛鎺ラ儴鍒?/span>
鍏堜粠Chubby cell鐨勪竴鑷存ч儴鍒嗚璧楓?/span>
涓鑸潵璇達紝涓涓狢hubby cell鐢變簲鍙皊erver緇勬垚錛屽彲浠ユ敮鎸佷竴鏁翠釜鏁版嵁涓績鐨勪笂涓囧彴鏈哄櫒鐨刲ock service銆?/span>
cell涓殑姣忓彴server鎴戜滑縐頒箣涓簉eplicas錛堝壇鏈級銆?/span>
褰揅hubby宸ヤ綔鐨勬椂鍊欙紝棣栧厛瀹冮渶瑕佷粠榪欎簺replicas涓変婦鍑轟竴涓猰aster銆傛敞鎰忥紝榪欏叾瀹炰篃鏄竴涓猟istributed consensus problem錛屼篃灝辨槸璇碈hubby涔熷瓨鍦ㄧ潃鍒嗗竷寮忕殑涓鑷存ч棶棰樸侰hubby鏄氳繃閲囩敤consensus protocol錛堝緢鍙兘灝辨槸Paxos綆楁硶錛夋潵瑙e喅榪欎釜闂鐨勩傛墍浠ワ紝Chubby鐨刢lient鐢–hubby鎻愪緵鐨刲ock service鏉ヨВ鍐充竴鑷存ч棶棰橈紝鑰孋hubby緋葷粺鍐呴儴鐨勪竴鑷存ч棶棰樺垯鏄敤consensus protocol瑙e喅鐨勩?/span>
姣忎釜master閮藉叿鏈変竴瀹氱殑鏈熼檺錛屾垚涓簃aster lease銆傚湪榪欎釜鏈熼檺涓紝鍓湰浠笉浼氬啀閫変婦涓涓叾瀹冪殑master銆?/span>
涓?nbsp;浜嗗畨鍏ㄦу拰瀹歸敊鐨勮冭檻錛屾墍鏈夌殑replicas錛堝寘鎷琺aster錛夐兘緇存姢鐨勫悓涓涓狣B鐨勬嫹璐濄備絾鏄紝鍙湁master鑳藉鎺ュ彈client鎻愪氦鐨勬搷浣滃DB榪涜璇誨拰鍐欙紝鑰屽叾瀹冪殑replicas鍙槸鍜宮aster榪涜閫氫俊鏉pdate瀹冧滑鍚勮嚜鐨凞B銆傛墍浠ワ紝涓鏃︿竴涓猰aster琚変婦鍑烘潵鍚庯紝鎵鏈夌殑client绔兘涔嬪拰master榪涜閫氫俊錛堝鍥炬墍紺猴級錛屽鏋滄槸璇繪搷浣滐紝閭d箞master涓鍙版満鍣ㄥ氨鎼炲畾浜嗭紝濡傛灉鏄啓鎿嶄綔錛宮aster浼氶氱煡鍏跺畠鐨剅eplicas榪涜update銆傝繖鏍風殑璇濓紝涓鏃aster鎰忓鍋滄満錛岄偅涔堝叾瀹冪殑replicas涔熻兘澶熷緢蹇殑閫変婦鍑哄彟澶栦竴涓猰aster銆?/span>
鍐嶈璇碈hubby鐨勬枃浠剁郴緇?/span>
鍓?nbsp;鏂囪榪囷紝Chubby鐨勫簳灞傚疄鐜板叾瀹炲氨鏄竴涓垎甯冨紡鐨勬枃浠剁郴緇熴傝繖涓枃浠剁郴緇熺殑鎺ュ彛鏄被浼間簬Unix緋葷粺鐨勩備緥濡傦紝瀵逛簬鏂囦歡鍚?#8220;/ls/foo /wombat/pouch”錛宭s琛ㄧず鐨勬槸“lock service”錛宖oo琛ㄧず鐨勬槸鏌愪釜Chubby cell鐨勫悕瀛楋紝wombat/pouch鍒欐槸榪欎釜cell涓婄殑鏌愪釜鏂囦歡鐩綍鎴栬呮枃浠跺悕銆傚鏋滀竴涓猚lient绔嬌鐢–hubby library鏉ュ垱寤鴻繖鏍蜂竴涓枃浠跺悕錛岄偅涔堣繖鏍蜂竴涓枃浠跺氨浼氬湪Chubby cell涓婅鍒涘緩銆?/span>
Chubby鐨勬枃浠剁郴緇熺敱浜庡畠鐨勭壒孌婄敤閫斿仛浜嗗緢澶?nbsp;鐨勭畝鍖栥備緥濡傚畠涓嶆敮鎸佹枃浠剁殑杞Щ錛屼笉璁板綍鏂囦歡鏈鍚庤闂椂闂寸瓑絳夈傛暣涓枃浠剁郴緇熷彧鍖呭惈鏈夋枃浠跺拰鐩綍錛岀粺涓縐頒負“Node”銆傛枃浠剁郴緇熼噰鐢˙erkeley DB鏉ヤ繚瀛楴ode鐨勪俊鎭紝涓昏鏄竴縐峬ap鐨勫叧緋匯侹ey灝辨槸Node鐨勫悕瀛楋紝Value灝辨槸Node鐨勫唴瀹廣?/span>
榪樻湁涓鐐歸渶瑕佹彁鍙婄殑 鏄紝Chubby cell鍜宑lient涔嬮棿鐢ㄤ簡event褰㈠紡鐨勯氱煡鏈哄埗銆俢lient鍦ㄥ垱寤轟簡鏂囦歡涔嬪悗浼氬緱鍒頒竴涓猦andle錛屽茍涓旇繕鍙互璁㈤槄涓緋誨垪鐨別vent錛屼緥 濡傛枃浠跺唴瀹逛慨鏀圭殑event銆傝繖鏍風殑璇濓紝涓鏃lient鐩稿叧鐨勬枃浠跺唴瀹硅淇敼浜嗭紝閭d箞cell浼氶氳繃鏈哄埗鍙戦佷竴涓猠vent鏉ュ憡璇塩lient璇ユ枃浠惰 淇敼浜嗐?/span>
鏈鍚庤皥璋坈lient涓巆ell鐨勪氦浜掗儴鍒?/span>
榪欓噷澶ц嚧鍖呭惈涓ら儴鍒嗙殑鍐呭錛歝ache鐨勫悓姝ユ満鍒跺拰KeepAlive鎻℃墜鍗忚銆?/span>
涓?nbsp;浜嗛檷浣巆lient鍜宑ell涔嬮棿閫氫俊鐨勫帇鍔涘拰棰戠巼錛宑lient鍦ㄦ湰鍦頒細淇濆瓨涓涓拰鑷繁鐩稿叧鐨凜hubby鏂囦歡鐨刢ache銆備緥濡傚鏋渃lient閫氳繃Chubby library鍦╟ell涓婂垱寤轟簡涓涓枃浠訛紝閭d箞鍦╟lient鏈湴錛屼篃浼氭湁涓涓浉鍚岀殑鏂囦歡鍦╟ache涓垱寤猴紝榪欎釜cache涓殑鏂囦歡鐨勫唴瀹瑰拰cell涓婃枃浠剁殑鍐呭鏄竴鏍風殑銆傝繖鏍風殑璇濓紝client濡傛灉鎯寵闂繖涓枃浠訛紝灝卞彲浠ョ洿鎺ヨ闂湰鍦扮殑cache鑰屼笉閫氳繃緗戠粶鍘昏闂甤ell銆?/span>
cache鏈変袱涓姸鎬侊紝鏈夋晥鍜屾棤鏁堛傚綋 鏈変竴涓猚lient瑕佹敼鍙樻煇涓狥ile鐨勬椂鍊欙紝鏁翠釜淇敼浼氳master block錛岀劧鍚巑aster浼氬彂閫佹棤鏁堟爣蹇楃粰鎵鏈塩ache浜嗚繖涓暟鎹殑client錛堝畠緇存姢浜嗚繖涔堜竴涓〃錛夛紝褰撳叾瀹僣lient绔敹鍒拌繖涓棤鏁堟爣蹇?nbsp;鍚庯紝灝變細灝哻ache涓殑鐘舵佺疆涓烘棤鏁堬紝鐒跺悗榪斿洖涓涓猘cknowledge錛涘綋master紜畾鏀跺埌浜嗘墍鏈夌殑acknowledge涔嬪悗錛屾墠瀹屾垚鏁翠釜modification銆?/span>
闇瑕佹敞鎰忕殑鏄紝master騫朵笉鏄彂閫乽pdate緇檆lient鑰屾槸鍙戦佹棤鏁堟爣蹇楃粰client銆傝繖鏄洜涓哄鏋滃彂閫乽pdate緇檆lient錛岄偅涔堟瘡 涓嬈℃暟鎹殑淇敼閮介渶瑕佸彂閫佷竴澶у爢鐨剈pdate錛岃屽彂閫佹棤鏁堟爣紺虹殑璇濓紝瀵逛竴涓暟鎹殑寰堝嬈′慨鏀瑰彧闇瑕佸彂閫佷竴涓棤鏁堟爣紺猴紝榪欐牱澶уぇ闄嶄綆浜嗛氫俊閲忋?/span>
鑷充簬KeepAlive鍗忚錛屽垯鏄負浜嗕繚璇乧lient鍜宮aster闅忔椂閮戒繚鎸佺潃鑱旂郴銆俢lient鍜宮aster姣忛殧涓孌墊椂闂村氨浼欿eepAlive涓嬈★紝榪欐牱鐨勮瘽錛屽鏋渕aster鎰忓鍋滄満錛宑lient鍙互寰堝揩鐨勭煡閬撹繖涓秷鎭紝鐒跺悗榪呴熺殑杞Щ鍒版柊鐨刴aster涓娿傚茍涓旓紝榪欑杞Щ瀵逛簬client绔殑application鏄忔槑鐨勶紝涔熷氨鏄application騫朵笉浼氱煡閬搈aster鍙戠敓浜嗛敊璇傚叧浜巆ache鍜孠eepAlive榪樻湁寰堝鐨?nbsp;緇嗚妭錛屾兂浜嗚В鐨勮鏂囩尞[1]鍚с?/span>
鎬葷粨
鍏跺疄鍦ㄦ垜鐨勮繖綃囨枃绔犱腑錛岃繕鏈変竴涓緢澶х殑涓婚娌℃湁鎻愬強錛岄偅灝辨槸Chubby鐨勫閿欐満鍒躲傚熀鏈笂錛屽閿欒繖涓濇兂璐┛浜嗘枃鐚甗1]鐨勫緇堬紝涔熸鏄洜姝わ紝鎴戝緢闅懼皢 瀹冨崟鐙彁鍙栧嚭鏉ヨВ閲婏紝鍥犱負瀹冩暎钀藉湪浜咰hubby緋葷粺璁捐鐨勬墍鏈夎钀姐傛垜涓漢鎰熻錛屽閿欐槸涓涓垎甯冨紡緋葷粺璁捐鐨勬牳蹇冩濇兂錛屽湪璁捐鐨勬椂鍊欒姹傝冭檻鍒版墍鏈夊彲鑳?nbsp;浼氬彂鐢熺殑閿欒錛屼笉浠呬粎鍖呮嫭浜嗙‖浠剁殑閿欒錛岀綉緇滅殑鏁呴殰錛岃繕鍖呮嫭浜嗗紑鍙戜漢鍛樺彲鑳藉嚭鐜扮殑閿欒銆傛垜鎯籌紝榪欐槸鎴戣榪欑瘒鏂囩珷[1]鏈澶х殑鏀惰幏銆?br />
/Files/mysileng/Paxos綆楁硶娣卞叆鍒嗘瀽.doc
]]>
綆鍗曞仛涓涓綊綰籌紝浠庝綆鎴愭湰銆侀珮鎬ц兘鍜岄珮鎵╁紶鎬х殑瑙掑害鏉ヨ鏈夊涓嬪鐞嗘柟妗堬細
1銆丠TML闈欐佸寲
2銆佸浘鐗囨湇鍔″櫒鍒嗙
3銆佹暟鎹簱闆嗙兢鍜屽簱琛ㄦ暎鍒?nbsp;
4銆佺紦瀛?nbsp;
5銆侀暅鍍?nbsp;
6銆佽礋杞藉潎琛?涓涓吀鍨嬬殑浣跨敤璐熻澆鍧囪 鐨勭瓥鐣ュ氨鏄紝鍦ㄨ蔣浠舵垨鑰呯‖浠跺洓灞備氦鎹㈢殑鍩虹涓婃惌寤簊quid闆嗙兢錛岃繖縐嶆濊礬鍦ㄥ緢澶氬ぇ鍨嬬綉绔欏寘鎷悳绱㈠紩鎿庝笂琚噰鐢紝榪欐牱鐨勬灦鏋勪綆鎴愭湰銆侀珮鎬ц兘榪樻湁寰堝己鐨勬墿寮犳э紝闅忔椂寰鏋舵瀯閲岄潰澧炲噺鑺傜偣閮介潪甯稿鏄撱?nbsp;
涓嬮潰涔熸槸涓涓墰浜烘墍鍋氱殑鎬葷粨錛岃窡涓婇潰閮ㄥ垎鐩稿悓銆?nbsp;
楂樺茍鍙戞椂錛屾ц兘鐡墮鍙婂綋鍓嶅父鐢ㄧ殑搴斿鎺柦
1.鏁版嵁搴撶摱棰堛侻ysql騫跺彂閾炬帴100
2.apache 騫跺彂閾炬帴1500
3.紼嬪簭鎵ц鏁堢巼
1.鏈夋暟鎹簱鐡墮鏃訛紝褰撳墠澶勭悊鏂規鏃犲涔?涓諱粠錛岄泦緹ゃ傚鍔燾ache(memcached).
濡傦細鎵嬫満涔嬪鏂扮郴緇熶粙緇嶅強鏋舵瀯鍒嗕韓錛坔ttp://www.slideshare.net/Fenng/ss-1218991?from=ss_embed錛?nbsp;
灝辨槸鍦╟ache灞傚仛浼樺寲
鍙堟媿緗戞灦鏋勶紙http://www.bopor.com/?p=652錛?nbsp;
鏄互澧炲姞鏁版嵁搴擄紝鍒嗚〃鍒嗗簱鐨勬柟娉曡В鍐熾?nbsp;
Sina澧炲姞浜唌q(娑堟伅闃熷垪)鏉ュ垎鍙戞暟鎹?nbsp;
榪樻湁椋庣珯鐢ㄤ簡key-value鐨勬暟鎹簱銆傚叾瀹炶繖鍙互鐞嗚В鎴愪竴涓寔涔呭寲鐨勭紦瀛樸?nbsp;
2.apache鐡墮銆?nbsp;
澧炲姞鏈嶅姟鍣ㄣ傝礋杞藉潎琛°傚sina鐨凢5
鐢變簬榪涚▼鏁扮殑闄愬埗銆備細鎶婁竴浜涘熀鏈笉鍙樼殑浠g爜鎸嚭鏉ユ斁鍒板崟鐙殑鏈嶅姟鍣ㄣ傚css/js/鍥劇墖銆?nbsp;
鍥藉唴鎴愬姛鐨勬渚嬫槸tom鐨刢dn
鍙堝nginx鐨勬í絀哄嚭涓栧拰squid鐨勫弽鍚戜唬鐞嗛兘鏄熀浜庤繖涓師鍥犲嚭鏉ョ殑銆?nbsp;
3.php鐨勬墽琛屾晥鐜囥傚師鍥犳湁澶氫釜銆?nbsp;
1錛?鏈韓鐨勬晥鐜囦綆銆?nbsp;
瑙e喅鐨勬垚鍔熸渚嬫槸Zend Optimizer 鍜?facebooke鐨刪iphop
Taobao鏄妸php浠g爜緙栬瘧鎴愭ā鍧楄В鍐蟲晥鐜囬棶棰樸?nbsp;
2). 鏁版嵁搴撴煡璇㈡晥鐜囬棶棰樸傚鍙兘鏈塷rder by ,group by 絳塖ql鏁版嵁闂銆?nbsp;
榪欎釜鍏跺疄搴旇褰掔粨鍒版暟鎹簱璁捐闂銆?nbsp;
瑙e喅鐨勫姙娉曟槸寤虹珛姝g‘鐨勭儲寮曘傚鍔爉emcache.銆?nbsp;
瀵筶ike琛?鐢ㄤ笓鐢ㄧ殑sphinx.鍜宭ucence 絳夋悳绱㈡湇鍔°?nbsp;
紼嬪簭鍛橀兘搴旇浼氱敤explain瀵箂ql璇彞浣滃垎鏋愩?nbsp;
璇村埌搴曘傝В鍐抽珮騫跺彂灝辨槸涓婇潰鎵鍒楁妧鏈紝紼嬪簭鍛樿鍋氱殑灝辨槸鎶婃瘡涓妧鏈叿浣撳疄鐜般?nbsp;
]]>