各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题

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

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

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

现在我将我们用户电商购物下单怎么实现分布式最终一致性整个开发流程做个讲解,期间涉及到订单系统、支付系统、仓库系统,他们彼此的协作时序图如下:

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

  1. 订单系统将要处理订单的消息发送到消息中间件MQ中,消息状态为“待确认”。
  2. 消息中间件MQ将订单系统发来的消息进行持久化存储操作,即在MQ中增加一个“待发送”的消息。
  3. 消息中间件MQ将持久化结果返回给订单系统,如果成功,订单系统则进行创建订单操作,失败则放弃本次创单操作。
  4. 订单系统完成订单的相关操作后,将结果(成功或者失败)再发给消息中间件MQ。
  5. 消息中间件收到上面消息后,则进行相应的处理,如果失败消息,则终止本次交易,删除MQ消息;如果是成功则更新MQ中消息状态为可发送,就会将消息发送到支付系统。
  6. 支付系统收到消息还是按照上面传递步骤进行同样的操作进行支付。
  7. 支付系统将支付消息发给MQ,然后MQ将消息发给订单系统,订单系统进行调用库存系统业务。

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

什么是BASE理论

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

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

  • Basically Avaliable:就是在分布式系统环境中,允许牺牲掉部分不影响主流程的功能的不可用,将其降级以确保核心服务的正常可用。
  • Soft state:就是指在事务中,我们允许系统存在中间状态,且并不影响我们这个系统。就拿数据库的主从复制来说,是完全允许复制的时候有延时的发生的。
  • Eventually consistent:还是以数据库主从复制为例说,虽然主从复制有小延迟,但是很快最终就数据保持一致了。

三种方案比较:

现在我们将上篇「分布式技术」分布式事务真实解决方案,上篇 中的二阶段提交、三阶段提交以及今天所说的基于分布式消息的最终一致性方案,基于其各自相关特点做一比较。

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

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

如果大家喜欢,就关注我,我会一直分享业界以及我们自己的真实实战经验

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

一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...相关推荐

  1. 「分布式技术」分布式锁的最佳实践

    「分布式技术」分布式锁的最佳实践 参考&鸣谢 分布式最佳实践:分布式锁 几种分布式锁的实现方式 分布式锁的几种实现方式~ 文章目录 「分布式技术」分布式锁的最佳实践 一.为什么需要分布式锁 二 ...

  2. sap 标准委外和工序委外_「SAP技术」SAP MM 委外加工采购流程里副产品的收货

    「SAP技术」SAP MM 委外加工采购流程里副产品的收货 委外加工采购流程,在很多SAP项目里都有. 其标准流程是: 我方因受限于生产工艺或者生产产能不足,或者降低生产成本的缘故,需要寻找外部加工商 ...

  3. 6种分布式事务最终一致性解决方案,一次性说清了!

    分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,尤其在微服务架构中,几乎可以说是无法避免,因此也常常被认为是微服务落地的最大阻碍. 随着系统的服务拓扑从单体应用迈 ...

  4. rocketmq分布式事务最终一致性解决方案

    背景 分布式系统中,我们时常会遇到分布式事务的问题,如更新订单然后发送短信提醒,但是这两个操作需要操作不同的数据库,那么此时数据库的事务就不能处理好了 传统方式存在的问题: 1.先发送消息,再执行数据 ...

  5. 基于RabbitMQ的分布式事务最终一致性解决方案

    1. 分布式事务 所谓事务,通俗一点讲就是一系列操作要么同时成功,要么同时失败.而分布式事务就是这一系列的操作在不同的节点上,那要如何保证事务的ACID特性呢. 原子性(atomicity).一个事务 ...

  6. mysql数据字典生成器_「python技术」列表推导、生成器表达式和字典推导的差异及其示例

    #开往春天新创作大赛# 前言 列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导, ...

  7. 潜流式人工湿地计算_「环保技术」农村混合污水人工湿地处理

    农村生活污水具有广泛性.分散性.来源多.增长快等污染特点,农田灌溉污水具有随机性.蔓延性.难监测性.时空变化性.污染滞后性和潜在威胁性等污染特点,我国农村往往这两种污水同时存在.因此,对两种混合污水进 ...

  8. sap事务代码_「SAP技术」SAP MM 事务代码ME17的用法

    SAP MM 事务代码ME17的用法 1, 如下采购信息记录需要被归档: PIR号码,5300007816 2, ME12打上删除标记, 3, 事务代码ME17做归档 3.1 创建archive fi ...

  9. 一致 先验分布 后验分布_分布式事务常见解决方案与最终一致性

    小编推荐:互联网大背景下,微服务盛行,平时开发中难免会遇到分布式事务问题.大家经常会听到CAP原理,即一致性(Consistency).可用性(Availability).分区容错性(Partitio ...

最新文章

  1. 亿级系统的Redis缓存如何设计???
  2. 实验吧—Web——WP之 上传绕过
  3. 超图使用服务管理页面发布服务图解
  4. 兔子运送胡萝卜_我如何建立和运送第一个MVP
  5. Unity面试题精选(3)
  6. Docker安装MySQL教程
  7. 【MySQL】通信协议
  8. HTML5的革新:结构之美
  9. abp vnext修改密码策略
  10. RF-实现接口自动化
  11. 在线教育直播平台对比(钉钉/保利威/小鹅通)
  12. 视频课程:CMOS模拟集成电路版图设计
  13. react + better-scroll 横向滚动案例
  14. 081-反射(Kind)
  15. 我想起个公司名字,招投标行业的,快速搜索标讯的,科技公司,蓝色logo的
  16. es6去除重复项_ES5 ES6中Array对象去除重复项的方法总结
  17. 终于来了!腾讯数据分析证书!
  18. InstallShield2021 发布!!
  19. python 编写获取阿里巴巴行业分类数据代码
  20. 161. 相隔为 1 的编辑距离

热门文章

  1. js动态生产table、Div、select
  2. struts2中文乱码问题
  3. JS 实战2(邮箱选人功能)
  4. 几何画板要怎样度量直线方程
  5. POJ 1384 Piggy-Bank 背包DP
  6. python之高性能网络编程并发框架eventlet实例
  7. CISA已遭利用漏洞列表新增15个漏洞
  8. FPGA 芯片被曝严重的 Starbleed 漏洞,影响数据中心IoT工业设备等
  9. 跨浏览器测试工具推荐
  10. C++ 无限for循环的bug