美文网首页
避免使用数据库XA事务

避免使用数据库XA事务

作者: 邓启翔 | 来源:发表于2017-12-19 18:53 被阅读0次

    去年在开发国信统一用户系统使用到分布式数据库事务组件atomikos,系统有一天突然假死,查了好久才找到是XA事务导致的问题,现在总结下:

    1、什么是XA事务

    XA事务是基于二阶段提交(Two-phase Commit)实现的。

    下面两个图片来自:http://www.infoq.com/cn/articles/xa-transactions-handle

    提交

    出错回滚

    2、XA事务问题

    XA事务的明显问题是timeout问题,比如当一个RM(资源管理器)出问题了(例如数据库正好在做备份,这样数据库就会很慢),那么整个事务只能处于等待状态。这样可以会连锁反应,导致整个系统都很慢,最终不可用(连接耗尽)。

    3、如何避免XA事务

    通常做法是使用最终一致性去解决。

    举个网上的例子:

    用户充值500元

    1、带上用户帐号在数据库里的版本,在更新时比较数据的版本,如果相同则加上500;

    2、比如用户本来有500元,那么消息是更新用户的钱数为1000,而不是加上500;

    当然最好的办法就是使用RocketMQ 事务消息来解决分布式事务,但悲剧的是RocketMQ 开源版本不提供此功能,需要自行开发。

    相关文章

      网友评论

          本文标题:避免使用数据库XA事务

          本文链接:https://www.haomeiwen.com/subject/xytiwxtx.html