CN109710625A - 基于可靠消息的分布式一致性的实现方法 - Google Patents
基于可靠消息的分布式一致性的实现方法 Download PDFInfo
- Publication number
- CN109710625A CN109710625A CN201811564175.XA CN201811564175A CN109710625A CN 109710625 A CN109710625 A CN 109710625A CN 201811564175 A CN201811564175 A CN 201811564175A CN 109710625 A CN109710625 A CN 109710625A
- Authority
- CN
- China
- Prior art keywords
- message
- reliable news
- application
- service
- upstream
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明提供一种基于可靠消息的分布式一致性的实现方法。所述方法包括:上游应用执行业务并向可靠消息系统发送MQ消息;可靠消息服务和MQ组件协调上游应用和下游应用之间消息的传递,并确保上游应用和下游应用之间数据的一致性;下游应用监听MQ消息并执行自身业务。本发明能够实现即使在高并发的情形下均能保证数据一致性。
Description
技术领域
本发明涉及分布式系统技术领域,尤其涉及一种基于可靠消息的分布式一致性的实现方法。
背景技术
随着分布式技术的发展,网络服务器上的存储、查询、计算等应用也都由集中式向分布式发展。在分布式系统中,一方面为了保证数据的安全性,减轻服务器的负载,在应用系统中存在多个数据库服务器,保存多个数据库副本;另一方面,数据库服务器存储的数据不断更新,需要对各个数据库副本的信息进行一致性维护,保证数据库数据的一致性。
在传统的单机应用中,最简单、最直接、最普遍的会使用一个关系型数据库,通过关系型数据库的事务保证数据的一致性。这种事务有四个基本要素:ACID。
A(Atomicity,原子性):整个事务中的所有操作,要么全部完成,要么全部失败,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
C(Consistency,一致性):一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持与系统处于一致的状态,不管在任何给定的时间并发事务有多少。
I(Isolation,隔离性):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
D(Durability,持久性):在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
在传统的本地事务中,为了保证数据一致性,我们只需要先开始一个事务,然后进行新增、修改、删除等操作,然后提交事务,如果发生异常就回滚。从而实现数据一致性。
依据CAP(Consistency&Availability&Partition tolerance,一致性&可用性&分区容错性)理论,必须在可用性(Availability)和一致性(Consistency)之间做出选择。如果选择提供一致性,需要付出在满足一致性之前阻塞其他并发访问的代价。这可能持续一个不确定的时间,尤其是在系统已经表现出高延迟时或者网络故障导致失去连接时。
依据目前的成功经验,可用性一般是更好的选择,但是在服务和数据库之间维护数据一致性是非常根本的需求,微服务架构中选择满足最终一致性。
为了解决分布式的一致性问题,在长期的研究探索过程中,涌现出了一大批经典的一致性协议和算法,主要有二阶段提交协议和三阶段提交协议。
二阶段提交协议存在同步阻塞、单点问题、数据不一致和太过保守的缺陷。
三阶段提交协议可能出现的问题为:当协调者出现问题或协调者与参与者之间网络出现故障时,会导致参与者无法及时接收到来自协调者的doCommit或是abort请求,参与者需要在等待超时后,继续进行事务提交。
发明内容
本发明提供的基于可靠消息的分布式一致性的实现方法,能够实现即使在高并发的情形下均能保证数据一致性。
第一方面,本发明提供一种基于可靠消息的分布式一致性的实现方法,包括:
上游应用执行业务并向可靠消息系统发送MQ消息;
可靠消息服务和MQ组件协调上游应用和下游应用之间消息的传递,并确保上游应用和下游应用之间数据的一致性;
下游应用监听MQ消息并执行自身业务。
可选地,所述上游应用执行业务并向可靠消息服务发送MQ消息包括:
上游应用发送待确认消息到可靠消息服务;
可靠消息服务保存待确认消息并返回上游应用;
上游应用执行本地业务;
上游应用通知可靠消息服务确认业务已执行并发送消息,以使可靠消息服务修改消息状态为发送状态并将消息投递到MQ组件。
可选地,所述下游应用监听MQ消息并执行自身业务包括:
下游应用监听MQ组件并获取消息;
下游应用根据MQ消息体信息处理本地业务;
下游应用向MQ组件自动发送ACK确认消息被消费;
下游应用通知可靠消息服务消息被成功消费,可靠消息服务将该消息状态更改为已完成。
可选地,可靠消息服务的状态与下游应用的业务执行保持一致,可靠消息服务的状态不是已完成时,确保下游应用未执行,可靠消息服务的状态是已完成时,确保下游应用已执行。
可选地,所述方法还包括:
可靠消息服务查询超时的待确认状态的消息;
可靠消息服务向上游应用查询业务执行的情况,若业务未执行,则删除对应消息;若业务已执行,则修改消息状态为已发送,并发送消息到MQ组件。
可选地,所述方法还包括:
可靠消息服务定时查询状态为已发送并超时的消息;
可靠消息服务将消息重新投递到MQ组件中;
下游应用监听消息,在满足幂等性的条件下,重新执行业务;
下游应用通知可靠消息服务该消息已经成功消费。
本发明实施例提供的基于可靠消息的分布式一致性的实现方法,上游应用执行业务并向可靠消息系统发送MQ消息,可靠消息服务和MQ组件协调上游应用和下游应用之间消息的传递,并确保上游应用和下游应用之间数据的一致性,下游应用监听MQ消息并执行自身业务。与现有技术相比,本发明能够实现即使在高并发的情形下均能保证数据一致性,另外,通过消息状态确认和消息重发两个功能,可以确保上游应用、可靠消息服务和下游应用数据的最终一致性。
附图说明
图1为本发明实施例提供的基于可靠消息的分布式一致性的实现框图;
图2为本发明实施例提供的上游应用与可靠消息服务之间的业务交互图;
图3为本发明实施例提供的下游应用与可靠消息服务之间的业务交互图;
图4为本发明实施例提供的上游应用与可靠消息服务之间进行消息状态确认的流程图;
图5为本发明实施例提供的可靠消息服务、MQ组件与下游应用之间进行消息重发的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先,对比二阶段事务、最大努力交付以及消息最终一致性,如下表所示。并据此给出部分解决方案。
如图1所示,本发明实施例涉及三个模块:
上游应用,执行业务并发送MQ(Message Queue,消息队列)消息。
可靠消息服务和MQ组件,协调上下游消息的传递,并确保上下游数据的一致性。
下游应用,监听MQ的消息并执行自身业务。
(1)上游应用执行业务并发送MQ消息
上游应用将本地业务执行和消息发送绑定在同一个本地事务中,保证要么本地操作成功并发送MQ消息,要么两步操作都失败并回滚。
如图2所示,上游应用和可靠消息服务之间的业务交互包括如下步骤:
1、上游应用发送待确认消息到可靠消息服务;
2、可靠消息服务保存待确认消息并返回;
3、上游应用执行本地业务;
4、上游应用通知可靠消息服务确认业务已执行并发送消息;
5、可靠消息服务修改消息状态为发送状态并将消息投递到MQ组件。
以上每一步都可能出现失败情况,分析一下这5步出现异常后上游业务和消息发送是否一致,如下表所示:
失败步骤 | 现象 | 一致性 |
第1步 | 上游应用业务未执行,MQ消息未发送 | 一致 |
第2步 | 上游应用业务未执行,MQ消息未发送 | 一致 |
第3步 | 上游应用事务回滚,MQ消息未发送 | 一致 |
第4步 | 上游应用业务执行,MQ消息未发送 | 不一致 |
第5步 | 上游应用业务执行,MQ消息未发送 | 不一致 |
上游应用执行完成,下游应用尚未执行或执行失败时,此事务即处于BASE理论的Soft State状态。
(2)下游应用监听MQ消息并执行业务
下游应用监听MQ消息并执行业务,并且将消息的消费结果通知可靠消息服务。
可靠消息服务的状态需要和下游应用的业务执行保持一致,可靠消息服务的状态不是已完成时,确保下游应用未执行,可靠消息服务的状态是已完成时,确保下游应用已执行。
如图3所示,下游应用和可靠消息服务之间的交互包括如下步骤:
1、下游应用监听MQ组件并获取消息;
2、下游应用根据MQ消息体信息处理本地业务;
3、下游应用向MQ组件自动发送ACK确认消息被消费;
4、下游应用通知可靠消息系统消息被成功消费,可靠消息将该消息状态更改为已完成。
以上每一步都可能出现失败情况,通过分析以上两个阶段可能失败的情况,为了确保上下游数据的最终一致性,在可靠消息系统中,需要开发消息状态确认和消息重发两个功能以实现BASE理论的Eventually Consistent特性。
(3)异常处理-消息状态确认
可靠消息服务定时监听消息的状态,如果存在状态为待确认并且超时的消息,则表示上游应用和可靠消息服务的交互中的步骤4或者5出现异常。
可靠消息服务则携带消息体内的信息向上游应用发起请求查询该业务是否已执行。上游应用提供一个可查询接口供可靠消息服务追溯业务执行状态,如果业务执行成功则更改消息状态为已发送,否则删除此消息,以确保数据一致。如图4所示,具体流程包括如下步骤:
1、可靠消息服务查询超时的待确认状态的消息;
2、可靠消息服务向上游应用查询业务执行的情况;
3、若业务未执行,则删除该消息,保证业务和可靠消息服务的一致性;若业务已执行,则修改消息状态为已发送,并发送消息到MQ组件。
(4)异常处理-消息重发
消息已发送则表示上游应用已经执行,接下来则确保下游应用也能正常执行。
可靠消息服务发现可靠消息服务中存在消息状态为已发送并且超时的消息,则表示可靠消息服务和下游应用中存在异常的步骤,无论哪个步骤出现异常,可靠消息服务都将此消息重新投递到MQ组件中供下游应用监听。
下游应用监听到此消息后,在保证幂等性的情况下重新执行业务并通知可靠消息服务此消息已经成功消费,最终确保上游应用、下游应用的数据最终一致性。如图5所示,具体流程包括如下步骤:
1、可靠消息服务定时查询状态为已发送并超时的消息;
2、可靠消息将消息重新投递到MQ组件中;
3、下游应用监听消息,在满足幂等性的条件下,重新执行业务;
4、下游应用通知可靠消息服务该消息已经成功消费。
在本发明实施例中,上游业务执行业务并发送MQ消息,依赖可靠消息服务确保MQ消息投递可靠性,下游应用订阅消息执行业务,通过MQ的Ack机制实现下游消息可靠性,同时写入本地数据库。数据在传输过程中可分为5个阶段,本发明针对每一个阶段的异常做了详细的分析。其中,第4步和第5步会产生数据不一致的情形,通过上游服务提供查询接口和轮训确认的方式解决不一致问题。这样实现了即使在高并发的情形下均能保证数据一致性。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (6)
1.一种基于可靠消息的分布式一致性的实现方法,其特征在于,包括:
上游应用执行业务并向可靠消息系统发送MQ消息;
可靠消息服务和MQ组件协调上游应用和下游应用之间消息的传递,并确保上游应用和下游应用之间数据的一致性;
下游应用监听MQ消息并执行自身业务。
2.根据权利要求1所述的方法,其特征在于,所述上游应用执行业务并向可靠消息服务发送MQ消息包括:
上游应用发送待确认消息到可靠消息服务;
可靠消息服务保存待确认消息并返回上游应用;
上游应用执行本地业务;
上游应用通知可靠消息服务确认业务已执行并发送消息,以使可靠消息服务修改消息状态为发送状态并将消息投递到MQ组件。
3.根据权利要求1所述的方法,其特征在于,所述下游应用监听MQ消息并执行自身业务包括:
下游应用监听MQ组件并获取消息;
下游应用根据MQ消息体信息处理本地业务;
下游应用向MQ组件自动发送ACK确认消息被消费;
下游应用通知可靠消息服务消息被成功消费,可靠消息服务将该消息状态更改为已完成。
4.根据权利要求3所述的方法,其特征在于,可靠消息服务的状态与下游应用的业务执行保持一致,可靠消息服务的状态不是已完成时,确保下游应用未执行,可靠消息服务的状态是已完成时,确保下游应用已执行。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
可靠消息服务查询超时的待确认状态的消息;
可靠消息服务向上游应用查询业务执行的情况,若业务未执行,则删除对应消息;若业务已执行,则修改消息状态为已发送,并发送消息到MQ组件。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
可靠消息服务定时查询状态为已发送并超时的消息;
可靠消息服务将消息重新投递到MQ组件中;
下游应用监听消息,在满足幂等性的条件下,重新执行业务;
下游应用通知可靠消息服务该消息已经成功消费。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811564175.XA CN109710625A (zh) | 2018-12-20 | 2018-12-20 | 基于可靠消息的分布式一致性的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811564175.XA CN109710625A (zh) | 2018-12-20 | 2018-12-20 | 基于可靠消息的分布式一致性的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109710625A true CN109710625A (zh) | 2019-05-03 |
Family
ID=66257006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811564175.XA Pending CN109710625A (zh) | 2018-12-20 | 2018-12-20 | 基于可靠消息的分布式一致性的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710625A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124717A (zh) * | 2019-12-27 | 2020-05-08 | 紫光云(南京)数字技术有限公司 | 消息投递方法、系统及计算机存储介质 |
CN112184387A (zh) * | 2020-10-12 | 2021-01-05 | 广州宸祺出行科技有限公司 | 一种保证司机状态和订单状态变化一致性的方法和系统 |
CN113783666A (zh) * | 2020-11-27 | 2021-12-10 | 北京京东振世信息技术有限公司 | 一种处理业务的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160080512A1 (en) * | 2014-09-12 | 2016-03-17 | Masoud Jolfaei Aghadavoodi | Database triggered push notification |
CN107861823A (zh) * | 2017-11-23 | 2018-03-30 | 国云科技股份有限公司 | 一种基于微服务架构的系统保障数据最终一致性的方法 |
CN108063787A (zh) * | 2017-06-26 | 2018-05-22 | 杭州沃趣科技股份有限公司 | 基于分布式一致性状态机实现双活架构的方法 |
CN108153598A (zh) * | 2017-12-25 | 2018-06-12 | 东软集团股份有限公司 | 基于微服务架构的数据一致性方法以及装置 |
-
2018
- 2018-12-20 CN CN201811564175.XA patent/CN109710625A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160080512A1 (en) * | 2014-09-12 | 2016-03-17 | Masoud Jolfaei Aghadavoodi | Database triggered push notification |
CN108063787A (zh) * | 2017-06-26 | 2018-05-22 | 杭州沃趣科技股份有限公司 | 基于分布式一致性状态机实现双活架构的方法 |
CN107861823A (zh) * | 2017-11-23 | 2018-03-30 | 国云科技股份有限公司 | 一种基于微服务架构的系统保障数据最终一致性的方法 |
CN108153598A (zh) * | 2017-12-25 | 2018-06-12 | 东软集团股份有限公司 | 基于微服务架构的数据一致性方法以及装置 |
Non-Patent Citations (1)
Title |
---|
艾利克斯洪木尔: "《云计算架构设计模式》", 31 December 2017 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124717A (zh) * | 2019-12-27 | 2020-05-08 | 紫光云(南京)数字技术有限公司 | 消息投递方法、系统及计算机存储介质 |
CN112184387A (zh) * | 2020-10-12 | 2021-01-05 | 广州宸祺出行科技有限公司 | 一种保证司机状态和订单状态变化一致性的方法和系统 |
CN113783666A (zh) * | 2020-11-27 | 2021-12-10 | 北京京东振世信息技术有限公司 | 一种处理业务的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8880486B2 (en) | Distributed database system utilizing an extended two-phase-commit process | |
CN106254100B (zh) | 一种数据容灾方法、装置和系统 | |
CN109951331B (zh) | 用于发送信息的方法、装置和计算集群 | |
CN109542639A (zh) | 一种保障微服务调用数据一致性的处理方法、处理装置 | |
WO2021217986A1 (zh) | 分布式消息传输方法、装置、计算机设备及存储介质 | |
CN111930529B (zh) | 基于消息队列及微服务的数据同步方法、装置及系统 | |
CN106850260A (zh) | 一种虚拟化资源管理平台的部署方法和装置 | |
CN103095845B (zh) | 一种实现分布式通信的方法和系统 | |
US7069317B1 (en) | System and method for providing out-of-band notification of service changes | |
CN107861823A (zh) | 一种基于微服务架构的系统保障数据最终一致性的方法 | |
CN109710625A (zh) | 基于可靠消息的分布式一致性的实现方法 | |
US20120278429A1 (en) | Cluster system, synchronization controlling method, server, and synchronization controlling program | |
CN107026880A (zh) | 数据同步方法和装置 | |
CN102571850A (zh) | 事务提交系统、方法及设备 | |
CN107135097A (zh) | 基于簿记建档的容灾系统及容灾方法 | |
CN109495540A (zh) | 一种数据处理的方法、装置、终端设备及存储介质 | |
CN109257396B (zh) | 一种分布式锁调度方法及装置 | |
CN107578327A (zh) | 一种竞价环节中信息推送的方法、设备以及系统 | |
CN114844809A (zh) | 基于网络心跳和内核磁盘心跳的多因子仲裁方法、装置 | |
CN107845013A (zh) | 一种电力交易平台分布式应用服务调用处理方法 | |
Dimovski et al. | Connection Fault-Tolerant Model for distributed transaction processing in mobile computing environment | |
CN106407264A (zh) | 一种高可用性和强一致性的数据库集群系统及其命令处理方法 | |
CN107465727B (zh) | 一种时间监控系统和方法 | |
CN112799879B (zh) | 节点的故障处理方法、装置、设备和存储介质 | |
CN102480366A (zh) | 一种关于会议系统软件的双机热备份运行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190503 |