延时任务调度与存储方法、装置、设备、介质及系统与流程

文档序号:25279432发布日期:2021-06-01 17:25阅读:95来源:国知局
延时任务调度与存储方法、装置、设备、介质及系统与流程

本公开涉及计算机技术领域,尤其涉及一种延时任务调度与存储方法、装置、设备、介质及系统。



背景技术:

随着互联网技术的发展,在基于互联网的多个业务领域中,因为履约流程较复杂且履约周期较长,延时任务的应用越来越多。延迟任务一般没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件。

目前的延时任务系统的实现主要分为两类:一类是基于linuxcrontab组件实现的单机延时任务系统,其大致原理是crontab文件配置定时任务,然后crond守护进程每分钟唤醒一次,检查crontab文件并执行到期的任务。另一类是基于诸如redis、hive等数据库实现的延时任务系统,其大致原理是将延时任务按执行时间的槽位写入数据库中,然后由固定的工作线程按槽位顺序来扫描到期的任务,并交给业务系统执行。

但是,上述延时任务系统的实现方式存在如下问题:(1)单机延时任务系统只能在一台服务器上运行,如果服务器故障,则所有的延时任务调度失败;(2)基于数据库的延时任务系统将同一时刻的所有延时任务存储在同一个槽位中,若同一时刻的延时任务数量较多,会导致该槽位对应的服务器的任务存储和扫描的性能均急速下降,使得系统的吞吐量较小;另外,如果固定的工作线程因故障无法运行,那么所有的延时任务调度失败,使得系统的可用性较低。



技术实现要素:

为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种延时任务调度与存储方法、装置、设备、介质及系统。

本公开实施例提供了一种延时任务调度方法,应用于延时任务系统中的扫描子系统,所述扫描子系统包含相互独立的多个扫描线程,每个所述扫描线程执行如下步骤:

确定定时周期到达;

从至少两个槽位标识中确定第一槽位标识;其中,每个所述槽位标识设置有对应的存储服务器组;

扫描所述第一槽位标识对应的所述存储服务器组中的到期延时任务;

将扫描到的所述到期延时任务投递至业务系统。

本公开实施例还提供了一种延时任务存储方法,应用于延时任务系统中的扫描子系统,所述扫描子系统包含相互独立的多个扫描线程,每个所述扫描线程执行如下步骤:

若接收到待存储延时任务,则从至少两个槽位标识中确定第二槽位标识;其中,每个所述槽位标识设置有对应的存储服务器组;

将所述待存储延时任务存储至所述第二槽位标识对应的存储服务器组中。

本公开实施例还提供了一种延时任务调度装置,配置于延时任务系统中的扫描子系统,所述扫描子系统包含相互独立的多个扫描线程,且每个所述扫描线程执行相同操作,所述装置包括:

定时周期确定模块,用于确定定时周期到达;

第一槽位标识确定模块,用于从至少两个槽位标识中确定第一槽位标识;其中,每个所述槽位标识设置有对应的存储服务器组;

任务扫描模块,用于扫描所述第一槽位标识对应的所述存储服务器组中的到期延时任务;

任务投递模块,用于将扫描到的所述到期延时任务投递至业务系统。

本公开实施例还提供了一种延时任务存储装置,配置于延时任务系统中的扫描子系统,所述扫描子系统包含相互独立的多个扫描线程,且每个所述扫描线程执行相同操作,所述装置包括:

第二槽位标识确定模块,用于若接收到待存储延时任务,则从至少两个槽位标识中确定第二槽位标识;其中,每个所述槽位标识设置有对应的存储服务器组;

延时任务存储模块,用于将所述待存储延时任务存储至所述第二槽位标识对应的存储服务器组中。

本公开实施例还提供了一种电子设备,所述电子设备包括:

处理器;

用于存储所述处理器可执行指令的存储器;

所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开任意实施例所提供的延时任务调度方法,或者执行所述指令以实现如本公开任意实施例所提供的延时任务存储方法。

本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开任意实施例所提供的延时任务调度方法,或者执行如本公开任意实施例所提供的延时任务存储方法。

本公开实施例还提供了一种任务调度系统,所述系统包括:存储子系统和处理子系统;所述存储子系统包含至少两个存储服务器组,每个所述存储服务器组对应有一个槽位标识;所述处理子系统包含相互独立的多个扫描线程,且所述多个扫描线程布设于至少一个处理服务器中;其中,

