1.极致性能优化
1.1. 同库模式
通常,一个TM
会产生一笔主事务日志,一个RM
会产生一条分支事务日志,每个分布式事务由一个TM
和若干 RM
组成,一个分布式事务总共会有1+N
条事务日志(N
为RM
个数)。
在默认情况下,分布式事务执行过程中客户端将事务日志发送给服务端,服务端再将事务日志存储至数据库中,一条事务日志的存储链路会有 2 次TCP
,分别是“客户端到服务端”和“服务端到数据库”, 我们称这种模式为异库模式。
在异库模式下,分布式事务存储事务日志总共需要2*(1+N)
次左右的TCP
通信。在RM
数量较少的业务场景下,分布式事务性能还能接收,但有些业务场景下RM
数量较多,此时事务内TCP
数量也会增多,分布式事务性能急剧下降。
在事务执行过程中,客户端和服务端进行通信的目的是为了存储事务日志。如果客户端在存储事务日志时,绕过服务端直接将事务日志写入数据库(如上图“同库模式”所示),那么一笔事务日志的存储链路就由原来的 2 次TCP
变成只需访问一次数据库便可,每条事务日志的存储减少了一次TCP
通信,整个分布式事务就减少了N+2
次TCP
请求,分布式事务的性能大幅提升。我们将客户端直接将事务日志存储至数据库的模式称为同库模式。
1.2 二阶段异步执行
通常情况下,分布式事务发起方会依次执行一阶段和二阶段方法,然后结束分布式事务,返回结果。如果让分布式事务发起方执行完一阶段之后马上结束并返回结果,二阶段交由独立的线程或者进程异步执行,这样分布式事务的二阶段会晚几秒钟或者若干分钟执行,但事务的最终结果不会有任何改变。
二阶段异步执行之后,分布式事务的最终结果不会有任何影响,但是事务发起方要执行的内容减少一半(一阶段和二阶段都执行变成只执行一阶段),直观的用户感受是分布式事务的性能提升了 50%。
2. 分布式事务高可用
为了保障金融系统的高可用,分布式事务服务必须达到 99.99% 的可用率。分布式事务使用了蚂蚁金服的三地五中心架构部署,在每个机房都独立部署分布式事务服务,分布式事务服务是无状态的,而底层数据库副本在各机房间也是双向同步,这样业务流量从一个机房切到另外一个机房,分布式事务服务不会对业务有任何影响,从而保证了分布式事务服务的高可用。