当前位置:网站首页>支付宝DTS架构
支付宝DTS架构
2022-07-23 05:37:00 【王者之路001】
最近,在忙着做一个任务,很奇怪发现后台的业务,付款和销账并不是在一个同一个事务里。
按照我的理论,付款和销账这些属于数据库的业务,显然应该是在一个事务里,才能保证数据的一致性。
与后台的负责人交流以后,告诉我付款和销账确实是两个过程。作为软件厂商,自己只能负责自己的事务一致性,但不能保证别的厂商提供的软件服务的一致性。
这番陈述,似乎说服了我,但貌似并不是最好的解决方案。
理论上,以上事务属于分布式事务。分布式事务,一般采用两阶段(2PC);即第一段提交完成,再进行第二段提交。但这种方式,会造成所有阶段的都处在阻塞阶段,造成整个计算机出问题。
后来发现支付宝有分布式事务机制,值得学习。
分布式事务服务(Distributed Transaction Service,简称 DTS)是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 xts-client 和 xts-server 两部分,前者是一个嵌入客户端应用的 Jar 包,主要负责事务数据的写入和处理;后者是一个独立的系统,主要负责异常事务的恢复。
也就是说,DTS的特征为:
1)最终一致:在事务处理过程中,会有短暂不一致,但通过恢复系统,达到最终一致。
2)协议简单:定义了类似2PC的标准两阶段接口,可使用DTS事务功能。
3)与RPC服务协议无关:把DB操作定义为service,与底层协议无关。
4)与底层事务实现无关: DTS 是一个抽象的基于 Service 层的概念,与底层事务实现无关,也就是说在 DTS 的范围内,无论是关系型数据库 MySQL,Oracle,还是 KV 存储 MemCache,或者列存数据库 HBase,只要将对其的操作包装成 DTS 的参与者,就可以接入到 DTS 事务范围内。
确切讲,DTS是一种柔性事务,即追求最后的一致性。
边栏推荐
- 构建人工智能产品/业务的两种策略(by Andrew Ng)
- 【社媒营销】出海新思路:Whatsapp Business替代Facebook
- Three implementation methods of C # client program calling external program
- 比特,位,字节,字的概念与区别
- 动态内存管理
- 【信息系统项目管理师】第六章 复盘进度管理知识架构
- [swift bug] Xcode prompt error running playground: failed to prepare for communication with playground
- 村田muRata电源维修交换机服务器电源维修及主要功能特点
- 【ROS进阶篇】第八讲 URDF文件的语法详解
- LearnOpenGL - Introduction
猜你喜欢

动态内存管理

pyqt5使用QPainter绘制坐标轴并显示散点图

Cadence (IX) 17.4 rules and spacing settings

C1 -- vivado configuration vs code text editor environment 2022-07-21

C语言n番战--链表(九)

Cadence learning path (VIII) PCB placement components

Pytorch (V) -- pytorch advanced training skills

Redis source code and design analysis -- 11. Hash object

The 12th Blue Bridge Cup embedded design and development project

Huawei executives talk about the 35 year old crisis. How can programmers overcome the worry of age?
随机推荐
Redis source code and design analysis -- 12. Collection objects
“我最想要的六种编程语言!”
华为高层谈 35 岁危机,程序员如何破年龄之忧?
Cadence学习之路(八)PCB放置元器件
Cadence(九)17.4规则与间距设置
C语言n番战--共用体和枚举(八)
Alibaba cloud object storage service OSS front and rear joint debugging
UNITY VFX syntax error: unexpected token ‘#‘ at kernel CSMain
IO should know and should know
Error in na.fail. default(list(Purchase = c(“CH“, “CH“, “CH“, “MM“, “CH“, : missing values in obj
Error in na.fail.default(list(Purchase = c(“CH“, “CH“, “CH“, “MM“, “CH“, : missing values in obj
单点登录-认证服务器与客户端的session过期时间如何统一
[information system project manager] Chapter VI recheck schedule management knowledge structure
C语言n番战--结构体(七)
A case study on the collaborative management of medical enterprise suppliers, hospitals, patients and other parties by building a low code platform
Redis source code and design analysis -- 11. Hash object
web调用接口上传图片到七牛云
Murata power maintenance switch server power maintenance and main functional features
adb常用命令
Redis source code and design analysis -- 9. String object