首页 > 数据库 > 国内数据库 > 经典的两阶段提交算法原理及缺陷
背景
笔者在过去经典的两阶段提交算法过程中,发现会遇上部分节点在执行事务提交期间发生故障,导致如下的错误,这些错误都会导致用户数据丢失或者出错。错误如下:
1、 一个分布式事务的一部分事务分支被提交,另一部分事务分支被回滚
2、 应答给客户端事务提交成功,但是分布式事务所有分支全部被回滚
3、 应答给客户端事务被回滚,但是分布式事务部分或者全部分支被提交
4、 存储节点故障恢复时,某个存储节点的事务分支不能被正确地恢复。
在上面这些错误源中,第 #4 类错误处理由存储节点自身负责,分布式事务处理机制负责处理前 3 类错误,笔者会在下篇文章做主要讨论。
对于第 #4 类错误,笔者曾经在 FOSDEM 2021 做过一次技术分享, ,国内视频连接在: 昆仑分布式数据库 MySQL XA 事务处理的容灾技术 ( )以后也会陆续撰文详述。
经典的两阶段提交算法原理
经典的两阶段提交算法缺陷
如何优化避免其缺陷?
包含若干个存储集群存储用户数据分片,每个存储集群使用高可用机制确保节点宕机数据不丢失。
一个结构与存储集群完全相同的元数据集群,它存储着这个集群的关键元数据信息,包括本文所说的 commit log 。
一个 cluster_mgr 模块 , 负责维护集群运行状态,并且处理因为节点故障而残留的 prepared 状态的事务分支。
总结
推荐阅读
KunlunBase架构介绍
KunlunBase技术优势介绍
KunlunBase技术特点介绍
PostgreSQL vs MySQL TPC-H 测试
Kunlun-Storage vs PostgreSQL OLTP 测试
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70011764/viewspace-2852619/ ,如需转载,请注明出处,否则将追究法律责任。