本文原文链接
45岁老架构 尼恩说在前面
在45岁老架构师 尼恩的读者交流群(100+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题:
- 10Wqps+高并发,如何实现分布式事务架构?
- 你们项目的分布式事务,是如何架构的?
最近有小伙伴面试美团、阿里,都问到了这个面试题。 小伙伴没有系统的去梳理和总结,所以支支吾吾的说了几句,面试官不满意,面试挂了。
所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。
当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V175版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取
分布式事务的背景
首先说说 分布式事务的背景。
传统单体架构下,所有的功能模块都在一个应用下,所有的代码和 业务逻辑 都在同一个应用下实现,所以保证数据的一致性就很简单,保证相关操作都在同一个本地事务下就可以了。
但是在微服务架构下,将一个应用拆分成了多个独立的服务,每个服务都能有自己的 数据库 ,服务间通信都是通过远程调用实现,实现一个功能可能需要由几个不同的服务来共同实现。
这就会带来一个问题,不同的服务之间无法做到使用同一个事务,这就无法保证数据的一致性了。
这就需要 分布式事务。
最直接、最简单、最粗暴的解决分布式事务的方式, 就是直接使用 Seata。
Seata 分布式事务方案
Seata 是一个 开源 的分布式事务解决方案,用于解决分布式系统中的数据一致性问题。
seata中,常用的有两种分布式事务实现方案,AT 及 TCC
- AT模式主要关注多 DB 访问的数据一致性,当然也包括多服务下的多 DB 数据访问一致性问题
- TCC 模式主要关注业务拆分,在按照业务横向扩展资源时,解决微服务间调用的一致性问题
AT模式(业务侵入小)
Seata AT模式是基于XA事务演进而来的一个分布式事务中间件,
XA是一个基于数据库实现的分布式事务协议,本质上和两阶段提交一样,需要数据库支持,Mysql5.6以上版本支持XA协议,其他数据库如Oracle,DB2也实现了XA接口
AT模式角色如下

1、Transaction Coordinator (TC):
事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
2、Transaction Manager ™:
控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议
3、Resource Manager (RM):
控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚
分支事务 基本处理逻辑如下

Branch就是指的分布式事务中每个独立的本地局部事务.
45岁资深老架构师尼恩提示:
以上Seata AT模式 内容,来自尼恩的《seata圣经》PDF, PDF可以找尼恩获取。
关于Seata AT模式的详细介绍,以及 TCC的案例, 请参见 《seata圣经》PDF
Seata TCC基本原理
AT模式的依赖的还是依赖单个服务或单个数据源自己的事务控制(分支事务),采用的是wal的思想,提交事务的时候同时记录undolog,如果全局事务成功,则删除undolog,如果失败,则使用undolog的数据回滚分支事务,最后删除undolog。
Seata TCC模式的流程图
TCC模式的特点是不再依赖于undolog,但是还是采用2阶段提交的方式:
第一阶段使用prepare尝试事务提交,第二阶段使用commit或者rollback让事务提交或者回滚。
引用网上一张TCC原理的参考图片

Seata TCC 事务的3个操作
TCC 将事务提交分为 Try - Confirm - Cancel 3个操作。
其和两阶段提交有点类似,Try为第一阶段,Confirm - Cancel为第二阶段,是一种应用层面侵入业务的两阶段提交。
| 操作方法 | 含义 |
|---|---|
| Try | 预留业务资源/数据效验 |
| Confirm | 确认执行业务操作,实际提交数据,不做任何业务检查,try成功,confirm必定成功,需保证幂等 |
| Cancel | 取消执行业务操作,实际回滚数据,需保证幂等 |
其核心在于将业务分为两个操作步骤完成。不依赖 RM 对分布式事务的支持,而是通过对业务逻辑的分解来实现分布式事务。
45岁资深老架构师尼恩提示:
以上Seata TCC 内容,来自尼恩的《seata圣经》PDF, PDF可以找尼恩获取。
关于 Seata TCC 的详细介绍,以及 TCC的案例, 请参见 《seata圣经》PDF
seata 压力测试的几个核心指标

以上内容,来自尼恩的《seata圣经》PDF, PDF可以找尼恩获取。
CP (强一致)和AP(高并发)的 根本冲突
从上面的指标数据可以知道, Seata AT/TCC是 强一致,并发能力弱。
CP (强一致)和AP(高并发)是一对 根本矛盾,存在根本冲突。

最低0.47元/天 解锁文章
1043

被折叠的 条评论
为什么被折叠?



