一种业务延迟方法、装置、计算机设备和存储介质

文档序号:1963595 发布日期:2021-12-14 浏览:10次 >En<

阅读说明:本技术 一种业务延迟方法、装置、计算机设备和存储介质 (Service delay method, device, computer equipment and storage medium ) 是由 王海勇 陈愿 储亮 王泽� 王杰 于 2021-09-17 设计创作,主要内容包括:本申请涉及一种业务延迟方法、装置、计算机设备和存储介质。方法包括:准备延迟容器,初始化容错标识;执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,形成可延迟列表;遍历延迟容器的可延迟列表,依次执行可延迟业务。本发明在能够解决问题的同时,能够避免对原有业务产生巨大改动,并且通过封装和容错处理,使得业务使用中能做到安枕无忧。(The application relates to a service delay method, a service delay device, computer equipment and a storage medium. The method comprises the following steps: preparing a delay container and initializing a fault-tolerant identifier; executing service logic, traversing each service, and storing the delay-able service into a delay container to form a delay-able list; and traversing the delay container delay list and executing delay service in turn. The invention can solve the problems, avoid great change to the original service, and realize easy rest in service use through packaging and fault-tolerant processing.)

一种业务延迟方法、装置、计算机设备和存储介质

技术领域

本申请涉及业务开发的技术领域,特别是涉及一种业务延迟方法、装置、计算机设备和存储介质。

背景技术

现有技术在如下场景上存在问题:

场景一:数据库和缓存数据一致性

以订单为例,当订单创建的时候,往往要将订单数据缓存到Redis中,而如果存表的事务未提交,而缓存成功,在后续的操作中又因为数据库事务整体异常回滚,导致缓存不一致的问题。

场景二:数据库事务未及时提交引起脏数据

在数据下发的场景中,要将数据保存到下发表,通过消息队列异步发送给外围,当接收到回执以后,再将数据删除。这时就有可能会出现,存表事务未提交,而下游系统处理速度很快,立即反馈回执。由于前面事务没提交,导致后面的删除操作没有真正删除数据。这样,当原先数据库事务提交后,就会产生了垃圾数据。这类数据其实是已经下发了的数据,而在维护的人员看来,下游可能没有收到该数据,需要手动重新发送一次。

场景三:上下游数据不一致

在业务处理过程中,需要与其他系统交互,这种交互有状态通知,数据分发等等。在将数据保存到数据库中时,如果事务没有提交,就将数据往外围发送,此时,外围系统收到消息,而我=自身系统因为数据库事务回滚导致业务没有成功。这种场景,就会对整条业务链路造成数据不一致的问题,影响大的情况下可能会波及多个系统。

针对上述问题,目前主流的做法是:为了保证数据库事务回滚的完整性,将非事务的业务逻辑挪到数据库事务之外,当数据库事务成功以后,再执行非数据库事务操作,如果事务失败,则停止执行后续逻辑。

然而上述做法存在如下的缺陷与不足:

1.业务逻辑:在业务中,往往数据库操作和业务操作是成对出现的,比如存入数据库和存入缓存应该是一对操作。假如将存库和存缓存的逻辑分开,则很可能导致业务逻辑割裂,代码不流畅。

2.参数传递:一组数据在存入数据库时,往往需要执行其他的业务逻辑,而单独执行数据库操作,在参数传递上,可能需要有很长的传递链路。

3.业务改造:往往事务和非事务的数据一致性,在正常的业务流程中会被忽略,出现不一致的情况很多时候是因为异常或者并发。因此在业务开发过程中没有注意到对该场景进行事先规划,导致出现问题后,改造代价很大。

发明内容

本发明旨在解决事务和非事务数据一致性的问题。基于此,有必要针对上述技术问题,从后端业务开发或者架构角度,提供一种业务延迟方法、装置、计算机设备和存储介质。

一种业务延迟方法,该方法包括:

准备延迟容器,初始化容错标识。

执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,形成可延迟列表。

遍历延迟容器的可延迟列表,依次执行可延迟业务。

在一个实施例中,初始化容错标识,包括:将延容错标识修改为已初始化,关闭延容错机制,正常执行功能。

在一个实施例中,执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,包括:

将业务区分为可延迟业务和不可延迟业务,不改变业务逻辑顺序,依次执行每个业务,执行至可延迟业务时,将可延迟业务存放到延迟容器中,直至所有不可延迟业务执行完。

在一个实施例中,所有不可延迟业务执行完后,提交数据库事务,然后再遍历延迟容器的可延迟列表,依次执行可延迟业务。

