CN109783205A - 一种基于事件补偿机制的数据最终一致性办法 - Google Patents
一种基于事件补偿机制的数据最终一致性办法 Download PDFInfo
- Publication number
- CN109783205A CN109783205A CN201910004623.9A CN201910004623A CN109783205A CN 109783205 A CN109783205 A CN 109783205A CN 201910004623 A CN201910004623 A CN 201910004623A CN 109783205 A CN109783205 A CN 109783205A
- Authority
- CN
- China
- Prior art keywords
- event
- business
- data
- compensation mechanism
- publishing side
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000007246 mechanism Effects 0.000 title claims abstract description 23
- 230000004044 response Effects 0.000 claims abstract description 13
- 230000008569 process Effects 0.000 claims abstract description 6
- 230000009471 action Effects 0.000 claims abstract description 4
- 238000012790 confirmation Methods 0.000 claims abstract description 4
- 230000001737 promoting effect Effects 0.000 abstract description 2
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明特别涉及一种基于事件补偿机制的数据最终一致性办法。该基于事件补偿机制的数据最终一致性办法,在事件定义,动作定义和发布订阅关系过程中自动创建补偿通道;在事件发布时,发布事件和业务在同一事务内,保证事件发布端的事务一致性;在运行阶段,将调用链条缓存起来,根据执行结果自动发送事件,包括消费端的响应事件,事件发布端的业务取消事件,事件发布端的确认和取消动作。该基于事件补偿机制的数据最终一致性办法,不仅降低了配置的技术难度,减少了最终用户的配置的工作量,还保证了发送事件与业务数据的事务一致性,保证了事件数据不会丢失;同时,在运行阶段实现了自动化,灵活高效,自动化程度高,适宜推广应用。
Description
技术领域
本发明涉及分布式系统微服务架构技术领域,特别涉及一种基于事件补偿机制的数据最终一致性办法。
背景技术
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务有一个特点是可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。通过这一点可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
在分布式系统微服务架构下,服务之间基于事件交互,通过事件补偿机制实现数据最终一致性。但是在分布式系统下,每个微服务可能对应不同的数据库,有些业务需要跨域多个微服务,因此给数据一致性带来挑战。
实现数据一致性有多种方案,根据CAP理论不可能同时满足CAP三个基本需求,如果采用数据强一致性方案,则必须放弃可用性和分区容忍性,因此传统的两阶段提交(强数据一致性方案)不适用于微服务架构,需要牺牲强一致性,采用数据最终一致性的方案,通过业务补偿的模式解决数据一致性问题。
业务补偿方式按照调用方式不同可分为:同步调用和基于事件的异步调用。同步调用存在紧耦合、阻塞、易产生性能瓶颈缺点,基于事件的异步调用最大优势是松耦合、非阻塞、高性能,因此基于事件的异步调用方式被广泛采用。
针对上述情况,本发明提出了一种基于事件补偿机制的数据最终一致性办法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于事件补偿机制的数据最终一致性办法。
本发明是通过如下技术方案实现的:
一种基于事件补偿机制的数据最终一致性办法,其特征在于,包括以下步骤:
(A)在事件定义,动作定义和发布订阅关系过程中自动创建补偿通道;
(B)在事件发布时,发布事件和业务在同一事务内,保证事件发布端的事务一致性;
(C)在运行阶段,将调用链条缓存起来,根据执行结果自动发送事件,包括消费端的响应事件,事件发布端的业务取消事件,事件发布端的确认和取消动作。
所述步骤(A)中,业务事件和业务取消事件同时成对出现,当创建业务事件时,自动创建对应的业务取消事件;业务动作和业务取消动作同时成对出现,当创建业务动作时,自动创建对应的业务取消动作。
当业务动作订阅业务事件时,对应的业务取消动作自动订阅在业务取消事件,同时创建事件响应通道,供订阅端将执行结果反馈给事件发布端。
所述步骤(B),发布事件时,先检查事件发布端是否存在事务上下文,如果业务事件处于事务上下文中,则在事务提交时才真正发送事件。
所述步骤(B)中,为了保证事件发布端的事务一致性,首先将事件数据持久化到数据库,事件发送时如果处于事务上下文中,事件不会立即发送,而是监听事务完成事件,当事务完成时,事件发送代理从内存中将事件数据取出,然后发送;事件发送时如果未处于事务上下文中,则立即发送。
所述步骤(C)中,当消费端执行完毕后,框架将执行结果包装成消息,发布对应的响应事件。
所述步骤(C)中,事件发布端在收到所有订阅者的反馈结果后,如果所有业务都执行成功,则将业务全部置为确认状态;如果有一个业务执行失败,则先将自身业务数据回滚,然后发布业务取消事件;消费者端接收到业务取消事件,回滚已提交的数据,最终实现一致性。
所述步骤(C)中,如果存在业务动作执行期间发送了子事件,则需等待子事件反馈结果后在将执行结果反馈给事件发布端。
本发明的有益效果是:该基于事件补偿机制的数据最终一致性办法,不仅降低了配置的技术难度,减少了最终用户的配置的工作量,还保证了发送事件与业务数据的事务一致性,保证了事件数据不会丢失;同时,在运行阶段实现了自动响应、自动确认或取消、自动发送取消事件,无需人为设置,灵活高效,自动化程度高,适宜推广应用。
附图说明
附图1为本发明基于事件补偿机制的数据最终一致性办法示意图。
附图2为本发明消费端未发生异常处理办法示意图。
附图3为本发明消费端发生异常处理办法示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
该基于事件补偿机制的数据最终一致性办法,包括以下步骤:
(A)在事件定义,动作定义和发布订阅关系过程中自动创建补偿通道;
(B)在事件发布时,发布事件和业务在同一事务内,保证事件发布端的事务一致性;
(C)在运行阶段,将调用链条缓存起来,根据执行结果自动发送事件,包括消费端的响应事件,事件发布端的业务取消事件,事件发布端的确认和取消动作。
所述步骤(A)中,业务事件和业务取消事件同时成对出现,当创建业务事件时,自动创建对应的业务取消事件;业务动作和业务取消动作同时成对出现,当创建业务动作时,自动创建对应的业务取消动作。
当业务动作订阅业务事件时,对应的业务取消动作自动订阅在业务取消事件,同时创建事件响应通道,供订阅端将执行结果反馈给事件发布端。
所述步骤(B),发布事件时,先检查事件发布端是否存在事务上下文,如果业务事件处于事务上下文中,则在事务提交时才真正发送事件。
所述步骤(B)中,为了保证事件发布端的事务一致性,首先将事件数据持久化到数据库,事件发送时如果处于事务上下文中,事件不会立即发送,而是监听事务完成事件,当事务完成时,事件发送代理从内存中将事件数据取出,然后发送;事件发送时如果未处于事务上下文中,则立即发送。
所述步骤(C)中,当消费端执行完毕后,框架将执行结果包装成消息,发布对应的响应事件。
所述步骤(C)中,事件发布端在收到所有订阅者的反馈结果后,如果所有业务都执行成功,则将业务全部置为确认状态;如果有一个业务执行失败,则先将自身业务数据回滚,然后发布业务取消事件;消费者端接收到业务取消事件,回滚已提交的数据,最终实现一致性。
所述步骤(C)中,如果存在业务动作执行期间发送了子事件,则需等待子事件反馈结果后在将执行结果反馈给事件发布端。
实施例
示例环境:某订单、发票、库存微服务,有一创建订单需求,在创建订单同时,要扣除商品的库存,并将发票开出,三者的数据需要保证最终一致。
应用方式如下:
(1)首先创建订单,将订单状态置为创建中,然后发送订单创建事件。
(2)库存和发票订阅了订单创建事件
(3)库存服务在收到事件后,扣除库存,然后发送响应事件。
(4)发票服务在收到事件后,创建发票,然后发送响应事件。
(5)订单订阅了两者的响应事件。
(6)收到两者响应事件后,根据事件消息内容得知两者都执行成功,将订单状态置为订单已创建。
该基于事件补偿机制的数据最终一致性办法,通过在设计阶段自动建立发布订阅关系、事件响应关系、事件取消关系,降低了配置的技术难度,减少了最终用户的配置的工作量;在事件发布端,通过事件日志和业务数据在同一个事务内,保证了发送事件与业务数据的事务一致性,同时保证了事件数据不会丢失;在运行阶段,通过各种发布订阅关系实现了自动响应、自动确认或取消、自动发送取消事件,无需人为设置。
以上对本发明实例中的一种基于事件补偿机制的数据最终一致性办法进行了详细的介绍。本部分采用具体实例对发明的原理及实施方式进行了阐述,以上实例仅用于帮助理解本发明的核心思想,在不脱离本发明原理的情况下,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
Claims (8)
1.一种基于事件补偿机制的数据最终一致性办法,其特征在于,包括以下步骤:
(A)在事件定义,动作定义和发布订阅关系过程中自动创建补偿通道;
(B)在事件发布时,发布事件和业务在同一事务内,保证事件发布端的事务一致性;
(C)在运行阶段,将调用链条缓存起来,根据执行结果自动发送事件,包括消费端的响应事件,事件发布端的业务取消事件,事件发布端的确认和取消动作。
2.根据权利要求1所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(A)中,业务事件和业务取消事件同时成对出现,当创建业务事件时,自动创建对应的业务取消事件;业务动作和业务取消动作同时成对出现,当创建业务动作时,自动创建对应的业务取消动作。
3.根据权利要求2所述的基于事件补偿机制的数据最终一致性办法,其特征在于:当业务动作订阅业务事件时,对应的业务取消动作自动订阅在业务取消事件,同时创建事件响应通道,供订阅端将执行结果反馈给事件发布端。
4.根据权利要求1所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(B),发布事件时,先检查事件发布端是否存在事务上下文,如果业务事件处于事务上下文中,则在事务提交时才真正发送事件。
5.根据权利要求4所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(B)中,为了保证事件发布端的事务一致性,首先将事件数据持久化到数据库,事件发送时如果处于事务上下文中,事件不会立即发送,而是监听事务完成事件,当事务完成时,事件发送代理从内存中将事件数据取出,然后发送;事件发送时如果未处于事务上下文中,则立即发送。
6.根据权利要求1所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(C)中,当消费端执行完毕后,框架将执行结果包装成消息,发布对应的响应事件。
7.根据权利要求6所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(C)中,事件发布端在收到所有订阅者的反馈结果后,如果所有业务都执行成功,则将业务全部置为确认状态;如果有一个业务执行失败,则先将自身业务数据回滚,然后发布业务取消事件;消费者端接收到业务取消事件,回滚已提交的数据,最终实现一致性。
8.根据权利要求7所述的基于事件补偿机制的数据最终一致性办法,其特征在于:所述步骤(C)中,如果存在业务动作执行期间发送了子事件,则需等待子事件反馈结果后在将执行结果反馈给事件发布端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910004623.9A CN109783205A (zh) | 2019-01-03 | 2019-01-03 | 一种基于事件补偿机制的数据最终一致性办法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910004623.9A CN109783205A (zh) | 2019-01-03 | 2019-01-03 | 一种基于事件补偿机制的数据最终一致性办法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109783205A true CN109783205A (zh) | 2019-05-21 |
Family
ID=66499851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910004623.9A Pending CN109783205A (zh) | 2019-01-03 | 2019-01-03 | 一种基于事件补偿机制的数据最终一致性办法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783205A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111191180A (zh) * | 2020-01-15 | 2020-05-22 | 百望股份有限公司 | 发票领域的微服务系统的构建方法、装置及存储介质 |
CN111414266A (zh) * | 2020-03-23 | 2020-07-14 | 山东浪潮通软信息科技有限公司 | 一种分布式事务的同步异步通信方法和装置 |
CN112416955A (zh) * | 2020-11-18 | 2021-02-26 | 四川长虹电器股份有限公司 | 基于高并发环境的缓存一致性问题解决方法 |
CN112835983A (zh) * | 2021-02-26 | 2021-05-25 | 紫光云技术有限公司 | 一种保证分布式系统最终一致性模式的实现方法 |
CN113900840A (zh) * | 2021-12-08 | 2022-01-07 | 浙江新华移动传媒股份有限公司 | 一种分布式事务最终一致性处理方法及装置 |
CN114529301A (zh) * | 2022-02-21 | 2022-05-24 | 山东浪潮通软信息科技有限公司 | 一种凭证过账方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090119146A1 (en) * | 2002-09-12 | 2009-05-07 | Mauro Antonio Giacomello | Method and system for managing transactions |
CN106777026A (zh) * | 2016-12-08 | 2017-05-31 | 用友网络科技股份有限公司 | 支持微服务架构事务最终一致性的方法、装置及系统 |
US20180101564A1 (en) * | 2014-10-14 | 2018-04-12 | Red Hat, Inc. | Transaction compensation for single phase resources |
CN108459919A (zh) * | 2018-03-29 | 2018-08-28 | 中信百信银行股份有限公司 | 一种分布式事务处理方法及装置 |
CN109086319A (zh) * | 2018-07-02 | 2018-12-25 | 无锡天脉聚源传媒科技有限公司 | 针对交易数据的高并发数据处理方法及系统 |
-
2019
- 2019-01-03 CN CN201910004623.9A patent/CN109783205A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090119146A1 (en) * | 2002-09-12 | 2009-05-07 | Mauro Antonio Giacomello | Method and system for managing transactions |
US20180101564A1 (en) * | 2014-10-14 | 2018-04-12 | Red Hat, Inc. | Transaction compensation for single phase resources |
CN106777026A (zh) * | 2016-12-08 | 2017-05-31 | 用友网络科技股份有限公司 | 支持微服务架构事务最终一致性的方法、装置及系统 |
CN108459919A (zh) * | 2018-03-29 | 2018-08-28 | 中信百信银行股份有限公司 | 一种分布式事务处理方法及装置 |
CN109086319A (zh) * | 2018-07-02 | 2018-12-25 | 无锡天脉聚源传媒科技有限公司 | 针对交易数据的高并发数据处理方法及系统 |
Non-Patent Citations (1)
Title |
---|
田向阳: "分布式事务一致性,看这一篇就够了", 《HTTPS://WWW/SOHU.COM/A/228496709_609518》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111191180A (zh) * | 2020-01-15 | 2020-05-22 | 百望股份有限公司 | 发票领域的微服务系统的构建方法、装置及存储介质 |
CN111414266A (zh) * | 2020-03-23 | 2020-07-14 | 山东浪潮通软信息科技有限公司 | 一种分布式事务的同步异步通信方法和装置 |
CN111414266B (zh) * | 2020-03-23 | 2024-04-05 | 浪潮通用软件有限公司 | 一种分布式事务的同步异步通信方法和装置 |
CN112416955A (zh) * | 2020-11-18 | 2021-02-26 | 四川长虹电器股份有限公司 | 基于高并发环境的缓存一致性问题解决方法 |
CN112416955B (zh) * | 2020-11-18 | 2022-02-22 | 四川长虹电器股份有限公司 | 基于高并发环境的缓存一致性问题解决方法 |
CN112835983A (zh) * | 2021-02-26 | 2021-05-25 | 紫光云技术有限公司 | 一种保证分布式系统最终一致性模式的实现方法 |
CN113900840A (zh) * | 2021-12-08 | 2022-01-07 | 浙江新华移动传媒股份有限公司 | 一种分布式事务最终一致性处理方法及装置 |
CN114529301A (zh) * | 2022-02-21 | 2022-05-24 | 山东浪潮通软信息科技有限公司 | 一种凭证过账方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783205A (zh) | 一种基于事件补偿机制的数据最终一致性办法 | |
US10277672B2 (en) | System and method for real-time cloud data synchronization using a database binary log | |
US9721246B2 (en) | Synchronization patterns for mobile applications | |
CN107819861A (zh) | 业务数据处理方法、装置及系统 | |
CN112069265B (zh) | 配置数据的同步方法、业务数据系统、计算机系统和介质 | |
CN101082970A (zh) | 政务审批工作流引擎系统的实现方法 | |
CN110955534A (zh) | 一种基于中间件的业务流程自动化系统及方法 | |
CN105262831A (zh) | 一种存储系统间同步数据的方法、装置及同步系统 | |
WO2019047441A1 (zh) | 一种通信优化方法及系统 | |
CN106230914B (zh) | 一种基于订阅信息发布的电子白板数据共享系统 | |
CN101917394B (zh) | 在手机设备上进行数据共享的中间件系统及工作方法 | |
CN104778175A (zh) | 一种实现异构数据库数据同步的方法及系统 | |
CN112463211A (zh) | 一种兼容多种开发架构的系统架构改造方法及系统架构 | |
CN111144883A (zh) | 一种区块链网络的处理性能分析方法及装置 | |
CN109002462A (zh) | 一种实现分布式事物的方法及系统 | |
CN107026880A (zh) | 数据同步方法和装置 | |
CN113779094B (zh) | 基于批流一体的数据处理方法、装置、计算机设备和介质 | |
CN109040094A (zh) | 一种基于RabbitMQ实现异步RPC的方法及系统 | |
CN110276614A (zh) | 分户账的更新方法和装置 | |
CN103139157A (zh) | 一种基于socket的网络通信方法、装置及系统 | |
CN107729176A (zh) | 一种配置文件管理系统的容灾方法及容灾系统 | |
CN105828300A (zh) | 一种集群系统中状态信息订阅的实现方法 | |
CN108965109A (zh) | 一种即时通讯控制方法、装置及存储介质 | |
CN110928746B (zh) | 可调配的业务处理系统、方法、装置及可存储介质 | |
CN107329809B (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 |
Application publication date: 20190521 |
|
RJ01 | Rejection of invention patent application after publication |