所述存储子系统,用于分布式存储延时任务;

所述处理子系统中的每个所述扫描线程用于执行如本公开任意实施例所提供的延时任务调度方法,或者执行如本公开任意实施例所提供的延时任务存储方法。

本公开实施例提供的技术方案与现有技术相比具有如下优点:通过多个槽位标识及其对应的存储服务器组的设置,可以将延时任务分布式存储于多个存储服务器组中,避免同一时刻高并发地访问同一存储服务器进行任务扫描而导致的系统性能下降和系统吞吐量小的问题,极大地提升系统的写入性能和吞吐量。通过多个独立扫描线程的设置,以及每个扫描线程均抢占槽位标识来扫描相应槽位标识对应的存储服务器组中的延时任务,并将扫描到的延时任务投递至业务系统,实现了多个扫描线程对分布式存储的延时任务的分布式扫描,避免了固定工作线程宕机而导致的延时任务调度失败的问题,以及系统扫描性能低的问题,极大地提升系统的扫描性能和可用性。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本公开实施例提供的一种延时任务调度方法的流程示意图;

图2为本公开实施例提供的一种延时任务存储方法的流程示意图;

图3为本公开实施例提供的一种延时任务调度装置的结构示意图;

图4为本公开实施例提供的一种延时任务存储装置的结构示意图

图5为本公开实施例提供的一种延时任务系统的结构示意图;

图6为本公开实施例提供的一种电子设备的结构示意图。

具体实施方式

为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。

本公开实施例提供的延时任务调度方法,主要适用于需要延时任务调度的场景。举例而言,适用于利用延时任务来延时发起新的业务流程,如在电商或物流等领域中指定时间结算和指定时间校验订单状态等场景;也适用于利用延时任务来充当短期密集定时任务,如在线教育领域中,借助延时任务可以灵活配置多次密集定时任务的特点,在预约课程开课前,多次提醒学生上课的场景;还适用于利用延时任务来请求重试的场景,既提高了处理成功率,又可以通过设置重试间隔保护核心服务的稳定性。

本公开实施例提供的延时任务调度方法可以由延时任务调度装置来执行,该装置可以由软件和/或硬件的方式实现,一般可集成在电子设备中,例如笔记本电脑、台式电脑或服务器等。在一些实施例中,电子设备可为延时任务系统中的处理子系统或处理子系统的一部分。该处理子系统包含多个相互独立的扫描线程,至少用于扫描到期的延时任务并将其投递至业务系统。在一些实施例中,多个扫描线程以协程方式并行运行,且每个扫描线程执行的操作相同。在一些实施例中,延时任务系统中还包括存储子系统,用于存储各个延时任务。

图1为本公开实施例提供的一种延时任务调度方法的流程示意图。该延时任务调度方法由每个扫描线程执行。如图1所示,该方法包括:

s110、确定定时周期到达。

多个扫描线程并发运行,其在需要时开启,并且是通过定时来触发其执行后续的延时任务的扫描过程。在一些实施例中,多个扫描线程以协程方式运行。协程运行在扫描线程之上,当一个扫描线程上的一个协程执行完成后,该协程可以选择主动让出,让另一个协程运行在当前扫描线程之上,以避免不断增加扫描线程而导致的系统内存空间过多占用问题,以及过多的扫描线程切换而导致的耗时长的问题。

s120、从至少两个槽位标识中确定第一槽位标识;其中,每个槽位标识设置有对应的存储服务器组。

其中,槽位标识是存储空间的标识,其可以唯一性地表征延时任务系统中的一个存储空间。第一槽位标识是延时任务扫描过程中确定的一个槽位标识。

相关技术中,扫描延时任务的线程是固定的,其容易导致延时任务调度效率低,甚至调度失败。本公开实施例中的延时任务分布式地存储于各存储服务器组中,每个存储服务器组中包含一个或多个存储服务器,且每个存储服务器组对应有一个槽位标识。为了提高延时任务扫描的效率和可用性,本公开实施例中利用处理子系统中的多个独立的扫描线程来分布式地扫描各存储服务器组中的延时任务。而每个扫描线程的扫描策略是通过槽位标识来定位其要扫描的存储服务器组。具体实施时,在扫描线程启动任务扫描流程后,该扫描线程先从多个槽位标识中确定出一个槽位标识,作为第一槽位标识。

