目录
1. 2PC 介绍
2. 2PC 协议流程
阶段一 PREPARE
阶段二 COMMIT / ROLLBACK
3. 2PC 手写
模块说明
源码介绍
2PC 模块
transaction-manager
resource-manager 模块
1. 2PC 介绍
2PC 协议(Two Phase Commit)是一个分布式事务协议。
2PC 为两阶段提交,分为两个阶段。两个角色。
1. PREPARE
2. COMMIT / ROLLBACK
2PC 有两个角色
1. Transaction Manger / TM 事务管理者
2. Resouce Manager / RM 资源管理者
2. 2PC 协议流程
阶段一 PREPARE
事务管理者 TM 向 所有资源节点 发送 PREPARE 请求
目的
1. 让所有 RM 节点先记录上 REDO 日志,下一阶段看情况才做真正提交
2. 询问所有节点是否都准备好了,此时的请求是轻量的,如果有的节点觉得自己情况不好(或者网络不好),直接返回 FAIL,取消此次事务。
RM 收到消息后 需要返回 ACK 告知 TM 自己是否准备好了
此时暴露出 2PC 缺点:需要等到全部 RM 节点都准备好了才能进入到下一个阶段,将所有节点都同步化了。
此时暴露出 2PC 缺点:TM 单点故障问题
RM 返回 ACK 存在三种情况
1. 所有 RM 返回 OK
既然所有节点都准备好了,那就可以进入下一阶段 COMMIT,执行提交操作
2. 存在节点返回 FAIL
代表有节点没准备好,进入下一阶段 ROLLBACK 执行回滚操作
3. 存在节点返回超时(TM 没有收到 ACK)
代表有节点出现问题,进入下一阶段 ROLLBACK 执行回滚操作
阶段二 COMMIT / ROLLBACK
COMMIT
可见,当只有全部节点都返回 OK 时,才会进入 COMMIT 阶段
TM 开始发送 COMMIT 请求,此时 2PC 协议完成
此时暴露出 2PC 缺点1:如果有的RM节点的 COMMIT 请求没有收到,将会导致与其他 RM 节点数据不一致。
此时暴露出 2PC 缺点2:RM 节点收到 COMMIT 请求后出现出现异常了,此时如何处理,2PC 没有规定。
ROLLBACK
开始对所有节点发送 ROLLBACK 请求
3. 2PC 手写
完整代码已上传到 GIT https://gitee.com/sixsixsix516/SUN-2PC
模块说明
- transaction-manager TM 事务管理者
- resource-manager RM 资源管理者
- 2PC 客户端 入口类
源码介绍
2PC 模块
1. ResourceManager 代表一个 RM 节点
2. TransactionManager 代表一个 TM 节点
TM 具有行为
- start 启动事务
- register 向 TM 上注册一个 RM 节点
这里都是发送一个 HTTP 请求给 transaction-manager 模块
主类
transaction-manager
ResourceManagerClient 代表一个 RM 客户端
这里的 HTTP 请求会发送给 resource-manager 模块
TransactionManager 事务管理者
prepare 方法是核心方法,可仔细观看
resource-manager 模块
ResourceManager
这里意思一下,哈哈哈
文章来源:https://www.toymoban.com/news/detail-405670.html
完整代码已上传到 GIT https://gitee.com/sixsixsix516/SUN-2PC文章来源地址https://www.toymoban.com/news/detail-405670.html
到了这里,关于手写 2PC 协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!