MySQL数据库中间件如何实现分布式事务
假设我有两个MySQL数据库节点,在这两个节点前面有一个数据库中间件,应用通过数据库中间件来使用后面的两个MySQL节点, 结构如下图所示:
当应用通过中间件执行一个事务时,这个事务需要由中间件转发给两个MySQL节点,于是在中间件这一层,原本普通的事务现在升级成了跨越两个MySQL节点的分布式事务。
对于应用程序来说,应用程序希望这个事务要么都被两个MySQL节点执行成功,要么都不成功。
当应用程序begin了事务,执行一系列SQL语句后,应用程序进行commit
,此时数据库中间件会分别向两个MySQL节点发送commit命令,假设两个MySQL节点都接收到了commit命令,并成功提交,那么事务执行成功。
如果其中一个节点commit成功,而另外一个节点由于一些原因无法执行commit(可能网络断开,或者MySQL数据库出现错误),又由于已经commit的事务无法rollback,所以此时两个MySQL节点就出现了数据不一致的情况。
我的问题是:目前是否有上述问题的解决方法或解决思路,先谢谢了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
xa
事务资源预分配
业务原子操作
数据库中间件会做两阶段提交解决这个问题