1)所有节点对等,为P2P结构,不存在主从节点。 2) 节点之间使用Redis作为中间节点,所有状态信息更新至Redis中
所有TM都会上传自己的信息到中,tm:cluster:*格式的key存在, 例如,某一时刻redis中记录的信息如下 TM每30秒上报自己的信息到Redis中 tm:cluster:*的key存在超时时间,默认为60s, 因此,当TM超过两次未上报自己信息,或者上报信息表示自己不可用时,会从集群内删除
TC端会保存所有TM的实例清单
TM端会提供一些接口,反应当前的状态信息,比如最近一段时间内的并发量,请求成功率等。以方便TC选择合适的TM端进行请求
这样,tc调用的TM节点会使用当前的负载均衡策略选择节点,相对于单TM节点,TM集群分摊了整个应用的调用压力,可以很好的提高并发量。 总结来说,该机制主要有以下特点
使用客户端负载均衡 ,由事务发起方TC决定使用哪个TM由于TM使用同一个Redis,故所有TM的事务信息共享,TM为无状态服务,调用任一服务效果一致。轮询策略(RoundRobinRule) 轮询策略就是拿到所有的服务节点的列表,对所有节点进行固定排序,挨个请求 当请求到最后一个节点的情况下,下次请求从第一个节点开始
随机策略(RandomRule) 拿到所有的服务节点的列表后,对现有可访问节点,随机抽取一个进行访问
并发量最小可用策略 TC定时主动去拉去TM的状态信息,TM会返回最近一段时间的并发量统计数据,选择一个并发量最小的并且可用的TM去访问。
其他可用策略待添加
tc本地配置文件会配置TM集群内的部分或者全部节点
txlcn: tm: server: 192.168.100.1:8070,192.168.100.2:8070,192.168.100.3:8070整体时序图如下所示
TC首次启动时,从当前配置文件中选择一可用TM服务器,获取TM集群信息列表开启定时器,定时执行TM集群状态更新任务,默认30s一次,可配置预设几种常见的负载均衡方案
轮询策略随机策略并发量最小可用策略(默认)用户可实现自己的负载均衡策略