蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA...

32
蚂蚁金服分布式事务开源以及实践 绍辉 蚂蚁金服 分布式事务开源负责人

Transcript of 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA...

Page 1: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

蚂蚁金服分布式事务开源以及实践

绍 辉

蚂蚁金服 分布式事务开源负责人

Page 2: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

1/31

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

二、蚂蚁金服分布式事务理论基础

三、蚂蚁金服分布式事务实践之路

四、蚂蚁金服分布式事务开源

目 录contents

目录

Page 3: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

2/31

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

Part 1:背景

Page 4: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

3/31

分库分表之后,写操作会跨多个数据库

Part 1:背景

蚂蚁金服架构演进之 数据库水平拆分

Page 5: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

4/31

业务服务化拆分之后,原一个服务就能完成的业务操作需要跨多个服务

Part 1:背景

蚂蚁金服架构演进之 服务化拆分

Page 6: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

5/31

以转账场景为例:

A B¥ 100

一次转账,跨多个服务和数据库

如何保证以下操作的原子性:

交易系统:创建交易订单

支付系统:记录支付明细

账务系统:A 扣钱

账务系统:B 加钱

交易系统 支付系统 账务系统

DB

① ②

DB DB(A)

转账服务

DB(B)

Part 1:背景

如何解决数据一致性问题?

Page 7: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

6/31

二、蚂蚁金服分布式事务理论基础

Part 2:理论基础

Page 8: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

7/31

两阶段提交协议

(Two Phase Commitment Protocol)

事务管理器分 2 阶段协调资源管理器:

一阶段:准备

二阶段:资源提交/回滚

Part 2:理论基础

2PC

Page 9: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

8/31

TCC(Try-Confirm-Cancel)

是服务化的两阶段,三个操作均需编码实现

一阶段:Try

二阶段:Confirm/Cancel

三个操作描述:

Try: 检测预留资源

Confirm: 真正的业务操作提交

Cancel: 预留资源释放

start

tryconfirmcancel

TCC服务A

一阶段

二阶段try

confirmcancel

TCC服务B

事务管理器

Part 2:理论基础

TCC

Page 10: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

9/31

三、蚂蚁金服分布式事务实践之路

Part 3:实践之路

Page 11: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

10/31

2007

TCC

2009 双十一

极致性能提升

2013 LDC

高可用容灾

2014 金融云

对外输出

2015

FMT、XA

❖三种模式,丰富的应用场景:

TCC模式

FMT模式

XA模式

❖极致性能提升

❖高可用容灾

❖无侵入解决方案

蚂蚁金服分布式事务

Part 3:实践之路

Page 12: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

11/31

❖事务管理器(发起方):

编排参与者

两阶段提交

❖资源管理器(参与者):

提供TCC服务

TCC 模式

Part 3:实践之路

start

tryconfirmcancel

参与者 A(TCC)

一阶段

二阶段try

confirmcancel

参与者 B(TCC)

发起方

事务日志

事务恢复服务

Page 13: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

12/31

业务模型分 2 阶段设计

并发控制

允许空回滚

防悬挂控制

幂等控制

蚂蚁金服TCC实践,总结以下注意事项:

TCC 实践经验

Part 3:实践之路

Page 14: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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:实践之路

Page 15: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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:实践之路

Page 16: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

15/31

空回滚:Try未执行,Cancel执行了

出现原因:

Try 超时(丢包)

分布式事务回滚,触发 Cancel

未收到 Try,收到 Cancel

允许空回滚

TCC 设计 - 允许空回滚

Part 3:实践之路

Page 17: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

16/31

悬挂:Cancel 比 Try 先执行

出现原因:

Try 超时(拥堵)

分布式事务回滚,触发 Cancel

拥堵的 Try 到达

要允许空回滚,但要拒绝空回滚后的Try 操作

TCC 设计 - 防悬挂控制

Part 3:实践之路

Page 18: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

17/31

Try、Confirm、Cancel 3 个方法均需保证幂等性

TCC 设计 - 幂等控制

Part 3:实践之路

Page 19: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

18/31

性能提升措施:

❖锁粒度优化:

相对于 XA 等数据库锁,TCC 锁粒度更小

TCC 有极大优化空间,性能更强

❖同库模式改造:

事务日志与业务数据在相同库存储

优化减少 N+2 次 RPC,性能提升 50%

❖二阶段异步执行:

一阶段同步执行,二阶段异步执行,事务耗时减少 50% 左右

极致性能提升 - 支持双十一性能需求

Part 3:实践之路

Page 20: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

19/31

20 54

191

350

571

912

1207

1682

500 1500 380015300

38500

85900

120000

256000

2012 2013 201420112010 2016 2017

极致性能提升成果

双十一业务量指数级增长

Part 3:实践之路

Page 21: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

20/31

FMT(Framework-managed transaction):

框架管理事务,托管事务的所有操作,一阶段和

二阶段操作均由框架自动生成

一阶段:用户SQL

二阶段:框架自动生成“提交/回滚”操作

Part 3:实践之路

无侵入解决方案 – FMT 模式

Page 22: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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 表

Page 23: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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

Page 24: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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

Page 25: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

24/31

支持标准 XA 协议,覆盖面广

与自研数据库 OceanBase 深度定制,

解决 XA 性能问题

支持全局一致性读

Part 3:实践之路

无侵入解决方案 – XA 模式

start

一阶段

二阶段

发起方

事务日志

事务恢复服务

数据库

数据库

xa start、sql、xa end、xa prepare

xa commit /xa rollback

Page 26: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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 模式

Page 27: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

26/31

用户覆盖 支付、理财、保险、银行等各类金融场景

天津银行重庆农商南京银行网商银行

蚂蚁保险 天弘基金

兴业银行

信美相互 国泰产险

支付宝 芝麻信用余额宝 花呗

蚂蚁森林

借呗

Part 3:实践之路

蚂蚁分布式事务-金融场景全覆盖

Page 28: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

27/31

四、蚂蚁分布式事务开源

Part 4:开源

Page 29: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

28/31

FMT/AT

- 集成 MySQL

- 支持基本 SQL 语法

- 行锁实现

- 快照读

- 多隔离级别支持

TCC

- 支持跨服务

- 集成 Dubbo

- 集成 SOFARPC

- 防悬挂控制

- 幂等控制

XA

- MySQL XA

- Oracle XA

Part 4:开源

蚂蚁分布式事务开源版图

Page 30: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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:开源

阿里巴巴分布式事务

Page 31: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

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:开源

阿里巴巴 + 蚂蚁金服 社区共建

Page 32: 蚂蚁金服分布式事务开源以及实践 · 2019-04-09 · 支持标准XA 协议,覆盖面广 与自研数据库OceanBase 深度定制, 解决XA 性能问题 支持全局一致性读

31/总页数