在一些实施例中,s120包括:从各槽位标识中随机选择一个槽位标识;若确定选择的槽位标识已匹配线程,则获取各槽位标识中当前未匹配线程的槽位标识;以随机方式遍历各当前未匹配线程的槽位标识,直至确定出一个未匹配线程的槽位标识,作为第一槽位标识。

本实施例中,扫描线程随机抢占槽位标识,且要确保抢占的槽位标识是未被其他线程占用的。具体地,为扫描线程设置两轮抢占操作:扫描线程随机选择一个槽位标识发起第一轮抢占。如果本次随机抢占的槽位标识已被其他扫描线程占用,那么本轮抢占失败。此时,该扫描线程进行第二轮抢占。扫描线程先获取所有槽位标识中未被占用(即未匹配线程)的槽位标识。然后,随机打散这些未匹配线程的槽位标识。最后,遍历打散后的各未匹配线程的槽位标识,进行逐个抢占。由于该扫描线程在抢占槽位标识的过程中,其他并行的扫描线程也在以同样的处理方式进行槽位标识的抢占,所以该扫描线程的第二轮抢占过程中,如果其抢占到一个未匹配线程的槽位标识,则作为第一槽位标识;如果其遍历完所有的槽位标识,仍未抢占到槽位标识,表明目前所有的存储服务器组均已分配了扫描线程,该扫描线程的本次扫描流程结束。这样设置的好处在于,通过槽位标识的随机抢占,确保各存储服务器组随机均匀地被不同的扫描线程处理,降低某一个扫描线程故障或性能降低对延时任务的影响,进一步提高延时任务系统的扫描性能和可用性。

在一些实施例中,上述两轮抢占的过程可实现为:扫描线程基于redishsetnx操作进行第一轮槽位标识的抢占。该redishsetnx操作能保证一个槽位标识只被一个扫描线程抢占。若本轮抢占失败,则该扫描线程基于redishgetall操作获取所有未匹配线程的槽位标识。然后,随机打散这些未匹配线程的槽位标识后,再基于redishsetnx操作来逐个抢占未匹配线程的槽位标识,直至所有未匹配线程的槽位标识被遍历完毕,或者抢占到一个未匹配线程的槽位标识,作为第一槽位标识。

上述过程基于redis数据库实现,redis数据库中按照哈希表hash存储数据,其存储结构可为键信息-域信息-值信息:keyfield1value1field2value2...。上述redishsetnx操作是指redis数据库中的hsetnx命令,该hsetnx命令是用于设置哈希表的命令,其可将哈希表中key的field设置成指定的值,且只有field不存在时才可以成功,如果field存在则操作无效,故其可以保证一个槽位标识只被一个扫描线程抢占。上述redishgetall操作是指redis数据库中的hgetall命令,该hgetall命令是用于获取哈希表中数据的命令,其返回哈希表中一个key存储的所有field及value。

s130、扫描第一槽位标识对应的存储服务器组中的到期延时任务。

扫描线程确定了第一槽位标识后,立即对该第一槽位标识对应的存储服务器组进行扫描,以扫描延时任务的任务执行时间为当前系统时间的延时任务(即到期延时任务)。

s140、将扫描到的到期延时任务投递至业务系统。

扫描线程将扫描到的到期延时任务投递至业务系统。业务系统便执行接收到的到期延时任务。

在一些实施例中,s140包括:开启线程池,以启用新的线程将扫描到的到期延时任务异步投递至业务系统。相关技术中,在任务投递过程中,因为网络、i/o抖动(输入/输出操作的不同程度的延迟或阻塞)等原因,会造成延时任务投递失败。本实施例中利用线程池进行延时任务的投递。线程池中会开启新的线程来异步投递任务,而且其确认机制会在确认任务投递成功后再消除该延时任务。这样,能够避免网络、i/o抖动等原因而造成的任务投递失败和任务丢失问题,进一步提升延时任务调度的处理效率。

