SpringCloud:分布式事务Seata实践优化

1.极致性能优化

1.1. 同库模式

通常,一个TM会产生一笔主事务日志,一个RM会产生一条分支事务日志,每个分布式事务由一个TM和若干 RM组成,一个分布式事务总共会有1+N条事务日志(NRM个数)。

在默认情况下,分布式事务执行过程中客户端将事务日志发送给服务端,服务端再将事务日志存储至数据库中,一条事务日志的存储链路会有 2 次TCP,分别是“客户端到服务端”和“服务端到数据库”, 我们称这种模式为异库模式。

在异库模式下,分布式事务存储事务日志总共需要2*(1+N)次左右的TCP通信。在RM数量较少的业务场景下,分布式事务性能还能接收,但有些业务场景下RM数量较多,此时事务内TCP数量也会增多,分布式事务性能急剧下降。

SpringCloud:分布式事务Seata实践优化_第1张图片

在事务执行过程中,客户端和服务端进行通信的目的是为了存储事务日志。如果客户端在存储事务日志时,绕过服务端直接将事务日志写入数据库(如上图“同库模式”所示),那么一笔事务日志的存储链路就由原来的 2 次TCP变成只需访问一次数据库便可,每条事务日志的存储减少了一次TCP通信,整个分布式事务就减少了N+2TCP请求,分布式事务的性能大幅提升。我们将客户端直接将事务日志存储至数据库的模式称为同库模式。

1.2 二阶段异步执行

通常情况下,分布式事务发起方会依次执行一阶段和二阶段方法,然后结束分布式事务,返回结果。如果让分布式事务发起方执行完一阶段之后马上结束并返回结果,二阶段交由独立的线程或者进程异步执行,这样分布式事务的二阶段会晚几秒钟或者若干分钟执行,但事务的最终结果不会有任何改变。

二阶段异步执行之后,分布式事务的最终结果不会有任何影响,但是事务发起方要执行的内容减少一半(一阶段和二阶段都执行变成只执行一阶段),直观的用户感受是分布式事务的性能提升了 50%。

SpringCloud:分布式事务Seata实践优化_第2张图片

2. 分布式事务高可用

为了保障金融系统的高可用,分布式事务服务必须达到 99.99% 的可用率。分布式事务使用了蚂蚁金服的三地五中心架构部署,在每个机房都独立部署分布式事务服务,分布式事务服务是无状态的,而底层数据库副本在各机房间也是双向同步,这样业务流量从一个机房切到另外一个机房,分布式事务服务不会对业务有任何影响,从而保证了分布式事务服务的高可用。

SpringCloud:分布式事务Seata实践优化_第3张图片

你可能感兴趣的:(SpringCloud,spring,cloud,分布式,java)