事务在 Group Replication 中的处理流程

事务处理流程详解
事务在 Group Replication 中的处理流程:
-
事务发起阶段
- 事务在 node1 上发起
- COMMIT 之前的所有操作都不会和其它节点交互
- 多主模式下,Group Replication 使用的是乐观事务模型
-
提交阶段
- 客户端发起 COMMIT 操作
- 事务开始执行提交操作
-
Binlog 处理阶段
- 事务在生成 Binlog Cache 之后,写入 Binlog 之前,开始进入 Group Replication 的处理流程
-
消息传播阶段
- Group Replication 会打包事务的相关信息,并通过 GCS 发送
- GCS 是 Group Replication 的消息通信层,具体实现是 XCom
- XCom 是基于 Paxos 实现的组通信引擎
-
冲突检测阶段
- 当消息被大多数节点(包括自己)确认接受后,开始进行冲突检测
- 每个节点都维护了一个冲突检测数据库,各个节点的冲突检测都是独立进行的
-
冲突检测结果处理
- 如果没有通过冲突检测(冲突检测失败),则回滚事务
- 如果通过了冲突检测,则提交事务
-
事务提交执行
- 对于本地事务:直接写 Binlog 提交,然后反馈给客户端
- 对于远程事务 :将 Binlog Event 写入到 Relay Log 中,再由
group_replication_applier通道重放 Relay Log 中的事务
一致性说明
事务在传播阶段(基于 Paxos 协议)是强一致的,但在应用阶段(重放 Relay Log 中的事务)又是异步的,这也就是为什么说 MGR 是一个最终一致性的系统。