本公开实施例提供的延时任务调度方案,通过多个槽位标识及其对应的存储服务器组的设置,可以将延时任务分布式存储于多个存储服务器组中,避免同一时刻高并发地访问同一存储服务器进行任务扫描而导致的系统性能下降和系统吞吐量小的问题,极大地提升系统的写入性能和吞吐量。通过多个独立扫描线程的设置,以及每个扫描线程均抢占槽位标识来扫描相应槽位标识对应的存储服务器组中的延时任务,并将扫描到的延时任务投递至业务系统,实现了多个扫描线程对分布式存储的延时任务的分布式扫描,避免了固定工作线程宕机而导致的延时任务调度失败的问题,以及系统扫描性能低的问题,极大地提升系统的扫描性能和可用性。

在一些实施例中,扫描线程的数量大于或等于槽位标识的数量。考虑到槽位标识的数量少于扫描线程的数量时,存在一个扫描线程需要扫描多个槽位标识对应的存储服务器组中的扫描任务的情况,会导致扫描效率低下,甚至延时任务系统不可用。故本实施例中设置处理子系统中包含的扫描线程的数量大于或等于槽位标识的数量,以确保每个存储服务器组均能由一个独立的扫描线程扫描,从而进一步提高延时任务系统的扫描性能和可用性。

在一些实施例中,多个扫描线程布设于同一台处理服务器中。在另一些实施例中,多个扫描线程布设于至少两个处理服务器中。本实施例中,为了避免一台处理服务器故障而导致的延时任务系统不可用的情况,将多个扫描线程布设于至少两个处理服务器中,且各处理服务器及其中的扫描线程均独立工作,从而进一步提高系统可用性。

在一些实施例中,至少两个处理服务器布设于不同的机房中,且每个机房中包含预设数量的处理服务器;其中,预设数量由槽位标识的数量和每个处理服务器中开启的扫描线程的数量确定。本实施例中,将所有的处理服务器布设于多个机房中,且每个机房中布设的所有处理服务器中开启的扫描线程的总数量大于或等于延时任务系统中槽位标识的数量。这样,任一个机房可独立扫描所有的存储服务器组,且是一个存储服务器组由一个扫描线程扫描,从而避免一个机房故障导致的系统不可用问题,提升单个机房的高可用性,进而更进一步地提高延时任务系统的扫描性能和可用性。在一些实施例中,设定每台处理服务器中开启的扫描线程数量相同,那么一个机房中的处理服务器的数量(即预设数量)便可由槽位标识的数量与每台处理服务器中开启的扫描线程的数量的商来确定。

在一些实施例中,延时任务调度方法还包括:

a、在故障恢复后,获取当前时刻之前预设时间段内的延时任务执行记录。

如果延时任务系统中的部分或者全部服务器短暂不可用,或者延时任务系统因程序故障而暂时性地全部不可用,那么故障期间的延时任务就无法成功调度。针对这种情况,在故障恢复后,延时任务系统中的任一扫描线程均可执行系统健康检查操作,以重新处理故障期间的延时任务。

具体地,扫描线程获取当前时刻之前预设时间段内的延时任务执行记录。该预设时间段可以根据实际业务需求来设定,例如业务时效性较高,则可设置时间较短的预设时间段。该延时任务执行记录用于记载延时任务处理过程中的相关信息,如延时任务的信息及其是否成功处理的状态信息等。在一些实施例中,该延时任务执行记录可以是延时任务系统的日志信息。

b、基于延时任务执行记录,确定未完成的延时任务,并重新处理各未完成的延时任务。

扫描线程根据获取的延时任务执行记录,确定出未成功执行的延时任务(即未完成的延时任务),并按照上述s230~s260的操作来重新处理这些未成功执行的延时任务。

通过上述技术方案中在故障恢复后,获取当前时刻之前预设时间段内的延时任务执行记录;基于延时任务执行记录,确定未完成的延时任务,并重新处理各未完成的延时任务。实现了系统故障情况下的分布式健康检查,降低因系统故障而导致的任务丢失或任务调度失败的可能性,进一步提高延时任务系统的可用性。

