阅读891 返回首页    go 阿里云 go 技术社区[云栖]


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

  上一篇:go 奖励用户吐槽 阿里云的“用户回家计划”意欲何在?
  下一篇:go tns(thrift 分布式组件)介绍