CN113886032A - 事件调度方法、装置、电子设备及存储介质 - Google Patents
事件调度方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113886032A CN113886032A CN202111031604.9A CN202111031604A CN113886032A CN 113886032 A CN113886032 A CN 113886032A CN 202111031604 A CN202111031604 A CN 202111031604A CN 113886032 A CN113886032 A CN 113886032A
- Authority
- CN
- China
- Prior art keywords
- target
- event
- preset
- node
- consumption node
- 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
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/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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开关于一种事件调度方法、装置、电子设备及存储介质,该方法包括:响应于目标事件的发布请求,确定与目标事件的事件类型对应的目标主题;根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从一个或多个预设消费节点中确定出目标事件对应的目标消费节点;预设消费节点对应的消息分区由预设消费节点在相应的主题中注册得到,相应的主题表征预设消费节点的事件类型所对应的主题,预设消费节点的事件类型表征预设消费节点能够处理的事件所对应的事件类型;发布目标事件至目标消费节点对应的目标消息分区。本公开实施例提供的技术方案在目标事件发出的时候,已经决定了目标消费节点,有利于提高调度系统的吞吐量。
Description
技术领域
本公开涉及互联网技术领域,尤其涉及一种事件调度方法、装置、电子设备及存储介质。
背景技术
相关技术中,通过分布式任务调度平台(XXL-JOB)进行任务调度,该XXL-JOB包括调度中心和执行器,该调度中心用于向该执行器发送携带待处理任务的调度请求,该执行器用于接收该调度请求,并执行该待处理任务。
然而该执行器在接收到该待处理任务后,会先将该待处理任务写入数据库,然后通过抢夺数据库锁的形式来确定执行该待处理任务的消费节点。上述通过抢夺数据库锁确定消费节点的方式,在待处理任务的数量较多的情况下,会使得待处理任务写入数据库的过程处于排队状态,从而降低分布式任务调度系统的吞吐量。
发明内容
本公开提供一种事件调度方法、装置、电子设备及存储介质,以至少解决相关技术中的分布式任务调度系统的吞吐量较低的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种任务事件调度方法,包括:
响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;
根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
发布所述目标事件至所述目标消费节点对应的目标消息分区。
在一示例性的实施方式中,所述根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点,包括:
从所述一个或多个预设消费节点中,确定出在所述目标主题中已注册消息分区的预设数量个候选消费节点;
根据每个候选消费节点对应的消息分区中的当前消息的数量,确定所述每个候选消费节点对应的消息分区的当前负载量;
将当前负载量小于预设负载阈值的候选消费节点,作为所述目标消费节点。
在一示例性的实施方式中,所述方法还包括:
接收所述目标消费节点发送的重新发布指令,所述重新发布指令由所述目标消费节点在响应于异常通知时所发送,所述异常通知由缓存服务器在心跳数据出现异常时发送至所述目标消费节点;所述心跳数据由所述目标消费节点以预设频率发送至所述缓存服务器;
响应于所述重新发布指令,发布所述目标事件至除所述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,所述方法还包括:
接收所述目标消费节点发送的所述目标事件对应的未订阅成功通知,所述未订阅成功通知用于表征所述目标消费节点未存储所述目标事件的事件执行状态至预设数据库;
响应于所述未订阅成功通知,重新发布所述目标事件至所述目标消息分区。
根据本公开实施例的第二方面,提供一种事件调度方法,包括:
从本地消费节点对应的目标消息分区中获取目标事件;所述目标事件由任务发布服务器发布至所述对应的目标消息分区;所述本地消费节点由所述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定得到;所述目标主题由所述任务发布服务器响应于目标事件的发布请求而确定,所述目标主题与所述目标事件的事件类型相对应;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
处理所述目标事件。
在一示例性的实施方式中,所述方法还包括:
以预设频率发送心跳数据至缓存服务器;
接收所述缓存服务器在所述心跳数据出现异常时返回的所述目标消费节点的异常通知;
响应于所述异常通知,发送重新发布指令至所述任务发布服务器,所述重新发布指令指示发布所述目标事件至除所述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,在所述从本地消费节点对应的目标消息分区中获取目标事件之后,所述方法还包括:
存储所述目标事件的事件执行状态至预设数据库;
发送所述目标事件对应的订阅成功通知至所述任务发布服务器。
在一示例性的实施方式中,所述方法还包括:
在未存储所述事件执行状态至所述预设数据库的情况下,发送所述目标事件对应的未订阅成功通知至所述任务发布服务器。
在一示例性的实施方式中,在所述从本地消费节点对应的目标消息分区中获取目标事件之后,所述方法还包括:
确定处理所述目标事件所需的目标负载量;
发送所述目标负载量至缓存服务器。
在一示例性的实施方式中,在所述存储所述目标事件的事件执行状态至预设数据库之后,所述方法还包括:
发送负载更新指令至所述缓存服务器,所述缓存服务器中记录有所述一个或多个预设消费节点各自对应的消息分区的当前负载量,所述负载更新指令指示基于所述目标负载量,更新所述目标消息分区的当前负载量。
根据本公开实施例的第三方面,提供一种事件调度系统,包括:任务发布服务器和目标消费节点:
所述任务发布服务器,用于响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;以及用于根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;以及用于发布所述目标事件至所述目标消费节点对应的目标消息分区;
所述目标消费节点,用于从所述对应的目标消息分区中获取所述目标事件;以及用于处理所述目标事件。
根据本公开实施例的第四方面,提供一种任务事件调度装置,包括:
发布请求响应模块,被配置为执行响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;
目标消费节点确定模块,被配置为执行根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
发布模块,被配置为执行发布所述目标事件至所述目标消费节点对应的目标消息分区。
在一示例性的实施方式中,所述目标消费节点确定模块,包括:
候选消费节点确定单元,被配置为执行从所述一个或多个预设消费节点中,确定出在所述目标主题中已注册消息分区的预设数量个候选消费节点;
当前负载量确定单元,被配置为执行根据每个候选消费节点对应的消息分区中的当前消息的数量,确定所述每个候选消费节点对应的消息分区的当前负载量;
目标消费节点确定单元,被配置为执行将当前负载量小于预设负载阈值的候选消费节点,作为所述目标消费节点。
在一示例性的实施方式中,所述装置还包括:
重新发布指令接收模块,被配置为执行接收所述目标消费节点发送的重新发布指令,所述重新发布指令由所述目标消费节点在响应于异常通知时所发送,所述异常通知由缓存服务器在心跳数据出现异常时发送至所述目标消费节点;所述心跳数据由所述目标消费节点以预设频率发送至所述缓存服务器;
重新发布指令响应模块,被配置为执行响应于所述重新发布指令,发布所述目标事件至除所述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,所述装置还包括:
未订阅成功通知接收模块,被配置为执行接收所述目标消费节点发送的所述目标事件对应的未订阅成功通知,所述未订阅成功通知用于表征所述目标消费节点未存储所述目标事件的事件执行状态至预设数据库;
未订阅成功通知响应模块,被配置为执行响应于所述未订阅成功通知,重新发布所述目标事件至所述目标消息分区。
根据本公开实施例的第五方面,提供一种事件调度装置,包括:
目标事件获取模块,被配置为执行从本地消费节点对应的目标消息分区中获取目标事件;所述目标事件由任务发布服务器发布至所述对应的目标消息分区;所述本地消费节点由所述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定得到;所述目标主题由所述任务发布服务器响应于目标事件的发布请求而确定,所述目标主题与所述目标事件的事件类型相对应;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
处理模块,被配置为执行处理所述目标事件。
在一示例性的实施方式中,所述装置还包括:
心跳数据发送模块,被配置为执行以预设频率发送心跳数据至缓存服务器;
异常通知接收模块,被配置为执行接收所述缓存服务器在所述心跳数据出现异常时返回的所述目标消费节点的异常通知;
异常通知响应模块,被配置为执行响应于所述异常通知,发送重新发布指令至所述任务发布服务器,所述重新发布指令指示发布所述目标事件至除所述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,所述装置还包括:
存储模块,被配置为执行存储所述目标事件的事件执行状态至预设数据库;
订阅成功通知发送模块,被配置为执行发送所述目标事件对应的订阅成功通知至所述任务发布服务器。
在一示例性的实施方式中,所述装置还包括:
未订阅成功通知发送模块,被配置为执行在未存储所述事件执行状态至所述预设数据库的情况下,发送所述目标事件对应的未订阅成功通知至所述任务发布服务器。
在一示例性的实施方式中,所述装置还包括:
目标负载量确定模块,被配置为执行确定处理所述目标事件所需的目标负载量;
目标负载量发送模块,被配置为执行发送所述目标负载量至缓存服务器。
在一示例性的实施方式中,所述装置还包括:
负载更新指令发送模块,被配置为执行发送负载更新指令至所述缓存服务器,所述缓存服务器中记录有所述一个或多个预设消费节点各自对应的消息分区的当前负载量,所述负载更新指令指示基于所述目标负载量,更新所述目标消息分区的当前负载量。
根据本公开实施例的第六方面,提供一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述任一实施方式所述的事件调度方法。
根据本公开实施例的第六方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备执行如上述任一实施方式所述的事件调度方法。
根据本公开实施例的第七方面,提供一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述任一实施方式所述的事件调度方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
本公开实施例在响应于目标事件的发布请求时,确定与该目标事件的事件类型对应的目标主题,接着根据该目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,确定用于消费该目标事件的目标消费节点,然后发布目标事件至该目标消息节点在目标主题中注册得到的目标消息分区中,由目标消费节点从该目标消息分区中获取该目标事件并对该目标事件进行处理。由于本公开并非是将目标事件直接发送给消费节点,而是基于将目标事件发布至在目标主题中的目标消息分区中,等待目标消息节点来处理,从而使得目标事件的触发和任务的执行完全解耦。此外,在响应于目标事件的发布请求的时候,可以直接根据该目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,确定用于消费该目标事件的目标消费节点,即在目标事件发出的时候,已经决定了消费该目标事件的目标消费节点,有利于提高系统的吞吐量。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种事件调度方法的应用环境图。
图2是根据一示例性实施例示出的一种事件调度方法的流程图。
图3是根据一示例性实施例示出的另一种事件调度方法的流程图。
图4是根据一示例性的实施例示出的一种对关联信息进行存储以及存储后向任务发布服务器发送通知的流程图。
图5是根据一示例性实施例示出的对目标事件进行重新发布的流程图。
图6是根据一示例性实施例示出的另一种事件调度方法的流程图。
图7是根据一示例性实施例示出的另一种事件调度方法的流程图。
图8是根据一示例性实施例示出的一种事件调度装置框图。
图9是根据一示例性实施例示出的另一种事件调度装置框图。
图10是根据一示例性实施例示出的一种用于事件调度的电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
请参阅图1,图1是根据一示例性实施例示出的一种事件调度方法的应用环境图。该应用环境可以包括任务发布服务器01、目标消费节点02和缓存服务器03。该目标消费节点02可以通过有线或无线的方式与任务发布服务器01和缓存服务器03进行通信,本公开对此不做限定。
其中,任务发布服务器01可以根据一个或多个预设消费节点各自对应的消息分区的负载量,选择目标消费节点,并将该目标事件发送至该目标消费节点对应的目标消息分区。可选地,该任务发布服务器01可以是包括独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
其中,该目标消费节点02可以用于从该目标消息分区中获取目标事件,并对该目标事件进行处理。可选地,该目标消费节点02可以是包括独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选地,该目标消费节点02还可以是客户端,该客户端可以包括智能手机、台式电脑、平板电脑、笔记本电脑等。
其中,该缓存服务器03可以用于接收目标消费节点02发送的心跳数据,并在目标消费节点的心跳数据出现异常时,发送目标消费节点的异常通知至目标消费节点02,目标消费节点02响应于该异常通知,发送重新发布指令至任务发布服务器01,该任务发布服务器01响应于该重新发布指令,发布该目标事件至除目标消费节点02之外的其他消费节点(即对该目标事件进行重新分配)。可选地,该缓存服务器03可以是包括独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
需要说明的是,图1仅仅是本公开提供的事件调度方法的一种应用环境,在实际应用中,还可以包括其他应用环境。
图2是根据一示例性实施例示出的一种事件调度方法的流程图。如图2所示,该事件调度方法用于图1中的包括任务发布服务器01和目标消费节点02的系统中,包括以下步骤。
在步骤S11中,任务发布服务器响应于目标事件的发布请求,确定与上述目标事件的事件类型对应的目标主题。
本公开实施例基于事件驱动架构(Event-Driven Architecture,EDA),可以将事件看作消息,消息发布者发送不同类型的事件至该事件类型对应的目标主题,消息订阅者接收其订阅的主题上的消息。具体地,任务事件可以是向上述任务发布服务器发送携带目标事件的发布请求,上述任务发布服务器可以响应于该发布请求,确定与该目标事件的事件类型对应的目标主题。
其中,EDA是一种用于设计应用的软件架构和模型。EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式。事件驱动架构由事件发起者和事件使用者组成。事件的发起者会检测或感知事件,并以消息的形式来表示事件。它并不知道事件的使用者或事件引起的结果。事件的发起者在检测到事件后,会将事件发送至事件通道,并通过该事件通道传输事件至事件使用者。
具体地,EDA可以基于发布/订阅模型,发布/订阅模型是基于事件流订阅的消息传递基础架构,发布/订阅模型可以包括消息发布者、消息主题和消息订阅者。其中,图1中的任务发布服务器01可以作为发布/订阅模型中的消息发布者,图1中的目标消费节点02可以作为发布/订阅模型中的消息订阅者。
其中,事件是指系统硬件或软件的状态出现任何重大改变。事件的来源可以是内部或外部输入。事件可以来自用户(例如点击鼠标或按键)、外部源(例如传感器输出)或系统(例如加载程序)。
其中,目标事件的事件类型为目标事件所属的类型。例如,若目标事件为计算事件,则事件类型为计算类;若目标事件为保存事件,则事件类型为保存类型。
事件类型与主题具有对应关系。一个实施例中,目标事件的事件类型可以为至少一个,相应地,目标事件可以对应至少一个目标主题。例如,若目标事件包括计算环节,则其事件类型为计算类型,目标主题为计算主题。若目标事件既包括计算环节,又包括保存环节,则其事件类型可以包括计算类型和保存类型,相应的目标主题可以包括计算主题和保存主题。
在步骤S13中,上述任务发布服务器根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型。
具体地,每个预设消费节点在注册的时候已经定义好了其能够处理什么类型的事件,相应的主题指的是预设消费节点所能够处理的事件的事件类型所对应的主题。假设,某一消费节点能够处理计算类型的事件,则对应的主题为计算主题。
在一个可选的实施例中,图3是根据一示例性实施例示出的另一种事件调度方法的流程图。如图3所示,在上述步骤S13中,上述任务发布服务器根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点,可以包括:
在步骤S1301中,上述任务发布服务器从上述一个或多个预设消费节点中,确定出在上述目标主题中已注册消息分区的预设数量个候选消费节点。预设数量可依据情况具体设置,例如1、3、5、100等,本方案不作限定。
在步骤S1303中,上述任务发布服务器根据每个候选消费节点对应的消息分区中的消息数量,确定上述每个候选消费节点各自对应的消息分区的当前负载量。
在步骤S1305中,上述任务发布服务器将当前负载量小于预设负载阈值的候选消费节点,作为上述目标消费节点。
本公开实施例中,消费者集群中的预设消费节点会预先在相应的主题下注册一个专属的消息分区(partition),一消费节点相应的主题为该消费节点的事件类型对应的主题,一消费节点注册的消息分区用于存放该消费节点对应的待处理的事件。例如,预设消费节点包括消费节点A、消费节点B和消费节点C,消费节点A和消费节点B的事件类型对应的主题均为计算主题,消费节点C的事件类型对应的主题为保存主题,则消费节点A和消费节点B相应的主题为计算主题,消费节点C相应的主题为保存主题,消费节点A和消费节点B分别在计算主题下注册专属的消息分区,消费节点C在保存主题下注册专属的消息分区。
在任务发布服务器确定目标主题之后,可以获取已经在该目标主题注册了消息分区的预设数量个候选消费节点,并根据各个候选消费节点各自对应的消息分区内的负载量,选择负载量小于预设负载阈值的候选节点作为目标消费节点,以通过该目标消费节点来处理该目标事件。其中,负载量用于描述消息分区的消息挤压情况,负载量越大,消息挤压情况越严重,负载量越小,消息挤压情况越轻微。假设,消费节点C、消费节点D和消费节点E均在该目标主题下注册了相应的消息分区,且消费节点C和消费节点D对应的消息分区内的负载量小于预设负载阈值,则将消费节点C和消费节点D作为目标消费节点。
需要说明的是,目标事件对应的目标消费节点的数量为至少一个。
可选地,任务发布服务器包括任务调度器,上述确定目标消费节点的过程可以由任务调度器来执行。
本公开实施例中,根据消费节点各自对应的消息分区内的负载情况,指派合适的目标消费节点来处理该目标事件,即在目标事件发出的时候,已经确定了处理该目标事件的目标消费节点,避免消费节点过度繁忙,实现任务消费的负载均衡。此外,当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要数据锁来将数据访问顺序化,以保证数据库数据的一致性,当有目标事件到来时,消费节点之间会相互竞争,抢夺该数据锁,并最终使用抢夺到该数据锁的消费节点处理该目标事件,但抢夺数据锁的方式在待处理任务的数量较多的情况下,会使得待处理任务写入数据库的过程处于排队状态,从而降低分布式任务调度系统的吞吐量,而本公开实施例在目标事件发出的时候,已经确定了处理该目标事件的目标消费节点,避免通过抢夺数据库锁的方式确定目标消费节点所带来的性能瓶颈,确保分布式任务调度系统的吞吐量。
在步骤S15中,上述任务发布服务器发布上述目标事件至上述目标消费节点对应的目标消息分区。
在一个可选的实施例中,在上述步骤S15中,上述任务发布服务器发布上述目标事件至上述目标消费节点对应的目标消息分区,可以包括:
上述任务发布服务器编码上述目标事件,得到目标消息;
上述任务发布服务器传送上述目标消息至消息队列;
上述任务发布服务器基于所述消息队列,发布上述目标消息至上述目标消息分区。
本公开实施例基于事件驱动架构,可以引入支持发布/订阅模型的消息队列(Message Queue,MQ),编码目标事件得到目标消息,传送该目标消息至MQ,当任务发布服务器决定让目标消费节点来处理该目标事件时,可以将基于MQ传送目标事件通至目标消费节点对应的目标消息分区。
可选地,任务调度服务器还可以包括编码发布消息模块,上述编码过程可以由该编码发布消息模块来执行。
本公开实施例基于事件驱动架构,引入支持发布/订阅模型的消息队列(MQ),将事件与任务的触发关系映射为主题消息的订阅关系,从而利用消息队列的来提升系统的吞吐量和可伸缩性。
在步骤S17中,上述目标消费节点从上述对应的目标消息分区中获取上述目标事件。
在一个可选的实施例中,当目标事件被编码成目标消息时,在上述步骤S17中,上述目标消费节点从上述对应的目标消息分区中获取上述目标事件,可以包括:
上述目标消费节点从上述目标消息分区中获取上述目标消息;
上述目标消费节点解码上述目标消息,得到上述目标事件。
具体地,目标事件被编码成目标消息时,目标消费节点从目标消息分区中获取上述目标消息之后,需要对其进行解码,得到目标事件,从而实现目标事件的获取和任务的触发。
在一个可选的实施例中,图4是根据一示例性的实施例示出的一种对事件执行状态进行存储以及存储后向任务发布服务器发送通知的流程图。如图4所示,在上述目标消费节点从上述对应的目标消息分区中获取上述目标事件之后,上述方法还可以包括:
在步骤S21中,上述目标消费节点存储上述目标事件的事件执行状态至预设数据库。
在步骤S23中,上述目标消费节点发送上述目标事件对应的订阅成功通知至上述任务发布服务器。
在另一个可选的实施例中,上述方法还可以包括:
在上述目标消费节点未存储上述事件执行状态至所述预设数据库的情况下,上述目标消费节点发送上述目标事件对应的未订阅成功通知至上述任务发布服务器。
上述任务发布服务器响应于上述未订阅成功通知,重新发布上述目标事件至上述目标消息分区。
可选地,事件执行状态可以包括目标事件是否被执行的状态、被谁执行、在哪个环节被执行等信息。具体地,事件执行状态可以包括但不限于:目标事件的发起者、目标事件对应的目标主题、目标事件对应的目标消费节点、目标事件在哪个环节被执行、待执行状态(即todo状态,为事件执行状态存储至预设数据库时的默认值)、实例处理中状态(即正在被目标消费节点处理中)、处理完成状态(即doing状态,已经被目标消费节点处理完毕)、处理失败状态(即failed状态,目标消费节点对其处理失败)、重新调度状态(即resechedule状态,由任务发布服务器重新进行发布)。
具体地,在目标消费节点将事件执行状态存储至数据库之后,可以向上述任务发布服务器发送目标事件的订阅成功通知。若目标消费节点对事件执行状态存储失败时,则可以向上述任务发布服务器发送未订阅成功通知。上述任务发布服务器在接收到未订阅成功通知之后,会传送上述目标事件至上述消息队列,任务发布服务器基于上述消息队列,重新发布上述目标事件至上述目标消息分区。
本公开实施例中,存储目标事件的事件执行状态至预设数据库,可以确保目标事件的不丢失。且当目标事件被存储至预设数据库之后,任务发布服务器不会再将其分配给其他消费节点,避免了同一事件被不同消费节点重复消费的问题,从而降低了系统资源的消耗;此外,当目标事件未被存储至预设数据库的情况下,目标消费节点可以向该任务发布服务器发送未订阅成功的通知,任务发布服务器响应于该未订阅成功通知,通过上述消息队列将该目标事件发送至上述目标消息分区,从而确保目标事件能够被发送成功,避免遗留事件。
在一个可选的实施例中,在上述目标消费节点从上述对应的目标消息分区中获取上述目标事件之后,上述方法还可以包括:
上述目标消费节点确定处理上述目标事件所需的目标负载量。
上述目标消费节点发送上述目标负载量至缓存服务器。
上述缓存服务器记录上述目标负载量。
本公开实施例中,在目标消费节点接收到目标事件之后,会计算消费该目标事件所需的任务负载量,并将该任务负载存储到缓存服务器。
在另一个可选的实施例中,在上述目标消费节点存储上述目标事件的事件执行状态至预设数据库之后,上述方法还可以包括:
上述目标消费节点发送负载更新指令至上述缓存服务器,上述缓存服务器中记录有上述一个或多个预设消费节点各自对应的消息分区的当前负载量;
上述缓存服务器响应于上述负载更新指令,基于上述目标负载量更新上述目标消息分区的当前负载量。
本公开实施例中,在目标消费节点将上述目标事件存储到预设数据库之后,可以向缓存服务器上报有新任务的到来,并向缓存服务器发送负载更新指令,缓存服务器响应于该负载更新指令,根据消费上述目标事件所需的目标负载量对该目标消息分区的当前负载量进行更新。
本公开实施例中,通过缓存服务记录消费节点各自对应的消息分区的当前负载量,并在有新的目标事件到来时,通过消费上述目标事件所需的目标负载量更新目标消息分区的负载量,使得各个消费节点各自对应的消息分区中的负载量能够及时得到更新,确保各个消费节点各自对应的消息分区的负载量的准确性。由于任务发布服务器是根据各个消费节点各自对应的消息分区的负载量选取消费目标事件的目标消费节点,消息分区的负载量的即时更新能够提高任务发布服务器从选取消费目标事件的目标消费节点的精度。
在步骤S19中,上述目标消费节点处理上述目标事件。
在一个可选的实施例中,在上述步骤S19中,上述目标消费节点对上述目标事件进行处理可以包括:
上述目标消费节点获取上述事件类型对应的第一处理策略。
上述目标消费节点根据上述第一处理策略处理上述目标事件。
本公开实施例中,目标消费节点中可以包括任务处理器,任务处理器中可以记录事件的事件类型与处理策略之间的第一映射关系。任务处理器根据该第一映射关系,可以获取目标事件的事件类型对应的第一处理策略,并根据该第一处理策略对该目标事件进行处理。
具体地,一个目标事件可以同时对应多种第一处理策略,从而触发多个任务。
需要说明的是,本公开实施例并不限定执行该目标事件的执行对象,该执行对象可以是本地的线程池,也可以是分布式的任务执行框架(比如,XXL-JOB)。
在另一个可选的实施例中,上述事件执行状态的初始状态为未完成状态,则在上述目标消费节点处理上述目标事件进行处理之后,上述方法还可以包括:对事件执行状态进行更新。具体地,对事件执行状态进行更新可以包括:
在上述目标事件处理成功时,上述目标消费节点将上述事件执行状态由上述初始状态更新为处理完成状态。
上述目标事件处理失败时,上述目标消费节点获取上述事件类型对应的第二处理策略。
上述目标消费节点基于上述第二处理策略处理上述目标事件。
在上述目标消费节点基于上述第二处理策略处理上述目标事件进行的次数大于预设数量阈值,且上述目标事件未被处理成功的情况下,上述目标消费节点将上述事件执行状态由上述初始状态更新为处理失败状态。
本公开实施例中,如果目标事件被处理成功,则将预设数据库中的事件执行状态由初始状态更新为处理完成状态(即done状态)。
可选地,目标消费节点还可以包括第二处理策略对应的处理器,该第二处理策略对应的处理器中可以记录事件的事件类型与第二处理策略之间的映射关系。若该目标事件未被任务处理器中的第一处理策略处理成功,则可以通过第二处理策略对应的处理器获取该目标事件的第二处理策略,并根据该第二处理策略进一步处理该目标事件。
可选地,第二处理策略可以定义对该目标事件进行处理的重试次数和时间间隔,或者直接忽略失败结果。如果第二处理策略处理该目标事件进行的次数大于预设数量阈值,且该目标事件仍然没有被处理成功的情况下,目标消费节点可以将预设数据库中的事件执行状态由初始状态更新为处理失败状态(即failed状态)。
本公开实施例中,目标消费节点中的任务处理器根据第一处理策略处理该目标事件进行,能够提高目标事件处理的成功率。在目标事件未被任务处理器处理成功时,第二处理策略对应的处理器可以根据第二处理策略处理该目标事件进一步进行,能够进一步提高目标事件处理的成功率。且在第一处理策略对该目标事件消费成功之后,可以预设数据库中的事件执行状态更新为处理成功状态,处理成功状态的目标事件无需进行重复处理,避免了事件被重复处理所带来的系统资源消耗较大的问题。此外,对第二处理策略的处理次数进行了限制,即第二处理策略可以尝试多次处理,如果达到处理阈值后,目标事件还未被处理成功,才将其状态信息更新失败状态,提高了目标事件被处理成功的概率。
在一个可选的实施例中,图5是根据一示例性实施例示出的对目标事件进行重新发布的流程图。如图5所示,上述方法还可以包括:
在步骤S31中,上述目标消费节点以预设频率发送心跳数据至缓存服务器。
在步骤S33中,上述缓存服务器在上述心跳数据出现异常时,发送上述目标消费节点的异常通知至上述目标消费节点。
在步骤S35中,上述目标消费节点响应于上述异常通知,发送重新发布指令至上述任务发布服务器。
在步骤S37中,上述任务发布服务器响应于上述重新发布指令,发布上述目标事件至除上述目标消费节点之外的其他消费节点。
本公开实施例中,目标消费节点可以以预设频率(比如,比如30s)向缓存服务器发送心跳数据,该心跳数据表征目标消费节点与缓存服务器之间的连接状态。在心跳数据出现异常时(比如,目标消费节点与缓存服务器之间的连接中断时,心跳数据未在设定周期内发送),缓存服务器发送异常通知至该目标消费节点,该目标消费节点将事件执行状态更新为重新调度状态,并发布重新发布指令至任务发布服务器,触发任务发布服务器将该目标消费节点中未完成的事件发布至除上述目标消费节点之外的其他消费节点。
可选地,导致心跳数据出现异常的原因可以为:目标实例节点存在发送故障问题,没及时刷新心跳,导致心跳数据过期。
可选地,在目标消费节点出现异常时,可以将其在缓存服务器上存储的消息分区的负载量删除,从而避免新的事件被分配到心跳数据存在异常的问题消费节点。
可选地,目标消费节点中还可以包括服务集群管理模块,上述发送心跳数据的过程可以由该服务集群管理模块来执行。
本公开实施例中,在目标消费节点的数据出现异常时,将该目标消费节点作为问题消费节点,任务发布服务器将该问题消费节点中未处理的事件分配其他消费节点,避免事件遗留,确保每个事件都能够得到处理。且在目标消费节点出现异常时,可以删除该异常的目标消费节点在缓存服务器中存储的消息分区的负载量,避免将新的事件分配至该异常的目标消费节点所带来的新的事件无法及时处理的问题,确保事件处理的准确率。
在一个可选的实施例中,目标消费节点还可以包括初始化服务模块,该初始化服务模块用于对线程池进行初始化和对消息队列进行初始化。在目标消费节点启动或者重启的时候,消息队列会从目标消费节点对应的目标消息分区中加载未被该目标消费节点执行的任务事件,并优先执行这些任务事件,保证任务事件的不丢失。本实施例消费节点高可用,即使短暂重启或者网络不可达,其未执行完毕的任务可以重新执行。
本公开实施例基于发布/订阅模型的事件驱动架构,将事件的触发和任务的执行完全解耦,充分提高了分布式任务调度系统的吞吐量,并强化其弹性伸缩的能力,本公开实施例提供的技术方案,至少可以带来以下有益效果:
一方面,基于消息队列特性,事件以消息的方式被合理地消费,避免事件丢失或者重复消费的问题。另一方面,采用事件驱动框架,事件的触发和任务的执行完全解耦,更加便于维护代码和业务逻辑。再一方面,基于发布/订阅模型,服务集群具有高可伸缩性,高可伸缩性具体体现为:a)新消费节点上线,消息队列自动分配新任务;b)消费节点出现问题后,将不会再被分配新的任务,其所分配的任务会重新分配给其他消费节点。又一方面,由于事件发出时已经决定了事件的消费节点,避免消费节点过度繁忙,实现任务消费的负载均衡,同时避免抢锁带来的性能瓶颈和扩容瓶颈,对于突发的海量请求有更好的吞吐量。此外,消费节点高可用,即使短暂重启或者网络不可达,其未执行完毕的任务可以重新执行。
以下,以任务发布服务器为执行主体,介绍本公开的一种事件调度方法。图6是根据一示例性实施例示出的另一种事件调度方法的流程图。如图6所示,该事件调度方法可以包括:
在步骤S41中,响应于目标事件的发布请求,确定与上述目标事件的事件类型对应的目标主题。
在步骤S43中,根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型。
在步骤S45中,发布上述目标事件至上述目标消费节点对应的目标消息分区。
可选地,上述根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点,包括:
从上述一个或多个预设消费节点中,确定出在上述目标主题中已注册消息分区的预设数量个候选消费节点。
根据每个候选消费节点对应的消息分区中的当前消息的数量,确定上述每个候选消费节点对应的消息分区的当前负载量。
将当前负载量小于预设负载阈值的候选消费节点,作为上述目标消费节点。
可选地,上述方法还可以包括:
接收上述目标消费节点发送的重新发布指令,上述重新发布指令由上述目标消费节点在响应于异常通知时所发送,上述异常通知由缓存服务器在心跳数据出现异常时发送至上述目标消费节点;上述心跳数据由上述目标消费节点以预设频率发送至上述缓存服务器。
响应于上述重新发布指令,发布上述目标事件至除上述目标消费节点之外的其他消费节点。
可选地,上述方法还可以包括:
接收上述目标消费节点发送的上述目标事件对应的未订阅成功通知,上述未订阅成功通知用于表征上述目标消费节点未存储上述目标事件的事件执行状态至预设数据库。
响应于上述未订阅成功通知,重新发布上述目标事件至上述目标消息分区。
以下,以目标消费节点为执行主体,介绍本公开的一种事件调度方法。图7是根据一示例性实施例示出的另一种事件调度方法的流程图。如图7所示,该事件调度方法可以包括:
在步骤S51中,从本地消费节点对应的目标消息分区中获取目标事件;上述目标事件由任务发布服务器发布至上述对应的目标消息分区;上述本地消费节点由上述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定得到;上述目标主题由上述任务发布服务器响应于目标事件的发布请求而确定,上述目标主题与上述目标事件的事件类型相对应;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型。
在步骤S53中,处理上述目标事件。
在一示例性的实施方式中,上述方法还可以包括:
以预设频率发送心跳数据至缓存服务器。
接收上述缓存服务器在上述心跳数据出现异常时返回的上述目标消费节点的异常通知。
响应于上述异常通知,发送重新发布指令至上述任务发布服务器,上述重新发布指令指示发布上述目标事件至除上述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,在上述从本地消费节点对应的目标消息分区中获取目标事件之后,上述方法还包括:
存储上述目标事件的事件执行状态至预设数据库。
发送上述目标事件对应的订阅成功通知至上述任务发布服务器。
在一示例性的实施方式中,上述方法还可以包括:
在未存储上述事件执行状态至上述预设数据库的情况下,发送上述目标事件对应的未订阅成功通知至上述任务发布服务器。
在一示例性的实施方式中,在上述从本地消费节点对应的目标消息分区中获取目标事件之后,上述方法还包括:
确定处理上述目标事件所需的目标负载量。
发送上述目标负载量至缓存服务器。
在一示例性的实施方式中,在上述存储上述目标事件的事件执行状态至预设数据库之后,上述方法还包括:
发送负载更新指令至上述缓存服务器,上述缓存服务器中记录有上述一个或多个预设消费节点各自对应的消息分区的当前负载量,上述负载更新指令指示基于上述目标负载量,更新上述目标消息分区的当前负载量。
在一可选的实施例中,本公开实施例还提供了一种事件调度系统,该系统至少可以包括任务发布服务器和目标消费节点;
该任务发布服务器,可以用于响应于目标事件的发布请求,确定与上述目标事件的事件类型对应的目标主题;以及用于根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型;以及用于发布上述目标事件至上述目标消费节点对应的目标消息分区。
该目标消费节点,可以用于从上述对应的目标消息分区中获取上述目标事件;以及用于处理上述目标事件。
图8是根据一示例性实施例示出的一种事件调度装置框图。参照图8,该装置可以包括发布请求响应模块61、目标消费节点确定模块63和发布模块65。
该发布请求响应模块61,被配置为执行响应于目标事件的发布请求,确定与上述目标事件的事件类型对应的目标主题。
该目标消费节点确定模块63,被配置为执行根据上述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定出上述目标事件对应的目标消费节点;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型。
该发布模块65,被配置为执行发布上述目标事件至上述目标消费节点对应的目标消息分区。
在一示例性的实施方式中,上述目标消费节点确定模块,可以包括:
候选消费节点确定单元,被配置为执行从上述一个或多个预设消费节点中,确定出在上述目标主题中已注册消息分区的预设数量个候选消费节点。
当前负载量确定单元,被配置为执行根据每个候选消费节点对应的消息分区中的当前消息的数量,确定上述每个候选消费节点对应的消息分区的当前负载量;
目标消费节点确定单元,被配置为执行将当前负载量小于预设负载阈值的候选消费节点,作为上述目标消费节点。
在一示例性的实施方式中,上述装置还可以包括:
重新发布指令接收模块,被配置为执行接收上述目标消费节点发送的重新发布指令,上述重新发布指令由上述目标消费节点在响应于异常通知时所发送,上述异常通知由缓存服务器在心跳数据出现异常时发送至上述目标消费节点;上述心跳数据由上述目标消费节点以预设频率发送至上述缓存服务器。
重新发布指令响应模块,被配置为执行响应于上述重新发布指令,发布上述目标事件至除上述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,上述装置还可以包括:
未订阅成功通知接收模块,被配置为执行接收上述目标消费节点发送的上述目标事件对应的未订阅成功通知,上述未订阅成功通知用于表征上述目标消费节点未存储上述目标事件的事件执行状态至预设数据库。
未订阅成功通知响应模块,被配置为执行响应于上述未订阅成功通知,重新发布上述目标事件至上述目标消息分区。
图9是根据一示例性实施例示出的另一种事件调度装置框图。参照图9,该装置可以包括目标事件获取模块71和处理模块73。
该目标事件获取模块71,被配置为执行从本地消费节点对应的目标消息分区中获取目标事件;上述目标事件由任务发布服务器发布至上述对应的目标消息分区;上述本地消费节点由上述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从上述一个或多个预设消费节点中确定得到;上述目标主题由上述任务发布服务器响应于目标事件的发布请求而确定,上述目标主题与上述目标事件的事件类型相对应;上述预设消费节点对应的消息分区由上述预设消费节点在相应的主题中注册得到,上述相应的主题表征上述预设消费节点的事件类型所对应的主题,上述预设消费节点的事件类型表征上述预设消费节点能够处理的事件所对应的事件类型。
该处理模块73,被配置为执行处理上述目标事件。
在一示例性的实施方式中,上述装置还可以包括:
心跳数据发送模块,被配置为执行以预设频率发送心跳数据至缓存服务器。
异常通知接收模块,被配置为执行接收上述缓存服务器在上述心跳数据出现异常时返回的上述目标消费节点的异常通知。
异常通知响应模块,被配置为执行响应于上述异常通知,发送重新发布指令至上述任务发布服务器,上述重新发布指令指示发布上述目标事件至除上述目标消费节点之外的其他消费节点。
在一示例性的实施方式中,上述装置还可以包括:
存储模块,被配置为执行存储上述目标事件的事件执行状态至预设数据库;
订阅成功通知发送模块,被配置为执行发送上述目标事件对应的订阅成功通知至上述任务发布服务器。
在一示例性的实施方式中,上述装置还可以包括:
未订阅成功通知发送模块,被配置为执行在未存储上述事件执行状态至上述预设数据库的情况下,发送上述目标事件对应的未订阅成功通知至上述任务发布服务器。
在一示例性的实施方式中,上述装置还可以包括:
目标负载量确定模块,被配置为执行确定处理上述目标事件所需的目标负载量;
目标负载量发送模块,被配置为执行发送上述目标负载量至缓存服务器。
在一示例性的实施方式中,上述装置还可以包括:
负载更新指令发送模块,被配置为执行发送负载更新指令至上述缓存服务器,上述缓存服务器中记录有上述一个或多个预设消费节点各自对应的消息分区的当前负载量,上述负载更新指令指示基于上述目标负载量,更新上述目标消息分区的当前负载量。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
在示例性实施例中,还提供了一种电子设备,包括处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行存储器上所存放的指令时,实现上述实施例中任一事件调度方法的步骤。
该电子设备可以是终端、服务器或者类似的运算装置,以该电子设备是服务器为例,图10是根据一示例性实施例示出的一种用于事件调度的电子设备的框图,该电子设备80可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(Central Processing Units,CPU)81(中央处理器81可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器83,一个或一个以上存储应用程序823或数据822的存储介质82(例如一个或一个以上海量存储设备)。其中,存储器83和存储介质82可以是短暂存储或持久存储。存储在存储介质82的程序可以包括一个或一个以上模块,每个模块可以包括对电子设备中的一系列指令操作。更进一步地,中央处理器81可以设置为与存储介质82通信,在电子设备80上执行存储介质82中的一系列指令操作。电子设备80还可以包括一个或一个以上电源86,一个或一个以上有线或无线网络接口85,一个或一个以上输入输出接口84,和/或,一个或一个以上操作系统821,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
输入输出接口84可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括电子设备80的通信供应商提供的无线网络。在一个实例中,输入输出接口84包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个示例性实施例中,输入输出接口84可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
本领域普通技术人员可以理解,图10所示的结构仅为示意,其并不对上述电子设备的结构造成限定。例如,电子设备80还可包括比图10中所示更多或者更少的组件,或者具有与图10所示不同的配置。
在示例性实施例中,还提供了一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述实施例中任一事件调度方法的步骤。
在示例性实施例中,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任一种实施方式中提供的事件调度方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本公开所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种事件调度方法,其特征在于,包括:
响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;
根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
发布所述目标事件至所述目标消费节点对应的目标消息分区。
2.根据权利要求1所述的事件调度方法,其特征在于,所述根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点,包括:
从所述一个或多个预设消费节点中,确定出在所述目标主题中已注册消息分区的预设数量个候选消费节点;
根据每个候选消费节点对应的消息分区中的当前消息的数量,确定所述每个候选消费节点对应的消息分区的当前负载量;
将当前负载量小于预设负载阈值的候选消费节点,作为所述目标消费节点。
3.一种事件调度方法,其特征在于,包括:
从本地消费节点对应的目标消息分区中获取目标事件;所述目标事件由任务发布服务器发布至所述对应的目标消息分区;所述本地消费节点由所述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定得到;所述目标主题由所述任务发布服务器响应于目标事件的发布请求而确定,所述目标主题与所述目标事件的事件类型相对应;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
处理所述目标事件。
4.根据权利要求3所述的事件调度方法,其特征在于,所述方法还包括:
以预设频率发送心跳数据至缓存服务器;
接收所述缓存服务器在所述心跳数据出现异常时返回的所述目标消费节点的异常通知;
响应于所述异常通知,发送重新发布指令至所述任务发布服务器,所述重新发布指令指示发布所述目标事件至除所述目标消费节点之外的其他消费节点。
5.根据权利要求3所述的事件调度方法,其特征在于,在所述从本地消费节点对应的目标消息分区中获取目标事件之后,所述方法还包括:
存储所述目标事件的事件执行状态至预设数据库;
发送所述目标事件对应的订阅成功通知至所述任务发布服务器。
6.一种事件调度系统,其特征在于,包括:任务发布服务器和目标消费节点;
所述任务发布服务器,用于响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;以及用于根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;以及用于发布所述目标事件至所述目标消费节点对应的目标消息分区;
所述目标消费节点,用于从所述对应的目标消息分区中获取所述目标事件;以及用于处理所述目标事件。
7.一种事件调度装置,其特征在于,包括:
发布请求响应模块,被配置为执行响应于目标事件的发布请求,确定与所述目标事件的事件类型对应的目标主题;
目标消费节点确定模块,被配置为执行根据所述目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定出所述目标事件对应的目标消费节点;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
发布模块,被配置为执行发布所述目标事件至所述目标消费节点对应的目标消息分区。
8.一种事件调度装置,其特征在于,包括:
目标事件获取模块,被配置为执行从本地消费节点对应的目标消息分区中获取目标事件;所述目标事件由任务发布服务器发布至所述对应的目标消息分区;所述本地消费节点由所述任务发布服务器根据目标主题和一个或多个预设消费节点各自对应的消息分区的当前负载量,从所述一个或多个预设消费节点中确定得到;所述目标主题由所述任务发布服务器响应于目标事件的发布请求而确定,所述目标主题与所述目标事件的事件类型相对应;所述预设消费节点对应的消息分区由所述预设消费节点在相应的主题中注册得到,所述相应的主题表征所述预设消费节点的事件类型所对应的主题,所述预设消费节点的事件类型表征所述预设消费节点能够处理的事件所对应的事件类型;
处理模块,被配置为执行处理所述目标事件。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至5中任一项所述的事件调度方法。
10.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备执行如权利要求1至5中任一项所述的事件调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111031604.9A CN113886032A (zh) | 2021-09-03 | 2021-09-03 | 事件调度方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111031604.9A CN113886032A (zh) | 2021-09-03 | 2021-09-03 | 事件调度方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113886032A true CN113886032A (zh) | 2022-01-04 |
Family
ID=79012225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111031604.9A Pending CN113886032A (zh) | 2021-09-03 | 2021-09-03 | 事件调度方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113886032A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500546A (zh) * | 2022-01-25 | 2022-05-13 | 中国农业银行股份有限公司 | 基于负载均衡集群的通信消息发送方法、装置及设备 |
-
2021
- 2021-09-03 CN CN202111031604.9A patent/CN113886032A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500546A (zh) * | 2022-01-25 | 2022-05-13 | 中国农业银行股份有限公司 | 基于负载均衡集群的通信消息发送方法、装置及设备 |
CN114500546B (zh) * | 2022-01-25 | 2024-04-30 | 中国农业银行股份有限公司 | 基于负载均衡集群的通信消息发送方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10361928B2 (en) | Cluster instance management system | |
CN108960773B (zh) | 业务管理方法、计算机设备和存储介质 | |
CN108834086B (zh) | 短信发送的方法、装置、计算机设备和存储介质 | |
US20080030764A1 (en) | Server parallel aggregation | |
CN108446172B (zh) | 数据调取方法、装置、计算机设备和存储介质 | |
CN111274052A (zh) | 数据分发方法、服务器及计算机可读存储介质 | |
WO2022105138A1 (zh) | 去中心化的任务调度方法、装置、设备及介质 | |
CN111580990A (zh) | 一种任务调度方法、调度节点、集中配置服务器及系统 | |
CN111159233B (zh) | 分布式缓存方法、系统、计算机设备以及存储介质 | |
US11847503B2 (en) | Execution of functions by clusters of computing nodes | |
CN112231108A (zh) | 任务处理方法、装置、计算机可读存储介质及服务器 | |
CN112559461A (zh) | 文件传输方法及装置、存储介质及电子设备 | |
CN112256451A (zh) | 定时业务消息生成方法、装置、电子设备及存储介质 | |
CN113886032A (zh) | 事件调度方法、装置、电子设备及存储介质 | |
CN103186536A (zh) | 一种调度数据共享装置的方法及系统 | |
CN109257396A (zh) | 一种分布式锁调度方法及装置 | |
US10990385B1 (en) | Streaming configuration management | |
CN117453357A (zh) | 节点任务调度方法、装置、计算机设备及存储介质 | |
CN111556126B (zh) | 模型管理方法、系统、计算机设备和存储介质 | |
CN114924888A (zh) | 资源配置方法、数据处理方法、装置、设备和存储介质 | |
CN114697334A (zh) | 一种编排任务的执行方法和装置 | |
CN111221587A (zh) | 配置中心的管理调度方法及装置 | |
US20230388205A1 (en) | Cluster availability monitoring and alerting | |
US20230049322A1 (en) | Information processing method, device, system, and computer-readable storage medium | |
CN116302456B (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 |