分布式事物如何保证接口请求顺序性?

区块链中的分布式 区块链中的分布式,欢迎对区块链感兴趣的朋友共同探讨区块链。 阅读详情

前言

先抛出一个问题大家思考一下:在分布式系统中,我们如何保证多个请求的顺序性问题,比如有A/B两个系统,系统A在一次订单业务处理中,向B系统发送三次请求,先进行插入订单操作,然后对订单状态进行修改,最后增加用户积分。

但是这三次请求分别落在了不同的机器上,并且插入订单的操作由于一些意外导致延迟,修改订单操作先执行了,但是此时并没有订单信息,也就会出现我们期望之外的结果了。

​那面对这种情况我们应该如何避免呢,这就需要了解花哥今天说的:分布式服务中,如何保证请求的顺序性。

增加接入服务

我们可以在A、B系统之间增加一个接入服务,比如上述场景中,一次完整的业务中包含了三个请求,在每一次请求时,都携带一个唯一id作为标识传入到接入服务中,接入服务根据id,将对应的请求全部分发到某一台机器上,这样这三次请求就能全部由同一台服务来完成操作。

增加队列

增加【接入服务后】,能够让相同id的请求分发到同一台机器,只要系统A顺序发送,那系统B也会顺序接收,但是还会出现一个问题,就是如果系统B中是以多线程的方式处理接收到的请求时,这样还是会出现消费顺序的问题。

其实解决这个问题的思路就是增加一个内存队列,将相同id的请求,全部丢到一个内存队列中,让这几个请求进行排队消费,这样就可以保证多线程下的顺序性。

分布式锁保证顺序性

在一般的情况下,上述两步基本满足了我们的业务需求,但其实还是会存在极端情况导致顺序性问题,比如接入服务分发过程中,将顺序异常分发到系统B中。对于一些需要100%保证接口顺序性的系统,我们可以通过接入分布式锁来实现。

如上图,现在三条请求都已到达系统B中,每个请求中除了携带唯一id外,还带上本次请求的顺序编号ord,并且在每个请求执行业务逻辑之前,都会去请求zookeeper锁,只有获取到锁的线程才能执行:

  • 如果删除请求率先获取锁,它在执行业务逻辑前,会去数据库中判断新增请求、修改请求是否已经完成,如果没有完成,就将锁释放;

  • 接下来新增请求获取到锁,它判断当前请求的执行顺序ord=1,可以执行,因此就会去数据库中插入数据,并释放锁;

  • 接下来如果删除请求获取到锁,它依旧会去数据库中查询,发现修改请求还没有完成操作,因此继续释放当前锁资源;

  • 修改请求获取到锁,发现数据库中已经存在记录,因此对该订单状态修改,并释放锁;

  • 删除请求获取锁,并完成删除操作,最后释放锁。

缺陷

通过以上这三个步骤,可以实现100%的消费顺序性,但是这一通操作下来,系统的吞吐量严重下降,特别是分布式锁的引入,成为系统并发的瓶颈。

除此之外,我们还需要保证引入的中间件可用性,衍生出一连串的解决方案,提升了系统的复杂性,对日后的维护都是一种挑战。因此,最好的方案就是能不能在业务逻辑上解决,比如将几个步骤合并为一步或者用其他方案代替,从而在根上避免。

电子病历编辑器源码(Springboot+原生HTML) 应用场景包括:电子病历书写、体温单录入、全平台信息采集、检验检查报告、不良事件上报等。 此外,电子病历编辑器软件还适用于医生工作站的病历编辑、护士工作站的护理记录输入、PASC/LIS/RIS报告编辑打印、病案首页、出院小结、病程记录、手术记录、各种知情书、康复及精神学科用的量表、临床路径用表单界面等等。 这些应用场景都涉及到了医疗文书编辑的需求,因此电子病历编辑器软件在这些场景中具有广泛的应用价值。 阅读详情

相关推荐

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

java接口排队执行

方法会被排队执行,因为我们配置了单线程的线程池。新的任务会进入队列等待执行,不会与之前的任务并行执行。主要用于定时任务,如果是要对接口请求进行排队处理,则需要使用不同的策略。在Spring Boot中,要实现接口排队执行,不并发执行,可以使用。首先,你需要配置一个线程池,然后在你想要排队执行的方法上加上。注解,并配置为单线程模式。对于接口排队处理,可以使用。

qq_36935391的博客 858

机器人动力学与控制学习笔记(一)————机器人控制概述

一、概述 1、机器人控制的目的 对自由运动机器人来说,控制的目的是要控制机器人手端的位置和姿态(以后统一简称为位姿),即所谓位置控制问题。这时希望机器人手端所达到的位置称为期望位置或期望轨迹。期望轨迹可以在机器人任务空间中给出,也可以通过逆运动学关系转化为机器人关节空间中的期望轨迹。期望轨迹通常有两种形式:一种是一个固定位置(即固定点),另一种是一条随时间连续变化的轨迹。自由运动机器人位置控制的目的,是要使机器人手端从任意起始位置出发都能到达期望轨迹。当期望轨迹是固定点时的位置控制称为定...

冰与火的青春的博客 6879

java多线程保证顺序执行

多线程保证顺序执行

大家好,我是云村的王子 4664

华为 MetaERP 通过元数据驱动的多组织架构 + 内部交易协同 + 自动对账引擎 + 合并规则引擎,实现多组织内部往来与合并报表的全流程自动抵消,核心是源头标准化、过程自动化、结果可追溯

