发明内容
有鉴于此,本说明书提供一种批处理速率的控制方法,应用于令牌管理者,所述方法包括:
根据限流参数生成用于预定周期的若干个令牌;所述令牌用来指示生产者能够向消费者分发的任务数量上限;
在某个预定周期内收到生产者的令牌请求后,如果所述预定周期的令牌尚未发放完毕,向生产者发放令牌。
本说明书提供的一种批处理速率的控制方法,应用于生产者,所述方法包括:
向令牌管理者发送令牌请求;
在收到令牌管理者发放的令牌后,获取批处理任务并分发给消费者,所述获取或分发的批处理任务的数量不超过所述令牌指示的任务数量上限。
本说明书还提供了一种批处理速率的控制装置,应用于令牌管理者,所述装置包括:
令牌生成单元,用于根据限流参数生成用于预定周期的若干个令牌;所述令牌用来指示生产者能够向消费者分发的任务数量上限;
令牌发放单元,用于在某个预定周期内收到生产者的令牌请求后,如果所述预定周期的令牌尚未发放完毕,向生产者发放令牌。
本说明书提供的一种批处理速率的控制装置,应用于生产者,所述装置包括:
令牌请求单元,用于向令牌管理者发送令牌请求;
令牌使用单元,用于在收到令牌管理者发放的令牌后,获取批处理任务并分发给消费者,所述获取或分发的批处理任务的数量不超过所述令牌指示的任务数量上限。
本说明书提供的一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述应用于令牌管理者的批处理速率的控制方法所述的步骤。
本说明书提供的一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述应用于生产者的批处理速率的控制方法所述的步骤。
本说明书提供的一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述应用于令牌管理者的批处理速率的控制方法所述的步骤。
本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述应用于生产者的批处理速率的控制方法所述的步骤。
由以上技术方案可见,本说明书的实施例中,根据限流参数确定预定周期内令牌管理者能够发放的令牌,由令牌管理者在预定周期内发放给生产者,领到令牌的生产者才能够按照令牌指示的任务数量上限向消费者分发任务,使得在并发架构下对批处理速率的控制更为精准。
具体实施方式
本说明书的实施例提出一种新的批处理速率的控制方法,在生产者和消费者的并发架构中增加令牌管理者,由令牌管理者根据限流参数生成用于预定周期的令牌,在一个预定周期内令牌管理者只能向生产者发放用于该预定周期的令牌,而只有领到令牌的生产者才能按照令牌指示的任务数量上限向消费者分发任务,从而实现了对批处理速率的精确控制。
生产者消费者模式是一种广为应用的并发处理架构。本说明书的实施例中,在生产者和消费者模式的架构中增加令牌管理者,如图1所示。其中,令牌管理者、生产者或消费者均是功能模块,可以是类、函数、线程、进程、应用程序等;生产者负责将要进行批处理的任务写入缓冲区,消费者负责从缓冲区中读取任务并执行对该任务的处理。
本说明书的实施例中,令牌管理者、生产者或消费者可以运行在任何具有计算和存储能力的设备上,如手机、平板电脑、PC(Personal Computer,个人电脑)、笔记本、服务器等设备;还可以由运行在两个或两个以上设备的逻辑节点来实现本说明书实施例中的各项功能。另外,令牌管理者、生产者或消费者可以分别运行在不同的物理设备或逻辑节点上,其中的两方或三方也可以运行在同一个物理设备或逻辑节点上(如令牌管理者可以和某个生产者运行在同一个物理设备上),不做限定。
本说明书的实施例中,批处理速率的控制方法应用于令牌管理者的流程如图2所示,应用于生产者的流程如图3所示。
在令牌管理者一方,步骤210,根据限流参数生成用于预定周期的令牌。
限流参数是用来描述批处理速率上限的参数,可以根据实际应用场景中批处理任务的类型、生产者或消费者的具体实现等因素来确定要采用的具体参数。例如,限流参数可以是吞吐量(Throughput)、QPS(Query Per Second,每秒查询率)等参数。
预定周期是进行批处理速率控制的最小时间单位。一个预定周期总的批处理流量是根据限流参数来控制的,在预定周期内某个瞬间的批处理速率可能高于对应于限流参数的速率。可以根据实际应用场景中对瞬间批处理速率的承受能力来确定预定周期,预定周期越小,批处理瞬间速率的变化越平稳。
令牌管理者可以按照预定的方式来获取限流参数。例如,可以从配置信息中的预定存储位置获取,这样通过修改配置信息即可方便的更改限流参数。配置信息可以保存在令牌管理者本地,也可以由令牌管理者通过网络获取。
限流参数可以根据时间段来设置,即设置若干个预定时间段,每个预定时间段有各自对应的限流参数。不同预定时间段的限流参数可以相同,也可以不同。例如,当运行批处理任务的***还用于完成其他任务时,可以将其他任务的高峰时间段作为一个预定时间段,设置较慢速率的限流参数;将其他任务的低谷时间段作为另一个预定时间段,设置较快速率的限流参数。再如,可以将不进行批处理任务的时间段作为一个预定时间段,将该预定时间段的限流参数设置为速率为0。需要说明的是,每个预定时间段至少包括一个预定周期。
令牌管理者按照限流参数,生成用于预定周期的若干个令牌。令牌用来指示生产者能够向消费者分发的任务数量上限。具体的,令牌管理者将预定周期中在满足限流参数的条件下能够处理的最大任务总量分给若干个令牌,每个令牌具有一个确定的任务数量上限,所有令牌的任务数量上限的总和不超过上述最大任务总量。
可以约定每个令牌所指示的任务数量上限是一个固定值;也可以在令牌中携带该令牌的任务数量上限,这样不同令牌所指示的任务数量上限可以不同。令牌的具体形式参照现有技术实现,不再赘述。
在生产者一方,步骤310,向令牌管理者发送令牌请求。
当生产者启动后,在向缓冲区写入待处理的任务之前,向令牌管理者发送令牌请求。当生产者使用完上一个令牌指示的任务数量上限,在继续向缓冲区写入待处理的任务之前,向令牌管理者发送令牌请求。
在令牌管理者一方,步骤220,在某个预定周期内收到生产者的令牌请求后,如果该预定周期的令牌尚未发放完毕,向生产者发放令牌。
当令牌管理者在某个预定周期内收到生产者的令牌请求后,令牌管理者查询用于该预定周期的令牌是否有剩余,如果令牌尚未发放完毕,则向该生产者发放令牌,并将已发放的令牌从该预定周期的剩余令牌中扣减掉。令牌管理者可以一次向一个生产者发放一个到多个令牌,不做限定。
如果该预定周期的令牌发放完毕,令牌管理者可以不响应生产者的令牌请求;也可以向生产者回复无可用令牌,或者拒绝生产者的令牌请求。
当某个预定周期到时,如果该预定周期的令牌尚未发放完毕,根据实际应用场景的需要,可以令该预定周期尚未发放完毕的令牌失效,以确保对批处理速率的限制;也可以将该预定周期尚未发放完毕的令牌添加到下一个预定周期可以发放的令牌中,以便对批处理任务的完成总量提供更多保障。
在生产者,步骤320,在收到令牌管理者发放的令牌后,获取批处理任务并分发给消费者,获取或分发的批处理任务的数量不超过该令牌指示的任务数量上限。
向令牌管理者发送令牌请求的生产者如果收到令牌管理者返回的令牌,该生产者可以按照收到的令牌指示的任务数量上限,获取不超过该任务数量上限的批处理任务,通过写入缓冲区分发给消费者进行处理;该生产者也可以在获取若干批处理任务后,将不超过收到的令牌指示的任务数量上限的批处理任务通过写入缓冲区分发给消费者进行处理。
在生产者完成任务数量上限的任务获取和分发后,即使用完收到的令牌后,可以重新向令牌管理者发送令牌请求,申请继续进行批处理工作的下一个令牌。
如果该生产者没有收到令牌管理者发放的令牌,该生产者暂停分发批处理任务的工作,可以在等待预定延迟时间后重新向令牌管理者发送令牌请求。预定延迟时间可以参考预定周期来设置。没有收到发放的令牌的情形可以包括该生产者在等待一定时间后没有收到对令牌请求的响应、收到无可用令牌的响应、或拒绝令牌请求的响应等。
生产者获取批处理任务、分发批处理任务的具体方式可以根据实际应用场景的实现,参考现有技术实现,不做限定。例如,对数据库中的延时任务,可以将其放入延时队列中,延时队列中的任务在到期后才能从队列中被取走,生产者可以从延时队列中提取到期的延时任务。
消费者从缓冲区中获取批处理任务,根据实际应用场景中的业务需求对任务进行处理。消费者获取和处理任务的具体方式可参照现有技术实现,不再赘述。
可见,本说明书的实施例中,在生产者和消费者的并发架构中增加令牌管理者,根据限流参数确定预定周期内令牌管理者能够发放的令牌,由令牌管理者在预定周期内发放给生产者,而只有领到令牌的生产者才能按照令牌指示的任务数量上限向消费者分发任务,实现了并发架构下对批处理速率的精准控制。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书的一个应用示例中,网络服务提供商对延时任务数据库中到期的延时任务进行批处理,由于批处理时需要调用的某个业务接口吞吐量有限,需要对批处理的速率进行限制。该网络服务提供商的批处理***的结构如图4所示。
延时任务数据库中保存有需要进行批处理的延时任务。延时任务可以通过两种方式导入延时任务数据库中,一种是从离线数据库中直接导入延时任务数据库,另一种是由该网络服务提供商的应用通过延时任务数据库提供的接口在线写入。
延时队列数据库提供延时队列的视图,当延时队列中的延时任务到期后,生产者可以从延时队列中获取已到期的延时任务。
配置维护功能模块提供接口来添加批处理任务的配置信息,并保存设置完成的配置信息。配置信息中包括限流参数,本应用示例中采用的限流参数为QPS。
令牌管理者从配置维护功能模块读取限流参数QPS,基于QPS生成预定周期的令牌。设预定周期为1秒,每个令牌代表的任务数量上限为N(N为自然数),令牌管理者根据QPS即可得到一个预定周期可以发放的令牌总数,设为M(M为自然数)。
某个生产者在某个预定周期内向令牌管理者发送令牌请求。令牌管理者查询用于该预定周期的剩余令牌数量,如果大于0,则向该生产者发放1个令牌,并将用于该预定周期的剩余令牌数量减1。如果用于该预定周期的M个令牌已经发放完毕,则拒绝该生产者的令牌请求。
当该生产者收到令牌管理者发放的令牌后,从延时队列中提取到期的延时任务,写入缓冲区分发给消费者。在完成N个延时任务的获取和分发后,该生产者向令牌管理者发送新的令牌请求,申请继续进行批处理的下一个令牌。
当该生产者收到令牌管理者拒绝令牌请求的响应后,等待预定延迟时间(设为0.5秒),重新向令牌管理者发送令牌请求。
消费者从缓冲区中读取到期的延时任务,调用业务实现功能模块提供的接口对到期的延时任务进行业务处理,完成批处理工作。
与上述流程实现对应,本说明书的实施例还提供了一种应用于令牌管理者的批处理速率的控制装置,和一种应用于生产者的批处理速率的控制装置。这两种装置均可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的CPU、内存以及存储器之外,批处理速率的控制装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
图6所示为本说明书实施例提供的一种批处理速率的控制装置,应用于令牌管理者,所述装置包括令牌生成单元和令牌发放单元,其中:令牌生成单元用于根据限流参数生成用于预定周期的若干个令牌;所述令牌用来指示生产者能够向消费者分发的任务数量上限;令牌发放单元用于在某个预定周期内收到生产者的令牌请求后,如果所述预定周期的令牌尚未发放完毕,向生产者发放令牌。
可选的,所述装置还包括配置获取单元,用于从配置信息中获取限流参数。
可选的,所述限流参数包括:在若干个预定时间段的限流参数,所述预定时间段包括至少一个预定周期。
可选的,所述限流参数包括:每秒查询率QPS。
可选的,所述装置还包括令牌失效单元,用于在预定周期到时,失效尚未发放的令牌。
图7所示为本说明书实施例提供的一种批处理速率的控制装置,应用于生产者,所述装置包括令牌请求单元和令牌使用单元,其中:令牌请求单元用于向令牌管理者发送令牌请求;令牌使用单元用于在收到令牌管理者发放的令牌后,获取批处理任务并分发给消费者,所述获取或分发的批处理任务的数量不超过所述令牌指示的任务数量上限。
可选的,所述装置还包括:等待重试单元,用于当未收到发放的令牌时,等待预定延迟时间后向令牌管理者发送令牌请求。
可选的,所述令牌使用单元获取批处理任务包括:基于延时队列从数据库中获取到期的延时任务。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中应用于令牌管理者的批处理速率的控制方法的各个步骤。对应用于令牌管理者的批处理速率的控制方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中应用于生产者的批处理速率的控制方法的各个步骤。对应用于生产者的批处理速率的控制方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中应用于令牌管理者的批处理速率的控制方法的各个步骤。对应用于令牌管理者的批处理速率的控制方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中应用于生产者的批处理速率的控制方法的各个步骤。对应用于生产者的批处理速率的控制方法的各个步骤的详细描述请参见之前的内容,不再重复。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、***或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。