首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这不是一篇技术文章

这篇文章的起因是因为Cetus,都怪Cetus太流畅了,XA事务也玩的风生水起(以下内容均指两阶段提交In MySQL,详见下文小百科),但无奈XA不给力,自己容易出问题,那怎么办呢?这岂不是阻止了大哥Cetus前进的脚步么!为了不太拖后腿,我们开始对XA动刀了。

刀来了

XA诊断工具,助你延年益寿,消除百病

我们来看看为什么具有这么神奇的功效。众所周知,XA很少只发生在一个节点,因为不需要(如果你非要这么做,别人也阻止不了你),这就会涉及到多个节点的事务一致性问题,所谓事务一致性就是要么事务在所有节点都提交或者都回滚,但节点保不住会有crash的情况发生,此时XA悬挂事务就出现了,或者是已经Prepare了,但没有下文了,后续又需要执行Update修改这些记录,最后发现,锁超时失败了......此时如果你熟悉你的系统,就该有下边的流程,执行 XA Recover后,发现满屏的输出,当时心里还会默念无数遍“这个xx”,XA诊断工具此时此刻你还不出场,等死啊...... 别急,大哥,我来了!!

XA诊断工具

XA诊断工具可以帮助你迅速准确的处理这种问题,让你感到前所未有的顺畅,其实原理很简单,相信看到后边的内容,你也可以自己写一个出来。

原理

简述:连接每一个后端节点(MySQL),寻找XA事务列表,一一记录,并计算出合集(Union ALL),根据Timeout参数,来确定哪些已经悬挂,然后再依次查找所有后端,确定最终状态,并处理不一致的节点,达到一致状态。有兴趣的同学可以自行查看源码,也就几百行,不再赘述。

场景1

如果XA涉及4个后端backend1/backend2/backend3/backend4,其中backend1因某种原因crash了,而另三个已经成功commit,在backend1启动后会出现悬挂事务,经XA诊断一号脉,有了,于是就帮助它commit了。

场景2

如果XA涉及4个后端backend1/backend2/backend3/backend4,其中所有后端的XA都在那眼巴巴的干等着(Prepare状态),但后续一直没给通知,到底是死啊还是活啊,于是一等几年过去了......,经XA诊断一确诊,你们别等了,死心吧,于是制止了这场灾难。

其实大家看过后,也就明白了,这就是一个辅助工具,就是帮助DBA快速处理线上悬挂的XA事务,随着MySQL官网的发布,功能越来越强大,Bug也会越来越少,但线上环境可是不等人的,如果大家在实际中用到了XA事务,建议考虑一下该工具。

效果

实际执行后的效果如下

参考文档

这个工具到底能做什么,聪明的小伙伴早已经知道了

如果找不到,不要紧,请见下图,目前这上边是第一版,使用更简易的第二版会很快同步上来。

小百科

两阶段提交 In MySQL

上图两阶段提交是指,事务先经过PREPARE阶段,也称为第一阶段,数据库收到请求后执行数据修改等等一系列处理,涉及到的节点确认事务都可以正常执行,返回响应信息,如果在该阶段内有任何一个数据库的操作发生了错误,或者事务管理器收不到某个数据库的回应,则认为事务失败,回撤所有数据库的事务。当事务管理收到一致通过的表决后,进入COMMIT阶段,此阶段也称为第二阶段,通知所有节点,可以提交事务了。如果提交的时刻有的节点成功,有的节点失败,就会发生数据不一致。这个时候就需要查看所有节点此事务的最终状态,从而达到事务一致性。

--------------------------------------------------------------------------------------------------------

网易mysql中间件Cetus开源了,想你之所想。

github地址:https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md

快来加stars星星

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712G1H1YZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券