本公开实施例提供的延时任务存储方法可以由延时任务存储装置来执行,该装置可以由软件和/或硬件的方式实现,一般可集成在电子设备中,例如笔记本电脑、台式电脑或服务器等。在一些实施例中,电子设备可为延时任务系统中的处理子系统或处理子系统的一部分。该处理子系统包含多个相互独立的扫描线程,除了用于扫描到期的延时任务并将其投递至业务系统之外,还至少用于将待存储延时任务存储至相应位置。在一些实施例中,多个扫描线程以协程方式并行运行,且每个扫描线程执行的操作相同。在一些实施例中,延时任务系统中还包括存储子系统,用于存储各个待存储延时任务。

图2为本公开实施例提供的一种延时任务存储方法的流程示意图。该延时任务存储方法由每个扫描线程执行。如图2所示,该方法包括:

s210、若接收到待存储延时任务,则从至少两个槽位标识中确定第二槽位标识;每个槽位标识设置有对应的存储服务器组。

本公开实施例中的延时任务系统为无中心节点的分布式系统,且在延时任务发起方中维护有处理子系统中的各处理服务器的信息。当延时任务发起方发起一个待存储延时任务时,其可从各处理服务器中随机确定一个处理服务器来处理该待存储延时任务的存储操作。该处理服务器进一步随机确定一个扫描线程来执行存储操作,而该扫描线程需要随机地将其存储至一个存储服务器组中。具体地,扫描线程接收待存储延时任务,并从各槽位标识中确定一个第二槽位标识。

在一些实施例中,从各槽位标识中确定第二槽位标识包括:基于随机分配均衡算法,从各槽位标识中确定一个槽位标识,作为第二槽位标识。扫描线程基于随机分配均衡算法(round-robinbalence),从所有的槽位标识中随机确定一个槽位标识,作为第二槽位标识。如果同一时刻存在多个待存储延时任务,则基于第二槽位标识的确定方式,可随机且均匀地为每个待存储延时任务分配一个第二槽位标识,确保各待存储延时任务均匀地分布式存储于各存储服务器组中,同时提高延时任务系统的写入和扫描的性能。

s220、将待存储延时任务存储至第二槽位标识对应的存储服务器组中。

扫描线程将待存储延时任务存储至第二槽位标识对应的存储服务器组中。

在一些实施例中,s220包括:基于第二槽位标识和任务执行时间生成待存储延时任务对应的存储键信息,并将待存储延时任务的任务内容作为存储值信息;将存储键信息和存储值信息,以键值对结构,存储于第二槽位标识对应的存储服务器组中。

其中,键值对结构是一种数据结构,其至少包含键信息key和值信息value,键信息用于存放各关键字或字段,值信息用于存放对应键信息的字段值。例如,redis数据库中的哈希表,其键值对结构可以为键信息-域信息-值信息:keyfield1value1field2value2...。存储键信息是指延时任务存储过程中的键信息。存储值信息是指延时任务存储过程中的值信息。

本实施例中,以键值对形式存储待存储延时任务。由于任务存储和任务扫描过程均依赖于槽位标识,故将槽位标识加入存储键信息。在一些实施例中,以任务执行时间、第二槽位标识、任务发起方标识、任务标识和内部版本号为基础来生成存储键信息。而将待存储延时任务的任务内容作为存储值信息。然后,将存储键信息和存储值信息存储于第二槽位标识对应的存储服务器组中。在一些实施例中,为了更进一步提高延时任务系统的处理性能,存储服务器采用支持顺序写入和前缀扫描的数据库,如hbase数据库。

本公开实施例提供的延时任务存储方案,通过若接收到待存储延时任务,则从各槽位标识中确定第二槽位标识;将待存储延时任务存储至第二槽位标识对应的存储服务器组中。实现了延时任务的分布式存储,能够将多个延时任务随机且均匀地存储于各个存储服务器中,进一步提升延时任务系统的写入性能、扫描性能和吞吐量。

举例而言,传统定时/延时任务系统,比如linuxcron,其最多能同时调度大约1000个延时任务;基于redis、mysql等实现的传统延时任务系统,每秒最大调度的延时任务量小于1万。但是,以本公开实施例在三个机房布设六台机器,总共设置128个槽位标识的配置下,每秒最大调度任务数量可达10万左右。另外,传统的延时任务调度系统在出现服务器宕机、服务短暂崩溃等故障的情况下会完全不可用或丢失任务。但是,本公开实施例因多个处理服务器和多个扫描线程的设置,其在出现部分服务器宕机时,仍然能正常工作;而且,因分布式健康检查的设置,使得延时任务调度系统即便全部不可用时,依旧能调度延时任务,保证任务不丢失。

