分布式事务是分布式系统架构设计中的一个技术难点,特别是在这几年越来越火的微服务架构中,服务拆分所带来的跨服务数据一致性问题亟待解决,本文将围绕分布式事务产生背景和蚂蚁金服的分布式事务解决方案(SOFA-DTX)向大家进行介绍。
1、分布式事务产生的背景
1.1、数据库的水平拆分
通常业务系统的数据库起初是单库,但随着业务数据规模的膨胀,单库存储受容量和性能限制,逐渐无法满足业务需求。
如下图所示,将业务数据库水平拆分成多个数据库,是业务发展的必然趋势。
数据库拆分之后,写操作一旦跨多个数据库,单数据库事务就无法保证数据一致性,需要通过分布式事务来保障跨数据库操作的数据一致性。
1.2、业务服务化拆分
在业务发展初期,“大饼一沱”的单业务系统架构,能满足基本的业务需求;但是随着业务的快速发展,系统的访问量和业务复杂程度都在快速增长,单系统架构逐渐成为业务发展瓶颈,解决业务系统的高耦合、可伸缩问题的需求越来越强烈。
如下图所示,按照面向服务(SOA)的架构的设计原则,将单业务系统拆分成多个业务系统,能降低各系统之间的耦合度,使不同的业务系统专注于自身业务,更有利于业务的发展和系统容量的伸缩。
业务系统按照服务拆分之后,一个完整的业务往往需要调用多个服务,如何保证多个服务间的数据一致性成为一个难题,需要通过分布式事务来保障多个服务的数据一致性。
2、蚂蚁金服的分布式事务解决方案
蚂蚁金服的分布式事务解决方案(SOFA-DTX), 是蚂蚁金服自主研发的分布式事务中间件,用来保障在大规模分布式环境下业务活动的最终一致性。
2.1、DTX整体架构
DTX以BASE理论的最终一致性为基础,以两阶段提交(2PC)为基本执行框架,整体架构上分为3个部分:客户端、资源管理器、事务管理器:
- 客户端
通过事务管理器开启、结束分布式事务,通过资源管理器编排分布式事务活动。
- 资源管理器
负责具体资源的准备、提交和回滚操作,并在整个执行过程中记录事务日志,向事务管理器汇报事务日志和资源执行状态。
- 事务协调器
负责协调分布式事务的执行:开启分布式事务、记录资源管理器提交的事务日志和资源状态、决定分布式事务最终是提交还是回滚。
DTX按照阶两段提交的方式执行分布式事务,在第一阶段,客户端首先通知事务管理器开启分布式事务;分布式事务开启之后,客户端在分布式事务内编排事务内的资源,依次执行各个资源的一阶段准备操作,每一个资源的准备操作执行情况资源管理器都会向事务管理器汇报;资源编排结束之后,客户端会通知事务管理器分布式事务一阶段结束:
在第二阶段,事务管理器会根据事务所有资源的一阶段执行情况,决定整个分布式事务最终是提交还是回滚,进而驱动所有资源二阶段的提交/回滚操作:
根据资源管理器类型的不同,DTX分为TCC模式、FMT模式和XA模式;
2.2、TCC模式
DTX的TCC(Try-Confirm-Cancel)模式下,分布式事务的资源是TCC服务,TCC服务需要用户编码实现。
如上图所示,DTX事务管理器分两阶段协调所有TCC资源,在一阶段调用所有TCC服务的prepare方法,如果所有资源均prepare成功,那么在第二阶段事务管理器会调用所有TCC资源的commit方法;如果在第一阶段任一资源prepare失败,那么在第二阶段事务管理器会调用所有资源的rollback方法;最终所有TCC资源要么全部提交,要么全部回滚。
蚂蚁金服大部分业务系统的分布式事务方案均采用TCC模式,由业务层实现两阶段的TCC服务,以确保业务数据一致性和性能达到最佳平衡;
2.3、FMT模式
TCC服务的实现及其约束条件都需要业务方提供,这无疑增加了DTX的接入门槛,所以我们在TCC模式之后继续往前推进发展,提出了FMT(Framework-managed transactions)模式来解决接入便捷性的问题。
如下图所示,FMT模式与TCC模式相同的是事务协调者也是分两阶段协调FMT资源,不同的是FMT的资源管理器;在FMT资源管理器中,用户的业务SQL作为资源的一阶段,DTX框架会自动为该业务SQL生成二阶段的提交和回滚操作。
FMT模式下,用户只需关注自身的业务SQL,DTX对业务逻辑的实现无任何侵入,用户接入更加方便快捷。
2.4、XA模式
DTX的TCC模式和FMT模式,基本解决了分布式事务的最终一致性问题,但是不能很好的支持实时一致性;为了解决分布式事务的实时一致性问题,DTX基于标准XA协议推出XA模式。
XA模式下,事务管理器通过数据库的标准XA接口,分两阶段协调所有的数据库资源,在一阶段调用所有XA事务的xa_prepare接口,在第二阶段执行所有XA事务的xa_commit/xa_rollback,最终完成分布式事务的执行。
XA模式借助数据库的XA协议协调数据库资源,借助数据库的MVCC特性达到一致性读写,实现了一致性读写的分布式解决方案。
3、总结
SOFA-DTX在10年的发展历程中,伴随着支付宝业务的飞速发展、架构的快速演进和业务量的井喷式增长,不断帮用户解决复杂场景的一致性问题,提供了高性能、高可用性的分布式事务解决方案;DTX自身演进的三种模式:TCC、FMT和XA相互之间也是功能互补,相辅相成,形成了蚂蚁金服完善的分布式事务解决方案。
分布式事务SOFA-DTX全面覆盖金融场景,金融级容灾保障、提供丰富的接入模式并且使用简洁易于接入;目前已经应用在支付宝、网上银行、蚂蚁财富、芝麻信用、南京银行等项目中。