摘要: 华为MetaERP通过元数据驱动的多组织架构与主数据标准化,实现内部往来与合并报表全流程自动化。其核心包括:统一组织模型与主数据(确保数据口径一致)、内部交易协同(自动生成对称凭证)、智能对账引擎(多维度自动匹配差异)、合并规则引擎(配置化抵消模板)。依托GaussDB高性能数据库与流批一体架构,华为全球88家子公司合并报表效率提升400%,关账时间缩短至2小时,支持多准则、多币种自动抵消,审计全程可追溯。相比传统ERP,MetaERP在协同性、自动化与扩展性上优势显著,为跨国集团提供高效、准确的合

金牌架构师 264

互联网的发展简史—web

互联网是我现在生活所离不开的一个东西,但是你知道互联网的前世今生吗?本文将讲解互联网的发展史,以及很火的元宇宙概念。

yj11290301的博客 3561

分布式事务有这一篇就够了!

分布式事务 文章目录分布式事务1. 基础概念1.1 什么是事务1.2 本地事务1.3 分布式事务1.4 分布式事务产生的情景2. 分布式事务基础理论2.1 CAP理论2.1.1 理解CAPC - ConsistencyA - AvailabilityP - Partition tolerance2.1.2 CAP组合方式CAP的组合方式2.1.3 总结2.2 BASE 理论3. 分布式事务解决方案之 2PC3.1 什么是 2PC3.2 解决方案3.2.1 XA 方案3.2.2 Seata 方案3.3 小结4

i_deAc的博客 2464

数学之美:欣赏超越数e

文章目录一、e为何物?二、利息与e的关系1、利息问题2、计算利息3、欣赏螺旋线(1)螺旋线概述(2)绘制螺旋线三、e和π 一、e为何物? e是一个无限不循环小数,其值约等于2.718281828…,它是一个超越数,有时也称为欧拉数(Euler’s Number)。 以e为底的对数称为自然对数(Natural Logarithm),数学中使用自然这个词的还有自然数(Natural Number)。 这里的“自然”并不是现代人所习惯的“大自然”,而是有点儿“天然存在,非人为”的意思。 二、利息与e的关系

howard2005的专栏 1714

分布式事务整理

目录㈠ 什么是分布式事务㈡ 分布式事务分类㈢ 刚性事务⑴ XA协议⑵ JTA协议⑶ 2PC⑷ 3PC㈣ 柔性事务⑴ 补偿型事务TCCSaga⑵ 异步通知型事务MQ事务消息方案本地消息表方案 说明: 本文内容是对自己学习分布式事务的一个总结,有些内容来源于网络,如有侵权,请联系本人删除。 文中可能存在理解错误的地方,欢迎留言指正、探讨,不喜勿喷,谢谢。 如果您以前了解过分布式事务相关的模型,那么本文对您可能没有太大的参考价值。 阅读本文需要先了解一些事务与分布式相关的理论基础,例如什么是事务,事务的ACI

所有文章都可以查看。如果发现需要VIP才能看的文章,请留言,可能是发布的时候手抖了。 876

别让 Claude Code 一直问你“能不能执行“:权限配置完全指南

Claude Code 提供了一套精细的权限配置机制,配置好权限设置,可以提速不少。这个小技巧需要掌握一下。

沐风 3840

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 629

Java并发编程(一)如何保证线程顺序执行

只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的。如果只是创建三个线程然后执行,最后的执行顺序是不可预期的。这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程可以看成是相对于的主线程的一个异步操作。 public class FIFOThreadExample { public synchronized static void foo(String name) { System.out.print(name); } publ

九里的专栏 2287

27930-2015+充电协议解析

对2015+充电与2015充电进行硬件电路对比、通信协议对比和2015+通信协议解析。

manjixingkong1234的专栏 232

最新【JavaP6大纲】Dubbo篇:分布式服务接口请求的顺序性如何保证?,小白必看

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;

2301_82242675的博客 457

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

redis事物介绍与应用

研究reids与使用已经有几个月的时间,中间自己总结了不少文档以及相关资料,接下来时间,会陆续分享一些相关资料,并且介绍其在我们应用中的使用情况。 下面是redis事物的相关介绍(参考redis.io): 一.事物的使用 1.Redis事物通过MULTI命令开始。 这条命令总是返回OK。 2.然后用户可以执行多条指令,redis不会马上执行这些指令,还只是放入到队列中。 3.当执

haier_jiang的专栏 8909

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

分布式事物学习

分布式事物-数据一致性学习

月光光照大江 391

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【分布式】怎么保证一致性

说到一致性就不能不提事务,事务这个词现在经常用于数据库,但是有一点要注意,站在一定的角度,事务并非只适用于数据库。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 4225

分布式架构中的事物思考

对于目前的的分布式架构来说,存在三种调用方式: 1: rpc方式 prc方式也是目前比较常用的方式 比较成熟的rpc调用框架dubbo,HSF,spring cloud 等框架,这这类框架的调用中,调用方的事物和实现方的事物是分开的,在这种情况下,如果要实现事物一致性,需要如何做呢? 针对这个问题从两个方面来考虑: 1: 本地事物一致性 本地事物一致性这个就不说了,针对单数据库的jdb...

王安的专栏 341

JAVA中什么是事物

说起来事物,就跟数据库操作有关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 事务...

weixin_41758046的博客 5377

分布式事物2 基于rocketmq

分布式事物2 基于rocketmq 扩展: 1)windows下用命令行操作环境变量 切换到超级管理员命令行窗口 使用cmd命令添加path环境变量 当前窗口有效 在cmd下输入:path=%path%;D:/Anaconda接着按"Enter"回车键,其中:D:/Anaconda是Python的安装目录。 Windows10命令行设置环...

XY的专栏 388
上一篇: 高并发系统简单玩,Alibaba全新出品亿级并发设计速成笔记真香
下一篇: 解放双手,推荐一款阿里开源的低代码工具,YYDS
Java佳佳
博客等级 码龄4年 216粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值