图3为本公开实施例提供的一种延时任务调度装置的结构示意图。该装置配置于延时任务系统中的扫描子系统,扫描子系统包含相互独立的多个扫描线程,且每个扫描线程执行相同操作。如图3所示,该装置包括:

定时周期确定模块310,用于确定定时周期到达;

第一槽位标识确定模块320,用于从至少两个槽位标识中确定第一槽位标识;其中,每个槽位标识设置有对应的存储服务器组;

任务扫描模块330,用于扫描第一槽位标识对应的存储服务器组中的到期延时任务;

任务投递模块340,用于将扫描到的到期延时任务投递至业务系统。

在一些实施例中,第一槽位标识确定模块320具体用于:

从各槽位标识中随机选择一个槽位标识;

若确定选择的槽位标识已匹配线程,则获取各槽位标识中当前未匹配线程的槽位标识;

以随机方式遍历各当前未匹配线程的槽位标识,直至确定出一个未匹配线程的槽位标识,作为第一槽位标识。

在一些实施例中,任务投递模块340具体用于:

开启线程池,以启用新的线程将扫描到的到期延时任务异步投递至业务系统。

在一些实施例中,扫描线程的数量大于或等于槽位标识的数量。

在一些实施例中,多个扫描线程布设于至少两个处理服务器中。

在一些实施例中,至少两个处理服务器布设于不同的机房中,且每个机房中包含预设数量的处理服务器;其中,预设数量由槽位标识的数量和每个处理服务器中开启的扫描线程的数量确定。

在一些实施例中,该装置还包括故障处理模块,用于:

在故障恢复后,获取当前时刻之前预设时间段内的延时任务执行记录;

基于延时任务执行记录,确定未完成的延时任务,并重新处理各未完成的延时任务。

本公开实施例提供的上述延时任务调度装置,通过多个槽位标识及其对应的存储服务器组的设置,可以将延时任务分布式存储于多个存储服务器组中,避免同一时刻高并发地访问同一存储服务器进行任务扫描而导致的系统性能下降和系统吞吐量小的问题,极大地提升系统的写入性能和吞吐量。通过多个独立扫描线程的设置,以及每个扫描线程均抢占槽位标识来扫描相应槽位标识对应的存储服务器组中的延时任务,并将扫描到的延时任务投递至业务系统,实现了多个扫描线程对分布式存储的延时任务的分布式扫描,避免了固定工作线程宕机而导致的延时任务调度失败的问题,以及系统扫描性能低的问题,极大地提升系统的扫描性能和可用性。

本公开实施例所提供的延时任务调度装置可执行本发明任意实施例所提供的延时任务调度方法,具备执行方法相应的功能模块和有益效果。

图4为本公开实施例提供的一种延时任务存储装置的结构示意图。该装置配置于延时任务系统中的扫描子系统,扫描子系统包含相互独立的多个扫描线程,且每个扫描线程执行相同操作。如图4所示,该装置包括:

第二槽位标识确定模块410,用于若接收到待存储延时任务,则从至少两个槽位标识中确定第二槽位标识;其中,每个槽位标识设置有对应的存储服务器组;

延时任务存储模块420,用于将待存储延时任务存储至第二槽位标识对应的存储服务器组中。

在一些实施例中,第二槽位标识确定模块410具体用于:

基于随机分配均衡算法,从各槽位标识中确定一个槽位标识,作为第二槽位标识。

在一些实施例中,延时任务存储模块420具体用于:

基于第二槽位标识和任务执行时间生成待存储延时任务对应的存储键信息,并将待存储延时任务的任务内容作为存储值信息;

将存储键信息和存储值信息,以键值对结构,存储于第二槽位标识对应的存储服务器组中。

本公开实施例提供的上述延时任务存储装置,通过若接收到待存储延时任务,则从各槽位标识中确定第二槽位标识;将待存储延时任务存储至第二槽位标识对应的存储服务器组中。实现了延时任务的分布式存储,能够将多个延时任务随机且均匀地存储于各个存储服务器中,进一步提升延时任务系统的写入性能、扫描性能和吞吐量。