在一个实施例中,不可延迟业务属于数据库操作,可延迟业务属于非数据库操作,可延迟业务和不可延迟业务相互关联。

在一个实施例中,调用add方法,在可延迟业务位置,将原有代码片段改成匿名内部类。

一种业务延迟装置,该设备包括:

初始化模块,用于准备延迟容器,初始化容错标识。

第一执行模块,用于执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,形成可延迟列表。

第二执行模块,用于遍历延迟容器的可延迟列表,依次执行可延迟业务。

在一个实施例中,第一执行模块将业务区分为可延迟业务和不可延迟业务,不改变业务逻辑顺序,依次执行每个业务,执行至可延迟业务时,将可延迟业务存放到延迟容器中,直至所有不可延迟业务执行完。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例所述方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所述的方法的步骤。

上述业务延迟方法、装置、计算机设备和存储介质,具体有以下技术效果:

避免故障:可以有效避免数据库事务数据和非数据库事务数据的不一致问题,从而避免此原因产生的业务故障。

减少异常:通过减少异常数据的产生,避免系统本身以及上下游因为数据不一致而产生各种异常。

降本增效:数据不一致问题,往往是由苛刻的条件和高并发产生,在生产上很难定位原因,一旦发现有这样的情况发生,经常会需要产品,测试,开发各方人员去排查原因。使用上述技术方案,可以直接避免该情况的发生,避免不必要的人员消耗。。

附图说明

图1为一个实施例中一种业务延迟方法的应用环境图;

图2为一个实施例中一种业务延迟方法的流程示意图;

图3为一个实施例中一种业务延迟方法的业务流程示意图;

图4为一个实施例中一种业务延迟方法的数据相关性示意图;

图5为一个实施例中一种业务延迟方法的业务逻辑执行示意图;

图6为一个实施例中一种业务延迟方法的可延迟业务执行示意图;

图7为一个实施例中一种业务延迟装置的结构框图;

图8为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的一种业务延迟方法,可以应用于如图1所示的应用环境中。其中,数据源终端20通过网络30与数据库设备10通过进行网络通信。数据源终端20可以为多个,用于向数据库设备10上传多种数据。其中,数据源终端20可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。此外,数据管理设备40与数据库设备10 网络通信,用于向数据库设备10发送数据处理指令。

在一个实施例中,如图2所示,提供了一种业务延迟方法,以该方法应用于图1中的数据库设备10为例进行说明,采用延迟组件,包括以下步骤:

S100、准备延迟容器,初始化容错标识。

在本实施例中,将延迟容器准备好,将延迟组件的容错标识修改为已初始化,关闭延迟组件的容错机制,正常执行既定功能。

S200、执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,形成可延迟列表。

在本实施例中,业务区分为可延迟业务和不可延迟业务,不可延迟业务属于数据库操作,可延迟业务属于非数据库操作,可延迟业务和不可延迟业务相互关联。不改变原有的业务逻辑顺序,依次执行每个业务,执行至可延迟业务时,将可延迟业务存放到延迟容器中,直至所有不可延迟业务执行完。在原业务执行完时,将数据库事务提交。而被延迟的业务逻辑并没有被执行。

这样做,对于相互关联的可延迟业务和不可延迟业务,在代码结构上保证没有变化,参数能够及时被用上,不至于业务数据割裂。而延迟容器则成为了业务桥梁。

S300、遍历延迟容器的可延迟列表,依次执行可延迟业务。

在本实施例中,所有不可延迟业务执行完后,提交数据库事务,然后再遍历延迟容器的可延迟列表,依次执行可延迟业务。

在一个实施例中,需要对原有代码进行改造,延迟组件会定义出统一入口,将原代码入口无改动的交给该入口,即可被延迟组件纳入管理。同时,在原有可延迟业务的位置,业务延迟方法会调用add()方法,将原有代码片段改成匿名内部类即可。

在一个实施例中,延迟组件对外仅仅提供两个api:handle()和add()。 handle()方法里面执行了初始化,调用业务逻辑,和调用延迟业务的功能。 add()则负责在将可延迟业务加到延迟列表中。上述两个方法对外屏蔽细节实现,保证了延迟组件的简洁。

延迟组件内部通过静态方法,保证调用方便,结合ThreadLocal,保证传参和代码引用灵活自由。

在一个实施例中,业务在handle()中执行。但是没有将需要延迟的功能通过add()方法添加到延迟列表中,该情况,等于没有使用组件提供的延迟功能,但对于原有业务没有影响。

