36|分布式事务:如何理解两阶段提交?
黄清昊
该思维导图由 AI 生成,仅供参考
你好,我是微扰君。
今天我们来聊一个经典问题“分布式事务”,以及它的常见解决方案“两阶段提交”。
在单体应用中,通常用来保证事务特性的主要手段就是引入日志,比如 MySQL 中的 redo log 就是这样一种通过日志保证数据完整性的机制。
但是随着互联网不断发展,我们的应用规模也在稳固提升,单机服务已经没有办法满足需要,分布式系统自然而然也就登上了历史舞台。在分布式系统下,如何保证应用的事务性,就是所谓的分布式事务问题,也是我们今天要研究的内容。
分布式事务问题
在分布式应用场景中,分布式事务问题是不可回避的,在目前流行的微服务场景下更是如此。
我来举一个工作遇到的实际例子。在我参与开发的一款云产品的建设中,我们引入了开源的 Keycloak 组件,作为用户鉴权和账号创建的认证中心服务,但同时,因为业务也有许多和用户相关的字段需要在创建用户时生成,这一部分数据我们最终选择在数据库中自行维护。
因此,创建用户的步骤就分成了两个部分,首先要去 Keycloak 中创建账号,然后再在我们的数据库中存储一些额外的用户信息数据。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
分布式事务是分布式系统中不可避免的问题,特别是在微服务场景下。本文介绍了分布式事务的问题以及常见解决方案——两阶段提交协议。在分布式系统中,保证事务的原子性需要引入一个有全局信息的协调者,通过将事务提交分成投票和提交两个阶段,最终保证整个系统在大部分时刻都处于正确的状态。两阶段提交协议通过投票和提交两个阶段,保证了事务的一致性,但也存在一些弊端,需要进一步提高性能,减少系统的阻塞情况。文章通过实际例子和技术细节生动地介绍了两阶段提交协议的工作原理和应对失败情况的处理方式,为读者提供了深入理解分布式事务和两阶段提交协议的基础知识。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》,新⼈⾸单¥59
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 柒有个问题,老师说: C阶段失败的话:有全局信息的协调者,如果收到了任意参与者发来的提交失败或者等待超时,都应该像第一个阶段一样,立刻终止事务,并向所有参与者发起回滚的请求。 如果收到失败或者超时前,有部分参与者已经commit了,这个怎么回滚?感觉没办法吧。2022-08-30归属地:上海33
- shupian416在提交阶段有部分参与者已committed了,部分参与者失败了,后续是如何处理的?没有表述清楚!2023-09-16归属地:北京
收起评论