本公开实施例所提供的延时任务存储装置可执行本发明任意实施例所提供的延时任务存储方法,具备执行方法相应的功能模块和有益效果。

图5为本公开实施例提供的一种延时任务调度系统的结构示意图。如图5所示,延时任务调度系统包括:存储子系统510和处理子系统520;存储子系统510包含至少两个存储服务器组511,每个存储服务器组511对应有一个槽位标识,且每个存储服务器组511中包含一个或多个存储服务器(图中未示出);处理子系统520包含相互独立的多个扫描线程522,且多个扫描线程522布设于至少一个处理服务器521中;其中,

存储子系统510,用于分布式存储延时任务;

处理子系统520中的每个扫描线程522用于执行如下操作:

确定定时周期到达;

从至少两个槽位标识中确定第一槽位标识;其中,每个槽位标识设置有对应的存储服务器组511;

扫描第一槽位标识对应的存储服务器组511中的到期延时任务;

将扫描到的到期延时任务投递至业务系统。

在一些实施例中,扫描线程522具体用于:

从各槽位标识中随机选择一个槽位标识;

若确定选择的槽位标识已匹配线程,则获取各槽位标识中当前未匹配线程的槽位标识;

以随机方式遍历各当前未匹配线程的槽位标识,直至确定出一个未匹配线程的槽位标识,作为第一槽位标识。

在一些实施例中,扫描线程522具体用于:

开启线程池,以启用新的线程将扫描到的到期延时任务异步投递至业务系统。

在一些实施例中,扫描线程522的数量大于或等于槽位标识的数量。

在一些实施例中,多个扫描线程522布设于至少两个处理服务器521中。

在一些实施例中,至少两个处理服务器521布设于不同的机房中,且每个机房中包含预设数量的处理服务器521;其中,预设数量由槽位标识的数量和每个处理服务器521中开启的扫描线程的数量确定。

在一些实施例中,扫描线程522还用于执行如下操作:

若接收到待存储延时任务,则从各槽位标识中确定第二槽位标识;

将待存储延时任务存储至第二槽位标识对应的存储服务器组511中。

进一步地,扫描线程522具体用于:

基于随机分配均衡算法,从各槽位标识中确定一个槽位标识,作为第二槽位标识。

进一步地,扫描线程522具体用于:

基于第二槽位标识和任务执行时间生成待存储延时任务对应的存储键信息,并将待存储延时任务的任务内容作为存储值信息;

将存储键信息和存储值信息,以键值对结构,存储于第二槽位标识对应的存储服务器组511中。

在一些实施例中,扫描线程522还用于:

在故障恢复后,获取当前时刻之前预设时间段内的延时任务执行记录;

基于延时任务执行记录,确定未完成的延时任务,并重新处理各未完成的延时任务。

本公开实施例中的延时任务调度系统,通过多个槽位标识及其对应的存储服务器组的设置,可以将延时任务分布式存储于多个存储服务器组中,避免同一时刻高并发地访问同一存储服务器进行任务写入或任务扫描而导致的系统性能下降和系统吞吐量小的问题,极大地提升系统的写入性能和吞吐量。通过多个独立扫描线程的设置,以及每个扫描线程均抢占槽位标识来扫描相应槽位标识对应的存储服务器组中的延时任务,并将扫描到的延时任务投递至业务系统,实现了多个扫描线程对分布式存储的延时任务的分布式扫描,避免了固定工作线程宕机而导致的延时任务调度失败的问题,以及系统扫描性能低的问题,极大地提升系统的扫描性能和可用性。

图6为本公开实施例提供的一种电子设备的结构示意图。如图6所示,电子设备包括一个或多个处理器601和存储器602。

处理器601可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。

存储器602可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器601可以运行所述程序指令,以实现上文所说明的本公开的实施例的延时任务调度方法以及/或者其他期望的功能。在上述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。

在一个示例中,电子设备还可以包括:输入装置603和输出装置604,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。此外,该输入装置603还可以包括例如键盘、鼠标等等。

该输出装置604可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置604可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。

当然,为了简化,图6中仅示出了该电子设备中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备还可以包括任何其他适当的组件。

除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例提供的延时任务调度方法。

所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。

此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的延时任务调度方法。

所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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