在一个实施例中,业务没有在handle()中执行。但是调用了add()方法。此时,由于handle()方法没有被掉用,因此组件没有被初始化,add() 方法在执行时,根据初始化标识判断,此时该直接执行原语句,而不是加到列表中,因此对于原有业务没有影响。

应该理解的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,附图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,以具体业务流程做具体说明。如图3的业务流程所示,在常规延迟业务(DeferrableService)中,包含业务1、业务2、业务 3、业务4、业务5、业务6、……、业务2n-1、业务2n。其中,业务1、 3、5、……、2n-1属于数据库操作(DbOpration),而业务2、4、6、……、 2n属于非数据库操作(Deferrable)。优选地,业务1和2、业务3和4、业务5和6、……、业务2n-1和2n又相互关联。

如图4的数据相关性所示,业务1和2使用相同的数据(Data1)、业务3和4使用相同的数据(Data2)、业务5和6使用相同的数据 (Data3)、……、业务2n-1和2n使用相同的数据(Datan)。

因此,为了解决事务和非事务一枝性问题,需要改变其执行顺序,先执行业务1、3、5……、2n-1操作并提交事务。同时,在数据库整体完成后提交数据库事务,然后执行业务2、4、6……、2n。

如图5的业务执行逻辑所示,不改变业务逻辑顺序,将可延迟的业务 2、4、6、……、2n存放到延迟容器(context)的可延迟列表中,在原业务执行完时,将数据库事务提交。而被延迟的业务2、4、6、……、2n并没有被执行。这样做,业务1和2、业务3和4、业务5和6、……、业务 2n-1和2n,其在代码结构上保证没有变化,参数能够及时被用上,不至于业务数据割裂,延迟容器则成为了桥梁。

如图6的可延迟业务执行逻辑所示,再对延迟容器的可延迟列表中的业务2、4、6、……、2n进行遍历,依次执行。

优选地,在常规业务中也可以仅包含业务1(保存订单)、业务2(缓存订单)、业务3(保存下发表)、业务4(下发订单),业务1和2使用相同的订单信息数据(Data1)、业务3和4使用相同的下发数据(Data2)。

在一个实施例中,上述业务延迟方法可用于以下场景:订单、商品、配置等数据的数据库和缓存的数据一致性问题。

在一个实施例中,上述业务延迟方法可用于以下场景:数据发送外围系统成功,收到回执后删除数据,但保存数据的事务还未提交造成数据未下发的假象,形成脏数据。

在一个实施例中,上述业务延迟方法可用于以下场景:数据下发成功,但是本地事务回滚。

本发明的业务延迟方法,是一种有效的、适用面非常广、并且易于推广的解决数据库事务和非数据库事务数据一致性的解决方案。在能够解决问题的同时,能够避免对原有业务产生巨大改动,并且通过封装和容错处理,使得业务使用中能做到安枕无忧。

在一个实施例中,如图7所示,提供了一种业务延迟装置,包括:初始化模块100、第一执行模块200和第二执行模块300,其中:

初始化模块100,用于准备延迟容器,初始化容错标识。

第一执行模块200,用于执行业务逻辑,遍历每个业务,将可延迟业务存放到延迟容器中,形成可延迟列表。

第二执行模块300,用于遍历延迟容器的可延迟列表,依次执行可延迟业务。

在一个实施例中,第一执行模块200将业务区分为可延迟业务和不可延迟业务,不改变业务逻辑顺序,依次执行每个业务,执行至可延迟业务时,将可延迟业务存放到延迟容器中,直至所有不可延迟业务执行完。

关于业务延迟装置的具体限定可以参见上文中对于业务延迟方法的限定,在此不再赘述。上述业务延迟装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是数据管理服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的数据源终端通过网络连接通信,以接收数据源终端上传的数据。该计算机程序被处理器执行时以实现业务延迟方法。

本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述业务延迟方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM) 或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

本发明的业务延迟方法、装置、计算机设备和存储介质,提供了一种能够解决事务和非事务数据一致性的方法,从功能性上,本发明可以切实解决事务和非事务数据一致性的问题。从普遍性上,本发明解决的此类问题存在于各行各业的业务中,是普遍存在的问题。从简洁性上,如果要彻底对所有业务都严格进行改造,使用传统方案,其代价是非常大的,本发明能够最大程度上对简化改造的难度。从容错性上,本发明能在出现事务和非事务一致性问题的时,在改造的过程中,不会引入新的问题,即便是因为开发过程中,调用组件方式错误,也不会导致业务问题。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种分布式存储系统的异常处理方法、系统及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!