Tim锛氭湇鍔$鐞嗘鏋剁殑灏濊瘯

澶у瀷杞欢绯荤粺寮€鍙戦渶瑕佹ā鍧楀寲锛屽湪鍒嗗竷寮忕郴缁熶腑锛屾ā鍧楀寲閫氬父鏄皢鍔熻兘鍒嗘垚涓嶅悓鐨勮繙绋嬫湇鍔★紙RPC锛夋潵瀹炵幇銆傛瘮濡傚彲浠ョ敤Java RMI銆乄eb Service銆丗acebook寮€婧愮殑Thrift绛変竴浜涙妧鏈€傚悓鏍凤紝鍦ㄤ竴涓ぇ鍨嬬郴缁熶腑锛屾湇鍔″寲涔嬪悗鏈嶅姟鐨勫彲缁存姢銆佸彲绠$悊銆佸彲鐩戞帶浠ュ強楂樺彲鐢ㄣ€佽礋杞藉潎琛$瓑鍥犵礌鍚屾湇鍔℃湰韬悓鏍烽噸瑕併€?/p>

鏈嶅姟绠$悊鐩墠骞舵棤鐩存帴瑙e喅鏂规锛孴hrift浣滆€匨ark Slee鎻愬埌

It’s also possible to use Thrift to actually build a services management tool. i.e. have a central Thrift service that can be queried to find out information about which hosts are running which services. We have done this internally, and would share more details or open source it, but it’s a bit too particular to the way our network is set up and how we cache data. The gist of it, though, is that you have a highly available meta-service that you use to configure your actual application server/clients.

Source: [Thrift] Handling failover and high availability with thriftservices

濡傛灉寮€鍙戜竴涓嚜宸辩殑鏈嶅姟绠$悊妗嗘灦锛岄渶瑕佸叿澶囦互涓嬪姛鑳?/p>

  • 蹇€熷け璐ワ紝杩欎釜鍦ㄦ湰鍘傛剰涔夐噸澶э紝寰堝杩滅▼鏈嶅姟璋冪敤鏄湪鍏抽敭璺緞涓紝瀹冨彲浠ュ蹇嶅け璐ワ紝浣嗘槸涓嶈兘瀹瑰繊鍫靛
  • failover锛屽鎴风failover鏀寔锛屽苟鏀寔鑷姩澶辨晥鎺㈡祴鍙婃仮澶嶈皟鐢?/li>
  • 涓績鍖栭厤缃強鎺ㄩ€佸姛鑳斤紝鎵€鏈塩lient鍦ㄥ悓涓€鏃跺埢閰嶇疆鐨勪竴鑷存€э紝骞朵笖client浼氳窡閰嶇疆涓績淇濇寔闀胯繛
  • 璐熻浇鍧囪 绛栫暐锛氭敮鎸乺ound robin锛宭east active, consistent hash锛屾垨鑰呭熀浜庤剼鏈殑鍔ㄦ€佽矾鐢辩瓥鐣ャ€傝繖涓兘鏄敱閰嶇疆涓績鏉ユ帶鍒?/li>
  • 鍔ㄦ€佸惎鐢ㄥ強鍋滅敤鏈嶅姟鍙婅妭鐐癸細鍙互鍔ㄦ€佸惎鍔ㄥ強鍋滅敤鏈嶅姟锛堢儹鍙戝竷锛夛紝鐢变簬鏈夋帹閫佸姛鑳斤紝鐩稿瀹规槗瀹炵幇
  • 璺ㄨ瑷€锛氭敮鎸乧lient鑳戒娇鐢ㄥ父瑙佷富娴佽瑷€鏉ヨ闂?/li>
  • 鐗堟湰绠$悊锛氬悓涓€鏈嶅姟鍙互鏈変笉鍚岀殑鐗堟湰骞跺瓨
  • 璁块棶缁熻鍙婂姩鎬佽繍琛屽弬鏁版煡鐪嬶細鍙互瀵规柟娉曠骇鍒繘琛岃闂粺璁″強瀹炴椂瑙傚療

璁块棶绛栫暐

鏈嶅姟妗嗘灦鍊惧悜浜庣洿杩炵殑鏂规锛屽嵆client鏄洿鎺ヨ繛鎺erver锛岃€屼笉浼氬鍔犱腑闂寸墿鐞嗕笂鐨勪唬鐞嗗眰锛屾湇鍔℃鏋跺彧鍋氫腑蹇冮厤缃€佽闂瓥鐣ャ€佹湇鍔″彂鐜般€侀厤缃€氱煡绛夎亴璐c€?/p>

璺敱鐨勭壒娈婇渶姹?/h2>

