TM集群特点

1)所有节点对等,为P2P结构,不存在主从节点。
2) 节点之间使用Redis作为中间节点,所有状态信息更新至Redis中

TM集群示例图

LB 负载均衡 VIP 负载均衡ltm_负载均衡

TM 健康检查机制

所有TM都会上传自己的信息到中,tm:cluster:*格式的key存在,

例如,某一时刻redis中记录的信息如下

LB 负载均衡 VIP 负载均衡ltm_Redis_02


TM每30秒上报自己的信息到Redis中

tm:cluster:*的key存在超时时间,默认为60s,

因此,当TM超过两次未上报自己信息,或者上报信息表示自己不可用时,会从集群内删除

TC端

LB 负载均衡 VIP 负载均衡ltm_负载均衡_03


TC端会保存所有TM的实例清单

TM端

TM端会提供一些接口,反应当前的状态信息,比如最近一段时间内的并发量,请求成功率等。以方便TC选择合适的TM端进行请求

事务发起方使用TM时序图

LB 负载均衡 VIP 负载均衡ltm_LB 负载均衡 VIP_04

  1. 本地服务A(TC1)在启动时读取本地TM集群配置。
  2. 本地服务A使用客户端负载均衡,由负载均衡策略,选择选择节点TM2
  3. 调用TM2加入到事务组
  4. 服务A调用服务B
  5. 本地服务A使用客户端负载均衡,由负载均衡策略,选择选择节点TM1
  6. 调用TM1加入到事务组
  7. 继续执行后续内容

这样,tc调用的TM节点会使用当前的负载均衡策略选择节点,相对于单TM节点,TM集群分摊了整个应用的调用压力,可以很好的提高并发量。
总结来说,该机制主要有以下特点

  1. 使用客户端负载均衡 ,由事务发起方TC决定使用哪个TM
  2. 由于TM使用同一个Redis,故所有TM的事务信息共享,TM为无状态服务,调用任一服务效果一致。

常用负载均衡策略

  1. 轮询策略(RoundRobinRule)
    轮询策略就是拿到所有的服务节点的列表,对所有节点进行固定排序,挨个请求
    当请求到最后一个节点的情况下,下次请求从第一个节点开始
  2. 随机策略(RandomRule)
    拿到所有的服务节点的列表后,对现有可访问节点,随机抽取一个进行访问
  3. 并发量最小可用策略
    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

整体时序图如下所示

LB 负载均衡 VIP 负载均衡ltm_客户端_05

  1. TC首次启动时,从当前配置文件中选择一可用TM服务器,获取TM集群信息列表
  2. 开启定时器,定时执行TM集群状态更新任务,默认30s一次,可配置
负载均衡

预设几种常见的负载均衡方案

  1. 轮询策略
  2. 随机策略
  3. 并发量最小可用策略(默认)

用户可实现自己的负载均衡策略

特点
  1. TM不区分集群配置还是单节点配置。默认都是使用集群的策略(节点数为1时跳过负载均衡逻辑)
  2. 本地TC只需要配置部分TM集群内的节点,TC启动后会自动拉取所有节点信息。