CN111949424A - 一种处理声明式事件的队列的实现方法 - Google Patents
一种处理声明式事件的队列的实现方法 Download PDFInfo
- Publication number
- CN111949424A CN111949424A CN202010988989.7A CN202010988989A CN111949424A CN 111949424 A CN111949424 A CN 111949424A CN 202010988989 A CN202010988989 A CN 202010988989A CN 111949424 A CN111949424 A CN 111949424A
- Authority
- CN
- China
- Prior art keywords
- event
- processing
- queue
- events
- repeater
- 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 26
- 230000007704 transition Effects 0.000 claims abstract description 9
- 230000003111 delayed effect Effects 0.000 claims description 6
- 238000004140 cleaning Methods 0.000 claims description 2
- 230000003247 decreasing effect Effects 0.000 claims description 2
- 230000001934 delay Effects 0.000 abstract description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明涉及云平台事件处理领域,具体是一种处理声明式事件的队列的实现方法,包括如下步骤:S1、创建一个队列,当事件加入队列前先经过去重器进行检查,去重器只允许未存在的事件加入队列中;S2、队列中以堆的方式将多个事件按照优先级顺序排列;S3、通过限速器控制处理器从队列中获取事件的频率;S4、处理器对事件进行状态迁移处理,若处理成功,则清除去重器中对于该事件的引用并进行下一事件状态迁移处理,若处理失败,则处理器处理失败的事件经过退避器记录失败次数、降低优先级和延迟处理时间后重新加入去重器;解决了现有流程将失败事件返回队列当作正常事件继续处理,造成的重复处理、过载处理、失败事件正常事件并发处理的问题。
Description
技术领域
本发明涉及云平台事件处理技术领域,具体是指一种处理声明式事件的队列的实现方法。
背景技术
目前一个云平台要实现资源的当前状态向期望状态转移的现有流程如下所示:
步骤一、查询获取指定资源的当前状态,放入待处理队列;步骤二、从队列中获取待处理事件,对比当前状态与期望状态之间的差距;步骤三、根据差距处理资源的变更;步骤四、如果处理成功则结束对该资源的处理;步骤五、如果处理失败则继续根据状态差距继续进行处理。
对于上述现有流程存在如下技术问题:
1.如果队列中已经存在了一个资源的状态变更事件,当前一个事件没有处理完,又收到另一个相同资源的事件时,会重复处理它们,特别的,当云平台负载较大时,会导致很多计算资源都重复浪费掉;
2.云平台中获取队列的组件与处理队列中资源变更的组件通常是异步进行的,当处理速率不一致时,会导致从队列中取的速度很快,但是处理资源变更的组件进行得很慢,从而使系统堆积大量阻塞的线程,其又会进一步导致系统处理速度降低;
3.当从队列中获取了一个资源的变更事件后,但是处理失败了,该事件通常会重复进入队列,如果云平台负载较大,会导致大量处理失败了的事件重复入队,从而影响正常入队的事件,使得整个云平台处理效率降低。
4.由于获取队列的组件与处理队列中资源变更的组件通常是异步进行的,在高并发情况下,会出现同一资源的两个事件都在处理,这会使得云平台中资源的状态不一致而产生错误。
发明内容
基于以上问题,本发明提供了一种处理声明式事件的队列的实现方法,解决了现有流程将失败事件返回队列当作正常事件继续处理,造成的重复处理、过载处理、失败事件正常事件并发处理的问题。
为解决以上技术问题,本发明采用的技术方案如下:
一种处理声明式事件的队列的实现方法,包括如下步骤:
S1、创建一个队列,当事件加入队列前先经过去重器进行检查,去重器只允许未存在的事件加入队列中;
S2、队列中以堆为数据结构,将多个事件按照优先级顺序排列;
S3、通过限速器控制处理器从队列中获取事件的间隔时间和数量;
S4、处理器对事件进行状态迁移处理,若处理成功,则清除去重器中对于该事件的引用并进行下一事件状态迁移处理,若处理失败,则处理器处理失败的事件经过退避器记录失败次数、降低优先级和延迟处理时间后重新加入去重器。
进一步,所述步骤S1中,事件经过去重器前利用生成函数对事件生成一个唯一key标识,去重器对该唯一key标识进行检查,若去重器中未记录该唯一key标识,则事件正常加入队列,并且在去重器中记录该唯一key标识,若去重器记录了该唯一key标识,则将该带有唯一key标识的新事件覆盖原相同唯一key标识的旧事件。
进一步,所述去重器有一个线程安全的map数据结构。
进一步,所述限速器由一个计时器每隔预设时间从队列中获取预设数量的事件返还给处理器。
进一步,所述步骤S4中,所述处理失败的事件经过退避器利用二进制指数退避算法进行失败次数计数,随着失败次数的增多,该失败事件的优先级相应降低,延后处理时间。
进一步,所述二进制指数退避算法为该处理失败的事件经过退避器的次数为n,优先级降低,延后处理时间为m,n和m满足公式:m=2*n。
进一步,所述处理失败的事件被处理器成功处理后,调用清理函数处理退避器和去重器中对该处理失败的事件的引用。
与现有技术相比,本发明的有益效果是:
1.通过去重器的设置,减少了对同一事件的重复处理,极大的提升了整个云平台的运转效率,且队列中以堆的方式将多个事件按照优先级顺序排列,可以整体提升对事件的处理速度;
2.队列和处理器之间增设限速器,可以保证在异步条件下,从队列中取出的事件不会超过预设数量,从而保证系统不会超负荷运作,有效避免了系统被过多请求压垮的情况;
3.对处理失败的事件通过退避器处理,保证正常加入队列的事件与处理失败的事件区分开,在获取事件时,不会因为有处理失败的事件影响正常事件的处理,增加了处理效率;
4.获取队列的组件变为限速器,处理器与限速器的异步进行,避免了在高并发情况下,同一资源的两个事件都在处理,提升了系统的鲁棒性。
附图说明
图1为本发明的流程图。
具体实施方式
下面结合附图对本发明作进一步的说明。本发明的实施方式包括但不限于下列实施例。
如图1所示,一种处理声明式事件的队列的实现方法,包括如下步骤:
S1、创建一个队列,当事件加入队列前先经过去重器进行检查,去重器只允许未存在的事件加入队列中;
创建队列时,需要指定队列的容量,限速速率以及每个队列中事件唯一key标识的生成方法,其中,利用生成函数对事件生成一个唯一key标识,去重器为事件加入队列前的一段检查逻辑,用来根据唯一key标识判断队列中是否已经存在相同的事件,为了加快对唯一key标识的查询,去重器有一个线程安全的map数据结构。
当事件经过去重器时,去重器对该唯一key标识进行检查,若去重器中未记录该唯一key标识,则事件正常加入队列,并且在去重器中记录该唯一key标识,若去重器记录了该唯一key标识,则将该带有唯一key标识的新事件覆盖原相同唯一key标识的旧事件,通过去重器达到队列去重的目的,使得每个资源的事件在队列中只被处理一次,极大提升了整个云平台的运转效率。
S2、队列中以堆为数据结构,将多个事件按照优先级顺序排列;
队列是由堆这种数据结构实现的优先队列,对于优先级高的事件会处于队首,如出现步骤S1中带有唯一key标识的新事件覆盖原相同唯一key标识的旧事件时,队列的事件将进行再次排序,使优先级高的事件排在队首。
S3、通过限速器控制处理器从队列中获取事件的间隔时间和数量;
限速器由一个计时器每隔预设时间从队列中获取预设数量的事件返还给处理器,其中,预设时间和预设数量是由步骤S1创建队列时,指定限速速率参数决定,处理器间接通过限速器获取事件,从而限制了获取队列的组件与处理队列中资源变更的组件的线程数量,保证在异步条件下,一段时间内取出的事件不会超过预设数量,进而保证系统不会超负荷运转,并且获取队列的组件变为限速器,处理器与限速器的异步进行,避免了在高并发情况下,同一资源的两个事件都在处理,提升了系统的鲁棒性。
S4、处理器对事件进行状态迁移处理,若处理成功,则清除去重器中对于该事件的引用并进行下一事件状态迁移处理,若处理失败,则处理器处理失败的事件经过退避器记录失败次数、降低优先级和延迟处理时间后重新加入去重器;
新增退避器对处理失败的事件进行一个退避处理,可以保证正常加入队列的事件与处理失败的事件进行区分,不会因为有重复失败的事件影响正常事件的处理,增加了云平台处理效率。
处理失败的事件经过退避器利用二进制指数退避算法进行失败次数计数,随着失败次数的增多,该失败事件的优先级相应降低,延后处理时间,其中,二进制指数退避算法具体为该处理失败的事件经过退避器的次数为n,优先级降低,延后处理时间为m,n和m满足公式:m=2*n,例如,某事件处理器处理失败后,处理器将该处理失败的事件返还给去重器,该处理失败的事件在返还给去重器前会经过退避器,退避器对该事件进行计数,该事件失败1次,优先级-1,延后处理时间+2s,该事件失败2次,优先级-2,延后处理时间+4s,以此类推,同时,带有唯一key标识的该处理失败的事件带着降低的优先级和延后处理时间重新进入到去重器,去重器查询到相同唯一key标识,则用该带着降低优先级和延后处理时间的新事件覆盖该事件原有优先级和处理时间,即在相同唯一key标识的情况下,新事件覆盖原事件,覆盖过程触发队列的堆化,堆化过程对队列中的事件进行重新排序,使优先级高的事件排在队首。
如果处理失败的事件被处理器成功处理,则会调用清理函数处理退避器和去重器中对该处理失败的事件的引用。
如上即为本发明的实施例。上述实施例以及实施例中的具体参数仅是为了清楚表述发明人的发明验证过程,并非用以限制本发明的专利保护范围,本发明的专利保护范围仍然以其权利要求书为准,凡是运用本发明的说明书及附图内容所作的等同结构变化,同理均应包含在本发明的保护范围内。
Claims (7)
1.一种处理声明式事件的队列的实现方法,其特征在于,包括如下步骤:
S1、创建一个队列,当事件加入队列前先经过去重器进行检查,去重器只允许未存在的事件加入队列中;
S2、队列中以堆为数据结构,将多个事件按照优先级顺序排列;
S3、通过限速器控制处理器从队列中获取事件的间隔时间和数量;
S4、处理器对事件进行状态迁移处理,若处理成功,则清除去重器中对于该事件的引用并进行下一事件状态迁移处理,若处理失败,则处理器处理失败的事件经过退避器记录失败次数、降低优先级和延迟处理时间后重新加入去重器。
2.根据权利要求1所述的一种处理声明式事件的队列的实现方法,其特征在于:所述步骤S1中,事件经过去重器前利用生成函数对事件生成一个唯一key标识,去重器对该唯一key标识进行检查,若去重器中未记录该唯一key标识,则事件正常加入队列,并且在去重器中记录该唯一key标识,若去重器记录了该唯一key标识,则将该带有唯一key标识的新事件覆盖原相同唯一key标识的旧事件。
3.根据权利要求2所述的一种处理声明式事件的队列的实现方法,其特征在于:所述去重器有一个线程安全的map数据结构。
4.根据权利要求1所述的一种处理声明式事件的队列的实现方法,其特征在于:所述限速器由一个计时器每隔预设时间从队列中获取预设数量的事件返还给处理器。
5.根据权利要求1所述的一种处理声明式事件的队列的实现方法,其特征在于:所述步骤S4中,所述处理失败的事件经过退避器利用二进制指数退避算法进行失败次数计数,随着失败次数的增多,该失败事件的优先级相应降低,延后处理时间。
6.根据权利要求5所述的一种处理声明式事件的队列的实现方法,其特征在于:所述二进制指数退避算法为该处理失败的事件经过退避器的次数为n,优先级降低,延后处理时间为m,n和m满足公式:m=2*n。
7.根据权利要求6所述的一种处理声明式事件的队列的实现方法,其特征在于:所述处理失败的事件被处理器成功处理后,调用清理函数处理退避器和去重器中对该处理失败的事件的引用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010988989.7A CN111949424A (zh) | 2020-09-18 | 2020-09-18 | 一种处理声明式事件的队列的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010988989.7A CN111949424A (zh) | 2020-09-18 | 2020-09-18 | 一种处理声明式事件的队列的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111949424A true CN111949424A (zh) | 2020-11-17 |
Family
ID=73356881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010988989.7A Pending CN111949424A (zh) | 2020-09-18 | 2020-09-18 | 一种处理声明式事件的队列的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949424A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112817705A (zh) * | 2021-01-22 | 2021-05-18 | 京东方科技集团股份有限公司 | 信息发布方法、终端设备及信息发布系统 |
CN113010012A (zh) * | 2021-03-09 | 2021-06-22 | 湖北亿咖通科技有限公司 | 车载娱乐系统中虚拟角色的配置方法和计算机存储介质 |
CN116582501A (zh) * | 2023-05-10 | 2023-08-11 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9311139B1 (en) * | 2015-05-29 | 2016-04-12 | Flexera Software Llc | Batch processing of oversubscribed system based on subscriber usage patterns |
CN107423120A (zh) * | 2017-04-13 | 2017-12-01 | 阿里巴巴集团控股有限公司 | 任务调度方法及装置 |
CN109104336A (zh) * | 2018-09-27 | 2018-12-28 | 平安普惠企业管理有限公司 | 服务请求处理方法、装置、计算机设备及存储介质 |
CN109388503A (zh) * | 2018-09-20 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 一种事件处理方法及装置 |
US20190205221A1 (en) * | 2017-12-28 | 2019-07-04 | Lendingclub Corporation | Error handling for services requiring guaranteed ordering of asynchronous operations in a distributed environment |
CN110290217A (zh) * | 2019-07-01 | 2019-09-27 | 腾讯科技(深圳)有限公司 | 数据请求的处理方法及装置、存储介质及电子装置 |
CN110297711A (zh) * | 2019-05-16 | 2019-10-01 | 平安科技(深圳)有限公司 | 批量数据处理方法、装置、计算机设备及存储介质 |
CN110427257A (zh) * | 2019-07-29 | 2019-11-08 | 招商局金融科技有限公司 | 多任务调度方法、装置及计算机可读存储介质 |
-
2020
- 2020-09-18 CN CN202010988989.7A patent/CN111949424A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9311139B1 (en) * | 2015-05-29 | 2016-04-12 | Flexera Software Llc | Batch processing of oversubscribed system based on subscriber usage patterns |
CN107423120A (zh) * | 2017-04-13 | 2017-12-01 | 阿里巴巴集团控股有限公司 | 任务调度方法及装置 |
US20190205221A1 (en) * | 2017-12-28 | 2019-07-04 | Lendingclub Corporation | Error handling for services requiring guaranteed ordering of asynchronous operations in a distributed environment |
CN109388503A (zh) * | 2018-09-20 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 一种事件处理方法及装置 |
CN109104336A (zh) * | 2018-09-27 | 2018-12-28 | 平安普惠企业管理有限公司 | 服务请求处理方法、装置、计算机设备及存储介质 |
CN110297711A (zh) * | 2019-05-16 | 2019-10-01 | 平安科技(深圳)有限公司 | 批量数据处理方法、装置、计算机设备及存储介质 |
CN110290217A (zh) * | 2019-07-01 | 2019-09-27 | 腾讯科技(深圳)有限公司 | 数据请求的处理方法及装置、存储介质及电子装置 |
CN110427257A (zh) * | 2019-07-29 | 2019-11-08 | 招商局金融科技有限公司 | 多任务调度方法、装置及计算机可读存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112817705A (zh) * | 2021-01-22 | 2021-05-18 | 京东方科技集团股份有限公司 | 信息发布方法、终端设备及信息发布系统 |
CN113010012A (zh) * | 2021-03-09 | 2021-06-22 | 湖北亿咖通科技有限公司 | 车载娱乐系统中虚拟角色的配置方法和计算机存储介质 |
CN116582501A (zh) * | 2023-05-10 | 2023-08-11 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
CN116582501B (zh) * | 2023-05-10 | 2024-02-09 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111949424A (zh) | 一种处理声明式事件的队列的实现方法 | |
US20150169621A1 (en) | Storage method and apparatus for distributed file system | |
US10884667B2 (en) | Storage controller and IO request processing method | |
CN108334396B (zh) | 一种数据处理方法和装置、资源组的创建方法和装置 | |
CN112463066B (zh) | 一种控制分布式块存储逻辑卷突发服务质量的方法和设备 | |
US20240129251A1 (en) | Data processing method and apparatus, computer device, and readable storage medium | |
CN107038482A (zh) | 应用于ai算法工程化、系统化的分布式框架 | |
CN117633116A (zh) | 数据同步方法、装置、电子设备及存储介质 | |
CN109298976A (zh) | 一种异构数据库集群备份系统及方法 | |
CN110377398A (zh) | 一种资源管理方法、装置及主机设备、存储介质 | |
US20220335047A1 (en) | System and method for dynamic memory allocation for query execution | |
CN112995051B (zh) | 网络流量恢复方法及装置 | |
CN116991562B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110888739B (zh) | 延迟任务的分布式处理方法与装置 | |
CN107958414B (zh) | 一种清除cics系统长交易的方法及系统 | |
CN110704223A (zh) | 一种数据库单节点异常的恢复系统和方法 | |
CN113448647B (zh) | 资源同步方法、实现设备及电子设备 | |
CN115794446A (zh) | 一种消息处理方法、装置、电子设备和存储介质 | |
US20230318908A1 (en) | Method for Handling Large-Scale Host Failures on Cloud Platform | |
CN109933436B (zh) | 处理方法和处理装置 | |
WO2020140623A1 (zh) | 电子装置、元数据处理方法和计算机可读存储介质 | |
CN113010278A (zh) | 一种用于财险核心系统的批处理方法及系统 | |
CN107844590B (zh) | 小文件迁移方法、装置、设备及计算机可读存储介质 | |
CN106484725B (zh) | 一种数据处理方法、装置和系统 | |
CN110851263A (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: 20201117 |