热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

不好意思,懂分布式事务的你真的很了不起,下篇

上一篇中我们详细分析了分布式事务,以及分布式事务的两种实现方案,二阶段提交和三阶段提交。他们都是满足了事务的ACID特性。但是,他们都有共

点击上方蓝色字关注我们~





上一篇中我们详细分析了分布式事务,以及分布式事务的两种实现方案,二阶段提交和三阶段提交。他们都是满足了事务的ACID特性。但是,他们都有共同的缺点:同步阻塞,系统性能低以及没有解决数据不一致的问题。那今天我们来学另一种方案,基于消息的实现方式。


01
基于分布式消息的最终一致性方案

在eBay分布式系统中,架构师们解决一致性问题的核心方法论是:将需要分布式处理的事务通过消息的方式进行异步处理,然后根据业务规则自行进行失败重试。现在,我们知道了需要有个核心组件,那就消息中间件,通过消息中间件进行分布式系统中各个消息的传递动作如下图:

我同样以我们用户电商购物下单为例,期间涉及到订单系统、支付系统、仓库系统,他们彼此的协作时序图如下:

然后,我们看看它基于消息的最终一致性方案,整个流程是这样的:

  1. 订单系统将要处理订单的消息发送到消息中间件MQ中,消息状态为“待确认”。

  2. 消息中间件MQ将订单系统发来的消息进行持久化存储操作,即在MQ中增加一个“待发送”的消息。

  3. 消息中间件MQ将持久化结果返回给订单系统,如果成功,订单系统则进行创建订单操作,失败则放弃本次创单操作。

  4. 订单系统完成订单的相关操作后,将结果(成功或者失败)再发给消息中间件MQ。

  5. 消息中间件收到上面消息后,则进行相应的处理,如果失败消息,则终止本次交易,删除MQ消息;如果是成功则更新MQ中消息状态为可发送,就会将消息发送到支付系统。

  6. 支付系统收到消息还是按照上面传递步骤进行同样的操作进行支付

  7. 支付系统将支付消息发给MQ,然后MQ将消息发给订单系统,订单系统进行调用库存系统业务。

所以,基于分布式消息最终一致性方案,一样是依据分布式系统中所有事务均成功则整个交易流程才成功的原则。其实,在我们大部分互联网项目中在应对分布式事务的时候,都会先牺牲下少许的数据不一致,来做成最终数据一致性的方案,遵从的是BASE理论。


02
什么是BASE理论

既然说到了消息最终一致性遵从BASE理论,我觉得有必要将BASE理论科普下。

BASE:全程是,Basically Avaliable(基本可用),Soft state(软状态),Eventually consistent(最终一致性)三个短语的缩写,来自eBay的架构师提出。

  • Basically Avaliable:就是在分布式系统环境中,允许牺牲掉部分不影响主流程的功能的不可用,将其降级以确保核心服务的正常可用。

  • Soft state:就是指在事务中,我们允许系统存在中间状态,且并不影响我们这个系统。就拿数据库的主从复制来说,是完全允许复制的时候有延时的发生的。

  • Eventually consistent:还是以数据库主从复制为例说,虽然主从复制有小延迟,但是很快最终就数据保持一致了。

现在,我们将上篇(不好意思,懂分布式事务的你真的很了不起,上篇)中的二阶段提交、三阶段提交以及今天所说的基于分布式消息的最终一致性方案,基于其各自相关特点做一比较。

最后,我们再整体回顾下分布式事务的三种实现方式,整理个思维导图,帮助大家根据自己的业务进行合理的选择哪一种方案来实现自己公司的分布式事务:

总结,今天分享了分布式事务基于分布式消息最终一致性的方案,该方案是遵从BASE理论,并将BASE理论做了科普,然后对比了上篇将的二阶段提交和三阶段提交,这三种方案均是可以被用在生产的,看自己的项目进行选择,二阶段和三阶段是强制性算法,所以,你的项目如果对于一致性比较严格就才去这这方案;而消息最终一致性是可以容忍系统的部分不一致的,但是最终是一致的,比如上面我讲的我们公司的案例就是这样的使用了最终一致性方案。


下一集预告:就是把我们的分布式锁的开发方案给大家分享,敬请期待哈


往期精选

不好意思,懂分布式事务的你真的很了不起,上篇

面试是不是经常被问到分布式系统核心问题,这一次没人难倒你

你们系统是怎么保证高并发的




关于架构师修炼

本号旨在分享一线互联网各种技术架构解决方案,分布式以及高并发等相关专题,同时会将作者的学习总结进行整理并分享。

更多技术专题,敬请期待






推荐阅读
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文探讨了在SQL Server 2008环境下,当尝试删除拥有数据库架构的用户时遇到的问题及解决方案,包括如何查询和更改架构所有权。 ... [详细]
  • 协程作为一种并发设计模式,能有效简化Android平台上的异步代码处理。自Kotlin 1.3版本引入协程以来,这一特性基于其他语言的成熟理念,为开发者提供了新的工具,以增强应用的响应性和效率。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 8个IDC大数据基础定义解析丨IDC
    本文针对IDC数据行业相关名词术语进行解析,分为4组相关概念,希望大家读完 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
常奕尧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有