一种基于事件补偿机制的数据最终一致性办法的制作方法

文档序号:17719920发布日期:2019-05-22 02:05阅读:729来源:国知局
一种基于事件补偿机制的数据最终一致性办法的制作方法

本发明涉及分布式系统微服务架构技术领域,特别涉及一种基于事件补偿机制的数据最终一致性办法。



背景技术:

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务有一个特点是可以在“自己的程序”中运行,并通过“轻量级设备与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)收到两者响应事件后,根据事件消息内容得知两者都执行成功,将订单状态置为订单已创建。

该基于事件补偿机制的数据最终一致性办法,通过在设计阶段自动建立发布订阅关系、事件响应关系、事件取消关系,降低了配置的技术难度,减少了最终用户的配置的工作量;在事件发布端,通过事件日志和业务数据在同一个事务内,保证了发送事件与业务数据的事务一致性,同时保证了事件数据不会丢失;在运行阶段,通过各种发布订阅关系实现了自动响应、自动确认或取消、自动发送取消事件,无需人为设置。

以上对本发明实例中的一种基于事件补偿机制的数据最终一致性办法进行了详细的介绍。本部分采用具体实例对发明的原理及实施方式进行了阐述,以上实例仅用于帮助理解本发明的核心思想,在不脱离本发明原理的情况下,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1