tns的两种模式
tns客户端tns-client支持不同的使用模式,包括load balance、masterslave模式,接下来介绍不同模式的作用和设计原理
load balance
在集群模式中,一个请求过来后要通过某种策略将请求分配到后台某个服务器上,这个策略我们可以称为负载均衡
tns采用加权随机的方法实现负载均衡
举例:服务serviceA下面有3个实例,对不同的实例分配不同的vNodes个数(权重),假如:a1:2;a2:4;a3:4,那么客户端会将请求的2/10分配到a1节点,将请求的4/10分配到a2节点或a3节点,从而实现了负载均衡
在tnsclient中使用LoadbalanceTSNodeIndexBuilder和RandomTSNodeSelector
masterslave
在集群模式中,我们希望将请求分发到主节点(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,来达到冷启动的效果。