tns的兩種模式及灰度發布與冷啟動
tns的兩種模式
tns客戶端tns-client支持不同的使用模式,包括load balance、master\slave模式,接下來介紹不同模式的作用和設計原理
load balance
在集群模式中,一個請求過來後要通過某種策略將請求分配到後台某個服務器上,這個策略我們可以稱為負載均衡
tns采用**加權隨機**的方法實現負載均衡
舉例:服務serviceA下麵有3個實例,對不同的實例分配不同的vNodes個數(權重),假如:a1:2;a2:4;a3:4,那麼客戶端會將請求的2/10分配到a1節點,將請求的4/10分配到a2節點或a3節點,從而實現了負載均衡
在tnsclient中使用**LoadbalanceTSNodeIndexBuilder**和**RandomTSNodeSelector**
master\slave
在集群模式中,我們希望將請求分發到主節點(master),然後當master down後,將請求分發到某slave節點
大多數分布式係統master/slave由分布式係統本身實現,即係統自身包含一個監控組件,當監控組件檢測到master不可用後自動提升某slave為master,典型代表為zookeeper(leader、flower)
tns自身並不提供master\slave功能,通過tnsclient在調用某個服務時實現。同樣基於vNodes機製,tnsclient將獲取到的某服務的所有實例,根據vNodes進行自然排序,vNodes小的節點優先,若vNodes相同,再根據id進行排序
同上麵例子,如果采用master\slave模式,a1 vnodes最小,排在第一位,作為master;假如a1 down掉,那麼a2或a3被提升為master,此時a2和a3 vnodes相同,所以id小的會被提升為master
在tnsclient中使用**MaterSlaveTSNodeIndexBuilder**和**MasterSlaveTSNodeSelector**
灰度發布與冷啟動
所謂灰度發布,就是對要發布的程序先小批量上線,一旦出現問題,不至於影響到所有用戶。
tns實現方式天然具有灰度發布的特性。基於vNodes,並且采用load balance模式,我們隻需將發布的新節點的vNodes設置比較小(權重低),那麼線上的流量隻會有一小部分流到這個新節點,從而實現灰度發布的效果。
一般情況下,剛剛加入到集群的節點認為是冷啟動狀態,為了進行預熱,需要對其慢慢增加壓力,同上,tns在每次ping service的時候都會更新vNodes,service可以根據自己的狀態返逐級增加vNodes,來達到冷啟動的效果。
最後更新:2017-04-11 16:30:21