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