热门标签 | 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理论做了科普,然后对比了上篇将的二阶段提交和三阶段提交,这三种方案均是可以被用在生产的,看自己的项目进行选择,二阶段和三阶段是强制性算法,所以,你的项目如果对于一致性比较严格就才去这这方案;而消息最终一致性是可以容忍系统的部分不一致的,但是最终是一致的,比如上面我讲的我们公司的案例就是这样的使用了最终一致性方案。


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


往期精选

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

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

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




关于架构师修炼

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

更多技术专题,敬请期待






推荐阅读
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • VPX611是北京青翼科技推出的一款采用6U VPX架构的高性能数据存储板。该板卡搭载两片Xilinx Kintex-7系列FPGA作为主控单元,内置RAID控制器,支持多达8个mSATA盘,最大存储容量可达8TB,持续写入带宽高达3.2GB/s。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
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社区 版权所有