核心金融场景分布式事务
分布式事务是分布式系统架构设计中的一个技术难点,特别是在这几年越来越火的微服务架构中,服务拆分所带来的跨服务数据一致性问题亟待解决,本文将围绕分布式事务产生背景和蚂蚁金服的分布式事务解决方案(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全面覆盖金融场景,金融级容灾保障、提供丰富的接入模式并且使用简洁易于接入;目前已经应用在支付宝、网上银行、蚂蚁财富、芝麻信用、南京银行等项目中。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
英特尔2018-2020年的处理器路线图
Intel官方表态2019年底10nm工艺都不会量产,这意味着2020年之前英特尔的处理器还都是14nm工艺,从服务器芯片到桌面芯片再到移动芯片、超低功耗芯片,14nm依然是英特尔的主打,10mm还要再等一年。工控主板 没有10nm工艺支撑,但是英特尔的处理器还是要继续更新,推特网友Dayman做了一份英特尔2018-2020年的处理器路线图,我们来看下英特尔的处理器未来一年半内都是如何升级进化的吧。 从高端到低端来看: ·首先是服务器市场的SP系列处理器,目前是Skylake-SP处理器,今年Q3季度之后是Cascade Lake-SP系列,明年Q3季度之后则是Copper Lake-SP,2020年Q3季度则会是10nm工艺的Icelake-SP处理器。 ·Core X系列中,现在的是Skylake-X、Kaby Lake-X,Q4季度之后有Cascade Lake-X,明年Q4之后则是Copper Lake-X,2020年Q4季度会有Icelake-X。 ·针对桌面的S系列中,现在的是Coffee Lake-S,按照之前的爆料8核还是coffee lake-s架构,但会变成9代酷...
- 下一篇
LoRaWAN技术在物联网应用领域的优势
在今年MWC上海展会期间,LoRa 联盟以及其联盟成员展示了基于LoRaWAN的设备和解决方案,并就在物联网LoRaWAN技术的实践做出了详细的介绍。LoRa联盟代表Kenny Pai先生在谈到LoRaWAN技术技术时表示,LoRaWAN具有这样几点优势。首先,长寿命。正如之前所说,物联网设备需要避免频繁更换电池,这就要求设备必须能够拥有很长的续航时间。而LoRaWAN在电池性能方面拥有非常优异的表现。以水表应用为例,LoRaWAN可以提供长达十年的使用寿命,基本满足了水表的应用场景。第二,长距离传输。过去的无线传输技术,很多都是短距离的传输,包括WiFi在内,传输距离从几米到几百米不等,但是对于今后的物联网设备来说,在某些应用下,频繁的布置设备节点会提高成本。而LoRaWAN技术能够支持几十公里的传输距离,而且架构非常简单,从一定程度上降低了布网的设备成本和使用成本。第三,灵活的网络构建。Kenny Pai先生表示,LoRaWAN不仅可以支持私人网络,还支持公共网络,这完全由使用者或运营商来决定。从目前的发展情况来看,LoRaWAN技术在多个垂直市场的应用越来越多,解决方案也越来越完...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果