分布式事务处理两阶段提交机制和原理

本文介绍了昆仑数据库如何基于两阶段提交算法实现分布式事务处理,增强容灾和错误处理能力。计算节点、存储集群、元数据集群和cluster_mgr模块协同工作,确保数据一致性。文章详细阐述了两阶段提交的流程,包括第一阶段的提交策略和第二阶段的提交操作,以及如何处理元数据集群的性能瓶颈问题。
摘要由CSDN通过智能技术生成

一、背景

笔者在上篇文章中回顾了经典的两阶段提交算法原理及缺陷,有兴趣可点击查看原文《「技术讨论」经典的两阶段提交算法原理及缺陷》,此篇不做详述。

为避免经典的两阶段提交算法缺陷的发生,昆仑分布式数据库的分布式事务处理机制基于经典的两阶段提交算法,并在此基础上增强了其容灾能力和错误处理能力。

故此可以做到任意时刻昆仑数据库集群的任意节点宕机或者网络故障、超时等都不会导致集群管理的数据发生不一致或者丢失等错误。

二、昆仑数据库如何分布式事务处理两阶段提交?

昆仑数据库分布式事务处理功能涉及的模块分布在计算节点,存储集群和元数据集群和cluster_mgr模块中(如图1)

2.1 计算节点模块

计算节点包含全局事务管理器(Global Transaction Manager,GTM),它掌握着一个计算节点中正在运行的每一个客户端连接(即Session,会话)中正在执行的分布式事务GT的内部状态,关键信息包括事务GT读写了哪些存储集群(storage shard),以及全局事务ID等。

下图(如图1)中的GT1,GT2内部状态为:

  • GT1在存储集群1上执行的事务分支T11做了读写操作,在存储集群2上执行的事务分支T12做了写入操作。

  • GT2在存储集群1上执行的事务分支T21做了只读操作,在存储集群2上执行的事务分支T22做了写入操作。

计算节点的GTSS后台进程负责成组批量写入全局事务的commit log日志到元数据集群中。

昆仑数据库会确保每一个记录了Commit log的全局事务GT,都一定会完成提交。具体的两阶段提交流程见下文详述,本节先把相关模块介绍完。

2.2 元数据集群模块

元数据集群也是一个高可用的MySQL 集群,它的commit log记录着每一个两阶段提交的事务的提交决定。

这些提交决定是给cluster_mgr做错误处理使用的,实际生产系统场景下极少会真的用到,但是其信息非常关键。

只有当计算节点或者存储节点发生宕机、断电等故障和问题时,才会被cluster_mgr用来处理残留的prepared状态的事务分支。

2.3 存储集群模块

存储集群是一个MySQL在存储集群中,mysql的会话(THD)对象内部,包含分布式事务分支(简称XA事务)的状态:

  • 在下图(如图1)中存储节点1包含分布式事务GT1的事务分支GT1.T11和GT2的事务分支GT2.T21的本地执行状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值