天天看點

tns(thrift 分布式元件)介紹

使用方式wiki上都有,這裡簡單說說tns cluster的特性,及設計結構。

cluster結構圖

tns(thrift 分布式元件)介紹

tns cluster 采用無中心化設計,也就是cluster中每個node都是均等的,在任一節點執行指令都等效,叢集元件類似于redis,在節點上執行meet 即可,滿足傳遞性,例如: 1 meet 2;2 meet 3 等效于1 meet 3; 1 meet 2

每個node均有一個id,id唯一,根據hostname+port生成,在叢集中cluster按id排序,組成一個環,如上圖綠色環,其中id較小的會負責檢查比其稍大的id的節點健康狀态,并将自己知道的cluster list及健康狀态和service list(不包含健康狀态)傳輸到對方,實作叢集資訊同步,假如2節點down了,1會标記2節點狀态為down,并将自己的資訊以後同步給3,因為2一旦down掉,是不可自動恢複的,隻能手動恢複(重新開機2,并執行meet 重新上線).

tns内部結構圖

tns(thrift 分布式元件)介紹

如圖,在nameserver中添加三個rpc server節點,service名稱定義為drpc,每增加一個節點時,可以指定ping的周期,nameserver會定時調用drpc的ping方法,ping方法傳回vnodes,含義為虛拟節點,用于用戶端對請求負載均衡,另外nameserver也根據每次ping傳回的vnodes值來判斷service server是否可用,若vnodes<0,nameserver會标記service node為down,nameserver隻會同步up狀态的service節點清單給用戶端,增加或下線一個節點,一個周期後(用戶端設定周期)也會被用戶端同步到。

單個的vnodes沒什麼含義,在一個service下有多個node時才有含義,例如上圖中drpc包含三個節點,并且每個節點vnodes分别為7、2、1,用戶端負載均衡後,其中7/10的流量會流向node1,1/10會流向node3,進而實作負載均衡,用戶端預設提供一個随機選擇器,大家可以按自己的意願自己實作。

線上不論是tns node還是service node均可随時增加或減少,進而實作水準動态可擴充。

詳細使用幫助文檔,朋友們可以參考thriftnameserver 的wiki。

tns(thrift 分布式元件)介紹

**jerry 于北京

2016-1-11**