核心金融场景分布式事务

简介:

分布式事务是分布式系统架构设计中的一个技术难点,特别是在这几年越来越火的微服务架构中,服务拆分所带来的跨服务数据一致性问题亟待解决,本文将围绕分布式事务产生背景和蚂蚁金服的分布式事务解决方案(SOFA-DTX)向大家进行介绍。

1、分布式事务产生的背景

1.1、数据库的水平拆分

通常业务系统的数据库起初是单库,但随着业务数据规模的膨胀,单库存储受容量和性能限制,逐渐无法满足业务需求。

如下图所示,将业务数据库水平拆分成多个数据库,是业务发展的必然趋势。

100205307bfc106b2b2c01d45f0552fa88aad6bc

数据库拆分之后,写操作一旦跨多个数据库,单数据库事务就无法保证数据一致性,需要通过分布式事务来保障跨数据库操作的数据一致性。

1.2、业务服务化拆分

在业务发展初期,“大饼一沱”的单业务系统架构,能满足基本的业务需求;但是随着业务的快速发展,系统的访问量和业务复杂程度都在快速增长,单系统架构逐渐成为业务发展瓶颈,解决业务系统的高耦合、可伸缩问题的需求越来越强烈。

如下图所示,按照面向服务(SOA)的架构的设计原则,将单业务系统拆分成多个业务系统,能降低各系统之间的耦合度,使不同的业务系统专注于自身业务,更有利于业务的发展和系统容量的伸缩。

b1c3a4c53e8ecdc5a4908fbd70375f5086b33adc

业务系统按照服务拆分之后,一个完整的业务往往需要调用多个服务,如何保证多个服务间的数据一致性成为一个难题,需要通过分布式事务来保障多个服务的数据一致性。

2、蚂蚁金服的分布式事务解决方案

蚂蚁金服的分布式事务解决方案(SOFA-DTX), 是蚂蚁金服自主研发的分布式事务中间件,用来保障在大规模分布式环境下业务活动的最终一致性。

2.1、DTX整体架构

DTX以BASE理论的最终一致性为基础,以两阶段提交(2PC)为基本执行框架,整体架构上分为3个部分:客户端、资源管理器、事务管理器:

  • 客户端

通过事务管理器开启、结束分布式事务,通过资源管理器编排分布式事务活动。

  • 资源管理器

负责具体资源的准备、提交和回滚操作,并在整个执行过程中记录事务日志,向事务管理器汇报事务日志和资源执行状态。

  • 事务协调器

负责协调分布式事务的执行:开启分布式事务、记录资源管理器提交的事务日志和资源状态、决定分布式事务最终是提交还是回滚。


DTX按照阶两段提交的方式执行分布式事务,在第一阶段,客户端首先通知事务管理器开启分布式事务;分布式事务开启之后,客户端在分布式事务内编排事务内的资源,依次执行各个资源的一阶段准备操作,每一个资源的准备操作执行情况资源管理器都会向事务管理器汇报;资源编排结束之后,客户端会通知事务管理器分布式事务一阶段结束:

0ee9220d73fadf0c29179c41ee8b28cb06a546e8

在第二阶段,事务管理器会根据事务所有资源的一阶段执行情况,决定整个分布式事务最终是提交还是回滚,进而驱动所有资源二阶段的提交/回滚操作:

dfb656f764dfcb7e8f301d2a16dac7b74a27f196


根据资源管理器类型的不同,DTX分为TCC模式、FMT模式和XA模式;

2.2、TCC模式

DTX的TCC(Try-Confirm-Cancel)模式下,分布式事务的资源是TCC服务,TCC服务需要用户编码实现。

5de7eea14517fab3cbaab7dcf46f170c208842cf

如上图所示,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生成二阶段的提交和回滚操作。

7dfe5d0e83511025d7f6a6f14dd82f982e1540fd

FMT模式下,用户只需关注自身的业务SQL,DTX对业务逻辑的实现无任何侵入,用户接入更加方便快捷。

2.4、XA模式

DTX的TCC模式和FMT模式,基本解决了分布式事务的最终一致性问题,但是不能很好的支持实时一致性;为了解决分布式事务的实时一致性问题,DTX基于标准XA协议推出XA模式。

XA模式下,事务管理器通过数据库的标准XA接口,分两阶段协调所有的数据库资源,在一阶段调用所有XA事务的xa_prepare接口,在第二阶段执行所有XA事务的xa_commit/xa_rollback,最终完成分布式事务的执行。

f3bd42df9a287fa282ccb8d72e7969f20035357a

XA模式借助数据库的XA协议协调数据库资源,借助数据库的MVCC特性达到一致性读写,实现了一致性读写的分布式解决方案。

3、总结

SOFA-DTX在10年的发展历程中,伴随着支付宝业务的飞速发展、架构的快速演进和业务量的井喷式增长,不断帮用户解决复杂场景的一致性问题,提供了高性能、高可用性的分布式事务解决方案;DTX自身演进的三种模式:TCC、FMT和XA相互之间也是功能互补,相辅相成,形成了蚂蚁金服完善的分布式事务解决方案。

分布式事务SOFA-DTX全面覆盖金融场景,金融级容灾保障、提供丰富的接入模式并且使用简洁易于接入;目前已经应用在支付宝、网上银行、蚂蚁财富、芝麻信用、南京银行等项目中。

目录
相关文章
|
8天前
|
调度 数据库
什么场景下要使用分布式锁
分布式锁用于确保多节点环境下的资源互斥访问、避免重复操作、控制并发流量、防止竞态条件及任务调度协调,常见于防止超卖等问题。
21 4
|
12天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
28 8
|
2月前
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
56 1
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
71 4
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
中国金融分布式数据库,阿里云双料冠军!
中国金融分布式数据库,阿里云双料冠军!
81 7
|
5月前
|
Cloud Native 关系型数据库 分布式数据库
中国金融分布式数据库,双料冠军!
中国金融分布式数据库同比增长12.1%,阿里云绝对优势夺得公有云市场冠军
|
5月前
|
运维 监控 Java
在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。
【7月更文挑战第1天】在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。本文讲解如何在Java中集成Elasticsearch,包括安装配置、使用RestHighLevelClient连接、创建索引和文档操作,以及全文检索查询。此外,还涉及高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据。
77 0
|
7月前
|
存储 Cloud Native 关系型数据库
PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
【5月更文挑战第14天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
314 2
|
7月前
|
存储 测试技术 C++
P2P网络下分布式文件共享场景的测试
P2P网络下分布式文件共享场景的测试
296 6
|
7月前
|
SQL 存储 分布式计算
一文讲解分布式场景怎么Join
发现System R中对于Join操作的定义一般分为了两种,即嵌套循环、排序-合并联接。在原文中,更倾向使用排序-合并联接逻辑。
88 4