分布式事务对于两阶段提交的错误处理

一、背景

笔者和团队在昆仑分布式数据库中的两阶段提交方式,可以成功避免经典的两阶段提交算法的缺陷。

而在此分布式事务处理两阶段提交机制和原理上,笔者和团队增强其容灾能力和错误处理能力,可以做到任意时刻昆仑数据库集群的任意节点宕机或者网络故障、超时等都不会导致集群管理的数据发生不一致或者丢失等错误。

本文会详述分布式事务对于两阶段提交算法的错误处理原理和机制及延时损耗~

二、昆仑数据库如何对两阶段提交算法错误处理?

在生产环境的分布式数据库集群的工作场景中,通常只有不到0.01%的分布式事务提交会发生错误,但是我们仍然需要处理所有可能发生的错误。

因为哪怕执行了100亿笔事务,只要有1笔发生了提交错误,都会导致用户数据出错。

数据库系统就是要确保事务永远正确地提交,ACID保障始终成立,没有例外。

这对于分布式数据库系统来说,会比单机数据库更加复杂,因为可能的错误来源更多(多个计算节点和多个存储节点,及其之间的网络连接)。

这也是为什么数据库系统的设计和实现会如此复杂,而分布式数据库系统的设计和实现更加复杂

下面,我们就看一下昆仑分布式数据库集群如何处理分布式事务提交过程中发生的错误。我们分别讲述两阶段提交的每个阶段的错误处理,以及批量写入commit log的错误处理。

2.1 第一阶段错误处理

图片

图1. 第一阶段提交失败的处理

如果prepare阶段发生语句错误,网络断连或者超时,那么GTM会提交rollback记录请求给GTSS,并且不等待其返回结果就立刻发送rollback命令给出错的节点并且断连超时的连接,然后返回错误给客户端,告知客户端该事务GT被回滚。

GTSS会在commit log

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值