在叢集模式中,一個請求過來後要通過某種政策将請求配置設定到背景某個伺服器上,這個政策我們可以稱為負載均衡
tns采用權重随機的方法實作負載均衡
舉例:服務servicea下面有3個執行個體,對不同的執行個體配置設定不同的vnodes個數(權重),假如:a1:2;a2:4;a3:4,那麼用戶端會将請求的2/10配置設定到a1節點,将請求的4/10配置設定到a2節點或a3節點,進而實作了負載均衡
在tnsclient中使用loadbalancetsnodeindexbuilder和randomtsnodeselector
在叢集模式中,我們希望将請求分發到主節點(master),然後當master down後,将請求分發到某slave節點
大多數分布式系統master/slave由分布式系統本身實作,即系統自身包含一個監控元件,當監控元件檢測到master不可用後自動提升某slave為master,典型代表為zookeeper(leader、flower)
tns自身并不提供masterslave功能,通過tnsclient在調用某個服務時實作。同樣基于vnodes機制,tnsclient将擷取到的某服務的所有執行個體,根據vnodes進行自然排序,vnodes小的節點優先,若vnodes相同,再根據id進行排序
同上面例子,如果采用masterslave模式,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,來達到冷啟動的效果。