閫氬父鐨勬湇鍔¤闂紝浣跨敤涓婅堪round robin绛?绉嶇瓥鐣ュ嵆鍙紝浣嗘槸鍦ㄥ疄闄呭伐绋嬪疄璺典腑锛屾垜浠彂鐜版湁浜涗笉鍚岀殑闇€姹傘€傛瘮濡傝鏁拌繖鏍风殑杩滅▼鏈嶅姟锛岃鎿嶄綔鍙殢鏈鸿闂竴鍙拌繙绋嬭妭鐐癸紝浣嗗啓鎿嶄綔闇€瑕佽闂墍鏈夌殑鏈嶅姟鑺傜偣鎵嶈兘瀹炵幇銆傚洜姝ゆ垜浠渶瑕佹湁骞挎挱寮忕殑璁块棶闇€姹傘€傜敱浜庤鏁版湇鍔″瀹炴椂鎬у拰涓€鑷存€ц姹傝緝楂橈紝涓嶉€傚悎閲囩敤寮傛濡侾ub/Sub杩欐牱鏂瑰紡鍘诲疄鐜帮紝鍥犳鍦╟lient杩橀渶瑕佹敮鎸佸悓姝ョ殑骞挎挱璋冪敤銆?/p>

鑰﹀悎鍙婁镜鍏ョ殑鐭涚浘

鍦ㄨ璁℃湇鍔$鐞嗙郴缁熶箣鍓嶏紝鎴戜滑甯屾湜涓嶈窡涓€绉嶅叿浣撶殑鎶€鏈紙濡俆hrift锛夌粦瀹氾紝姣斿client鍜宻erver鏈嶅姟瀹炵幇鏂逛笉闇€瑕佸お澶氬叧蹇冨簳灞傛妧鏈€備絾鏄湪瀹為檯瀹炵幇杩囩▼涓鍒颁笉灏戠煕鐩俱€?/p>

IDL渚靛叆

鍦ㄤ娇鐢═hrift涔嬪悗鏈嶅姟瀹炵幇寰堥毦缁曡繃Thrift IDL锛屼娇鐢ㄦ柟闇€瑕佽嚜宸辩淮鎶DL浠ュ強Thrift鐢熸垚鐨勪唬鐮侊紝鏈嶅姟妗嗘灦鏀寔灏員hrift鏈嶅姟娉ㄥ唽鍒伴厤缃郴缁熶腑銆傝櫧鐒朵篃鍙互缁曡繃IDL鏉ュ疄鐜版湇鍔★紝浣嗘槸妗嗘灦鐩稿叧鍔熻兘鐨勫疄鐜板拰缁存姢鎴愭湰姣旇緝楂樸€?/p>

RPC妗嗘灦鐨勪镜鍏?/h3>

Thrift Transport鍙互浣跨敤TCP锛圫ocket锛夋垨鑰呮槸HTTP
杩欎釜涔熸槸闈炲父濂界殑鐗规€э紝鍦ㄦ煇浜涙儏鍐礣ransport浣跨敤HTTP浼氬甫鏉ュ緢澶氫究鍒╋紝浣跨敤HTTP铏界劧鏈変竴浜涢澶栧紑閿€锛屼絾鏄疕TTP鐨勫懆杈归厤濂楄鏂界殑瀹屽杽瓒冲鎶垫秷杩欑寮€閿€銆備娇鐢═CP寰堝鐘舵€佸疄鏃剁洃鎺ч兘闇€瑕佹湇鍔$郴缁熶粠澶村仛璧枫€?/p>

Thrift鐨刅ersion涓庢湇鍔$殑version瀛樺湪涓€瀹氱殑閲嶅
鏈嶅姟鐗垫秹鍒扮増鏈鐞嗭紝鎴戜滑甯屾湜閫氳繃鍙戠幇鏈嶅姟鏉ョ鐞嗭紝浣嗘槸Thrift鏈韩涔熸湁鐗堟湰鐨勮璁°€?/p>

杩欎簺鐭涚浘鐨勬湰璐ㄥ氨鏄湇鍔℃鏋堕渶瑕佺殑涓€浜涘姛鑳芥槸鑷繁瀹炵幇杩樻槸渚濊禆Thrift鏉ュ疄鐜帮紝寰堝Thrift浣跨敤鏂瑰Twitterrpc-client骞茶剢灏辩洿鎺ュ湪Thrift妗嗘灦鍩虹涓婂寮恒€?/p>

铏界劧瀛樺湪涓婅堪涓€浜涘緟瑙e喅闂锛屽巶鍐呯涓€涓娇鐢ㄦ湇鍔℃鏋剁鐞嗙殑鏈嶅姟鍗冲皢涓婄嚎锛屽緢蹇瘡澶╀細鏈夋暟鍗佷嚎鐨勮皟鐢ㄥ皢浼氬湪姝や箣涓婁骇鐢燂紝鍚屾椂涔熶細鏈夋柊鐨勬寫鎴樺嚭鐜般€?/p>


Figure 1: Facebook Service Management Console
锛堟潵婧愶細http://www.slideshare.net/adityaagarwal/qcon Slide 27锛?/p>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。