蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA...
Transcript of 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA...
蚂蚁金服分布式事务开源以及实践
绍 辉
蚂蚁金服 分布式事务开源负责人
1/31
一、分布式事务产生的背景
二、蚂蚁金服分布式事务理论基础
三、蚂蚁金服分布式事务实践之路
四、蚂蚁金服分布式事务开源
目 录contents
目录
2/31
一、分布式事务产生的背景
Part 1:背景
3/31
分库分表之后,写操作会跨多个数据库
Part 1:背景
蚂蚁金服架构演进之 数据库水平拆分
4/31
业务服务化拆分之后,原一个服务就能完成的业务操作需要跨多个服务
Part 1:背景
蚂蚁金服架构演进之 服务化拆分
5/31
以转账场景为例:
A B¥ 100
一次转账,跨多个服务和数据库
如何保证以下操作的原子性:
交易系统:创建交易订单
支付系统:记录支付明细
账务系统:A 扣钱
账务系统:B 加钱
交易系统 支付系统 账务系统
DB
① ②
③
④
DB DB(A)
转账服务
DB(B)
Part 1:背景
如何解决数据一致性问题?
6/31
二、蚂蚁金服分布式事务理论基础
Part 2:理论基础
7/31
两阶段提交协议
(Two Phase Commitment Protocol)
事务管理器分 2 阶段协调资源管理器:
一阶段:准备
二阶段:资源提交/回滚
Part 2:理论基础
2PC
8/31
TCC(Try-Confirm-Cancel)
是服务化的两阶段,三个操作均需编码实现
一阶段:Try
二阶段:Confirm/Cancel
三个操作描述:
Try: 检测预留资源
Confirm: 真正的业务操作提交
Cancel: 预留资源释放
start
tryconfirmcancel
TCC服务A
一阶段
二阶段try
confirmcancel
TCC服务B
事务管理器
①
②
③
④
Part 2:理论基础
TCC
9/31
三、蚂蚁金服分布式事务实践之路
Part 3:实践之路
10/31
2007
TCC
2009 双十一
极致性能提升
2013 LDC
高可用容灾
2014 金融云
对外输出
2015
FMT、XA
❖三种模式,丰富的应用场景:
TCC模式
FMT模式
XA模式
❖极致性能提升
❖高可用容灾
❖无侵入解决方案
蚂蚁金服分布式事务
Part 3:实践之路
11/31
❖事务管理器(发起方):
编排参与者
两阶段提交
❖资源管理器(参与者):
提供TCC服务
TCC 模式
Part 3:实践之路
start
tryconfirmcancel
参与者 A(TCC)
一阶段
二阶段try
confirmcancel
参与者 B(TCC)
发起方
①
②
③
④
事务日志
事务恢复服务
12/31
业务模型分 2 阶段设计
并发控制
允许空回滚
防悬挂控制
幂等控制
蚂蚁金服TCC实践,总结以下注意事项:
TCC 实践经验
Part 3:实践之路
13/31
扣钱场景为例:账户 A 上有 100 元,要扣除其中的 30 元
一阶段(Try):检查余额,预留其中 30 元;
二阶段提交(Confirm):扣除 30 元;
二阶段回滚(Cancel):释放预留的 30 元。
账户A:
0 30 100
冻结部分 可用余额
账户A:
0 70
可用余额
账户A:
0 30 100
可用余额
TCC 设计 - 业务模型分2 阶段设计
Part 3:实践之路
14/31
扣钱场景为例:账户 A 上有 100 元,事务 T1 要扣除其中的 30 元,事务 T2 也要扣除 30 元,出现并发
一阶段:检查余额,预留其中 30 元;
T1 二阶段提交:扣除 T1 冻结金额;
T1 二阶段回滚:释放 T1 预留的 30 元。
账户A:
账户A:
账户A:
TCC 设计 - 并发控制
0 30 100
T1冻结部分 可用余额T2冻结部分
60
0 30 70
可用余额T2冻结部分
0 30 100
可用余额
60
可用余额T2冻结部分可用余额
Part 3:实践之路
15/31
空回滚:Try未执行,Cancel执行了
出现原因:
Try 超时(丢包)
分布式事务回滚,触发 Cancel
未收到 Try,收到 Cancel
允许空回滚
TCC 设计 - 允许空回滚
Part 3:实践之路
16/31
悬挂:Cancel 比 Try 先执行
出现原因:
Try 超时(拥堵)
分布式事务回滚,触发 Cancel
拥堵的 Try 到达
要允许空回滚,但要拒绝空回滚后的Try 操作
TCC 设计 - 防悬挂控制
Part 3:实践之路
17/31
Try、Confirm、Cancel 3 个方法均需保证幂等性
TCC 设计 - 幂等控制
Part 3:实践之路
18/31
性能提升措施:
❖锁粒度优化:
相对于 XA 等数据库锁,TCC 锁粒度更小
TCC 有极大优化空间,性能更强
❖同库模式改造:
事务日志与业务数据在相同库存储
优化减少 N+2 次 RPC,性能提升 50%
❖二阶段异步执行:
一阶段同步执行,二阶段异步执行,事务耗时减少 50% 左右
极致性能提升 - 支持双十一性能需求
Part 3:实践之路
19/31
20 54
191
350
571
912
1207
1682
500 1500 380015300
38500
85900
120000
256000
2012 2013 201420112010 2016 2017
极致性能提升成果
双十一业务量指数级增长
Part 3:实践之路
20/31
FMT(Framework-managed transaction):
框架管理事务,托管事务的所有操作,一阶段和
二阶段操作均由框架自动生成
一阶段:用户SQL
二阶段:框架自动生成“提交/回滚”操作
Part 3:实践之路
无侵入解决方案 – FMT 模式
21/31
解析SQL语义
提取表元数据
保存undo log
执行业务SQL
保存redo log
保存行锁
拦截业务 SQL,生成 undo log、redo log 等中间数据
Part 3:实践之路
FMT 模式:一阶段
执行业务 SQL
保存新快照redo log
生成行锁保存原快照undo log
提取表元数据
解析SQL 语义
业务表Log 表
业务 DB 事务内
业务DB
业务SQL
提交业务 SQL、undo/redo log、行锁
Lock 表
22/31
Part 3:实践之路
FMT 模式一阶段:undo log/redo log/行锁
原快照数据undo log
执行业务SQL
新快照数据redo log
DB事务
保存行锁
select [所有列] from [表名称] where [where条件] for
update
[业务SQL]
select [所有列] from [表名称]
where [主键] in ([主键值1], [主键值2], ......, [主键值N])
[表名称]+[主键值]
dtx_log
dtx_lock
业务表1
业务表2
23/31
Part 3:实践之路
FMT 模式二阶段
二阶段提交:删除中间数据
删除 undo log
删除 redo log
删除行锁
DB事务
校验脏写 redo log
还原数据 undo logDB事务
删除中间数据
二阶段回滚:还原业务数据、删除中间数据
“redo log”vs ”数据库数据”
“undo log”-> “逆向 SQL”-> “数据还原”
删除 undo log、删除 redo log、删除行锁
dtx_log
dtx_lock
业务表1
业务表2
24/31
支持标准 XA 协议,覆盖面广
与自研数据库 OceanBase 深度定制,
解决 XA 性能问题
支持全局一致性读
Part 3:实践之路
无侵入解决方案 – XA 模式
start
一阶段
二阶段
发起方
①
②
③
④
事务日志
事务恢复服务
数据库
数据库
xa start、sql、xa end、xa prepare
xa commit /xa rollback
25/31
P0 P1协调者
commit prepare req
prepare ok
commit ok
commit req
commit ok
标准二阶段提交
P0 P1协调者
commit prepare req
prepare ok
commit ok
commit req
commit ok
clear req
clear ok
pre-commit ok
OB 二阶段提交
持久化日志
事务提交
与 OceanBase 深度定制,commit 性能优化:
Commit 异步化
提交释放锁
Part 3:实践之路
无侵入解决方案 – XA 模式
26/31
用户覆盖 支付、理财、保险、银行等各类金融场景
天津银行重庆农商南京银行网商银行
蚂蚁保险 天弘基金
兴业银行
信美相互 国泰产险
支付宝 芝麻信用余额宝 花呗
蚂蚁森林
借呗
Part 3:实践之路
蚂蚁分布式事务-金融场景全覆盖
27/31
四、蚂蚁分布式事务开源
Part 4:开源
28/31
FMT/AT
- 集成 MySQL
- 支持基本 SQL 语法
- 行锁实现
- 快照读
- 多隔离级别支持
TCC
- 支持跨服务
- 集成 Dubbo
- 集成 SOFARPC
- 防悬挂控制
- 幂等控制
XA
- MySQL XA
- Oracle XA
Part 4:开源
蚂蚁分布式事务开源版图
29/31
2014.11 2015.06 2015.12 2016.08 2018.05
TXC v1.0 (Taobao
Transaction Constructor)
阿里系业务分布式事务解决方
案,主要应用于集团电商、新
零售和物流等微服务化场景
TXC 专有云输出
树立了大量的企业、政府、金融
等行业的标杆用户
TXC v2.0
支持 MT( Manual Transaction )
模式,支持用户自定义补偿
GTS 商业化
阿里云商用版本正式对外提供商
用服务
GTS 公测
(Global Transaction Service)
阿里云服务对外公测
Alibaba Fescar
开源版本正式发布
2019.01
Part 4:开源
阿里巴巴分布式事务
30/31
v0.1(2019.1
)
v0.2(2019.2)
v0.3(2019.3
)
- Nacos 注册中心
- Redis 注册中心
- LoadBalance
- 支持 Spring Cloud
- 支持本地嵌套事务
AT 模式:
- 支持 MySQL
- 支持 Dubbo 无缝集成
- 支持 Spring 注解事务
- Eureka 注册中心
- Zookeeper 注册中心
- 支持 GlobalLock/本
地事务模式
NEXT
v0.4(2019.3
)
v0.5(2019.4
)
v1.0(2019.5
)
TCC 模式:
- Dubbo TCC
- SOFARPC TCC
- Local TCC
AT 模式:
- 数据库支持扩展:oracle、postgresql 等
- 复合主键支持
- 多事务隔离级别支持
- 行锁优化:锁粒度细化、乐观锁
服务端 HA 集群支
持:
- 数据库存储
- Raft 模式
- 数据路由+Leader
TCC
• 防悬挂控制
• 幂等控制
XA
• MySQL XA
• Oracle XA
多语言支持
监控、诊断
web console
容器化及资源调度
Part 4:开源
阿里巴巴 + 蚂蚁金服 社区共建
31/总页数