基于Actor模型的任务调度方法、装置转让专利
申请号 : CN202011471384.7
文献号 : CN112612604B
文献日 : 2022-03-22
发明人 : 韩志华 , 赵孔明
申请人 : 上海哔哩哔哩科技有限公司
摘要 :
权利要求 :
1.一种基于Actor模型的任务调度方法,其特征在于,所述Actor模型包括第一Actor、第二Actor及第三Actor,所述方法包括:在当前任务触发后,对所述当前任务进行初始化,并在初始化完成后,将所述当前任务的状态修改为待运行状态;
将所述待运行状态以第一消息的形式发送给所述第一Actor;
通过所述第一Actor根据所述第一消息判断所述当前任务是否处于已就绪状态,并在判定出所述当前任务处于已就绪状态,将所述已就绪状态以第二消息的形式发送给所述第二Actor;
通过所述第二Actor根据所述第二消息确定执行所述当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所述已分发状态以第三消息的形式发送给所述第三Actor;
通过所述第三Actor根据所述第三消息将所述当前任务发送给所述执行节点,以通过所述执行节点执行所述当前任务。
2.根据权利要求1所述的基于Actor模型的任务调度方法,其特征在于,所述Actor模型还包括第四Actor,所述通过所述第二Actor根据所述第二消息确定执行所述当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所述已分发状态以第三消息的形式发送给所述第三Actor包括:通过所述第二Actor根据所述第二消息确定执行所述当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所述已分发状态以第四消息的方式发送给所述第四Actor;
通过所述第四Actor根据所述第四消息判断创建所述当前任务的用户所拥有的任务中在当前时刻正被执行的任务数量是否超过第一预设阈值,若判定出未超过所述第一预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor。
3.根据权利要求2所述的基于Actor模型的任务调度方法,其特征在于,所述Actor模型还包括第五Actor,所述通过所述第四Actor根据所述第四消息判断创建所述当前任务的用户所拥有的任务中在当前时刻正被执行的任务数量是否超过第一预设阈值,若判定出未超过所述第一预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor包括:通过所述第四Actor根据所述第四消息判断创建所述当前任务的用户所拥有的任务中在当前时刻正被执行的任务数量是否超过第一预设阈值,若判定出未超过所述第一预设阈值,将所述已分发状态以第五消息的方式发送给所述第五Actor;
通过所述第五Actor根据所述第五消息判断所述用户所在的部门所拥有的任务中在当前时刻正被执行的任务数量是否超过第二预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor。
4.根据权利要求3所述的基于Actor模型的任务调度方法,其特征在于,所述Actor模型还包括第六Actor,所述通过所述第五Actor根据所述第五消息判断所述用户所在的部门所拥有的任务中在当前时刻正被执行的任务数量是否超过第二预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor包括:通过所述第五Actor根据所述第五消息判断所述用户所在的部门所拥有的任务中在当前时刻正被执行的任务数量是否超过第二预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发状态以第六消息的形式发送给所述第六Actor;
通过所述第六Actor根据所述第六消息将所述当前任务存储至预设的队列中,并将所述已分发状态以第三消息的形式发送给所述第三Actor。
5.根据权利要求1所述的基于Actor模型的任务调度方法,其特征在于,所述方法还包括:
通过所述第三Actor接收所述执行节点返回的所述当前任务的执行状态信息,并在所述执行状态信息为执行失败状态时,将所述执行失败状态以第七消息的形式发送给所述第一Actor。
6.根据权利要求1至5任一项所述的基于Actor模型的任务调度方法,其特征在于,所述方法还包括:
对所述Actor模型中的所有Actor进行监控,并在监控到Actor出现故障时,调用预设的恢复策略对出现故障的Actor进行处理,以使出现故障的Actor恢复正常。
7.根据权利要求1所述的基于Actor模型的任务调度方法,其特征在于,当所述Actor模型中的Actor检测到当前待消费的消息数量大于预设数量时,则对相同状态的消息进行压缩处理。
8.一种基于Actor模型的任务调度装置,所述Actor模型包括第一Actor、第二Actor及第三Actor,其特征在于,包括:初始化模块,用于在当前任务触发后,对所述当前任务进行初始化,并在初始化完成后,将所述当前任务的状态修改为待运行状态;
第一发送模块,用于将所述待运行状态以第一消息的形式发送给所述第一Actor;
第二发送模块,用于通过所述第一Actor根据所述第一消息判断所述当前任务是否处于已就绪状态,并在判定出所述当前任务处于已就绪状态,将所述已就绪状态以第二消息的形式发送给所述第二Actor;
第三发送模块,用于通过所述第二Actor根据所述第二消息确定执行所述当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所述已分发状态以第三消息的形式发送给所述第三Actor;
第四发送模块,用于通过所述第三Actor根据所述第三消息将所述当前任务发送给所述执行节点,以通过所述执行节点执行所述当前任务。
9.一种计算机设备,所述计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的基于Actor模型的任务调度方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至7任一项所述的基于Actor模型的任务调度方法的步骤。
说明书 :
基于Actor模型的任务调度方法、装置
技术领域
背景技术
同步机制, 以保障临界资源的完整性和一致性。单机的进程同步和线程同步有很多可用的
互斥方案,比 如互斥锁、信号量和条件变量等。但这些单机下的互斥方案在多机上是无法
使用的,因为分 布式系统的组件运行在不同的机器上,使得其不在统一的运行环境中。
发明内容
实现方式 仍可能会出现抢锁,及不能做到状态隔离的问题。
所述第二 Actor;
给所述第三 Actor;
及将 所述已分发状态以第三消息的形式发送给所述第三Actor包括:
给所述第四 Actor;
预设阈值, 则将所述已分发状态以第三消息的形式发送给所述第三Actor。
超过 第一预设阈值,若判定出未超过所述第一预设阈值,则将所述已分发状态以第三消息
的形式 发送给所述第三Actor包括:
预设阈值, 将所述已分发状态以第五消息的方式发送给所述第五Actor;
阈值,则将 所述已分发状态以第三消息的形式发送给所述第三Actor。
第二 预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发状态以第三消息的形
式发送 给所述第三Actor包括:
阈值,则将 所述已分发状态以第六消息的形式发送给所述第六Actor;
所述第一 Actor。
消息的形 式发送给所述第二Actor;
三消息的 形式发送给所述第三Actor;
序时实现 上述方法的步骤。
当前任 务是否处于已就绪状态,并在判定出所述当前任务处于已就绪状态,将所述已就绪
状态以第 二消息的形式发送给所述第二Actor;通过所述第二Actor根据所述第二消息确
定执行所述 当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所
述已分发状态 以第三消息的形式发送给所述第三Actor;通过所述第三Actor根据所述第
三消息将所述当 前任务发送给所述执行节点,以通过所述执行节点执行所述当前任务。本
实施例中,由于各 个Actor之间是通过消息的方式来进行通信的,而通过消息通信的好处
就是不会产生数据竞 争的问题,因此,本申请可以无需借助锁便可以实现任务的调度。此
外,由于Actor模型中 的各个Actor之间的状态是相互隔离的,以及各个Actor之间通过消
息进行交互,因此,本 申请也可以避免基于分布式锁的实现方式也可能会出现抢锁的问题
以及可以实现调度高并 发、异步化,任务进行高效流转,减少系统开销。
附图说明
的形式 发送给所述第三Actor的步骤细化流程示意图;
超过所述第 一预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor的
步骤细化流程 示意图;
所述第二预 设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor的步骤
细化流程示意 图;
具体实施方式
例中所描述 的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所
附权利要求书 中所详述的、本公开的一些方面相一致的装置和方法的例子。
数形式,除 非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指并
包含一个或多 个相关联的列出项目的任何或所有可能组合。
离本公 开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称
为第一信 息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或
“当……时”或“响 应于确定”。
系统包 括基础层、策略层、状态机层、消息层。其中,基础层用于提供基础工具与监控功能;
策略 层用于配置调度策略;状态机层包括多个Actor,用于进行任务状态流转;消息层用于
对消 息进行存储。在本实施例中,用户可以在策略层配置策略,这样,状态机层可以根据策
略层 配置的策略进行任务处理流转。基础层中的监控服务可以时刻监控状态机的状态,以
保障调 度系统的稳定性。调度系统中的各个层具体可以由不同的组件组成,包括Actor管
理器、消 息箱、消息处理器、消息执行器、监控管理等。其中,
Actor,分 别为第一Actor、第二Actor及第三Actor。其中,每一个Actor是一个最基本的计
算单元, 它能接收一个消息并且基于其执行计算。Actor之间相互隔离,它们不互相共享内
存,它们 通过各自的地址相互发送消息。此外,每个Actor都有一个mailbox,用于存储消
息,Actor 之间通过消息进行流转计算。当Actor收到消息后首先存储在自己的mailbox中,
然后Actor 从自己的mailbox中顺序消费消息,并在处理结束后可以向其他Actor发送消
息。
点的 时候,该当前任务就会被触发。
务状态的 流转,即在将待运行状态流转至第一Actor时,需要将该待运行状态打包成第一
消息,然后, 将该第一消息发送给第一Actor。
发送给 所述第二Actor。
所有上 游都准备好了。若检测到当前任务所依赖的所有上游都已经运行成功,则可以判定
当前任务 处于已就绪状态。
式发送 给所述第三Actor。
所述 执行节点时,可以根据所有执行节点的状态来确定执行所述当前任务的执行节点。具
体而言, 所述第二Actor可以查询所以执行节点的状态来确定各个执行节点是否处于空闲
状态,若执 行节点处于空闲状态,则可以从处于空闲状态的执行节点中选择出一个执行节
点来执行所述 当前任务。在另一实施方式中,所述第二Actor在确定所述执行节点时,也可
以根据所有执 行节点的负载情况来确定执行所述当前任务的执行节点。具体而言,所述第
二Actor可以查 询所以执行节点的负载情况来获取各个执行节点当前的负载情况,之后可
以对各个执行节点 的负载情况进行排序,最后选择负载最低的执行节点作为执行所述当
前任务的执行节点。
转。
状态修 改为已分发状态,以及将所述已分发状态以第三消息的形式发送给所述第三Actor
包括:
式发送 给所述第四Actor。
以便 所述第四Actor根据该第四消息判定是否需要对当前任务进行限流处理。
所述第一 预设阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor。
数量是否 超过第一预设阈值,若判定出未超过所述第一预设阈值,则将所述已分发状态以
第三消息的 形式发送给所述第三Actor。
过所 述第一预设阈值,所述第四Actor会将所述已分发状态以第三消息的形式发送给所述
第三 Actor;若N值大于所述第一预设阈值n,则判定出超过所述第一预设阈值,所述第四
Actor 不会将所述已分发状态以第三消息的形式发送给所述第三Actor,而会继续判断创
建所述当 前任务的用户所拥有的任务中在当前时刻正被执行的任务数量是否超过第一预
设阈值,直到 判定出未超过所述第一预设阈值,才会将所述已分发状态以第三消息的形式
发送给所述第三 Actor。
过所述第一 预设阈值,才会将所述已分发状态以第三消息的形式发送给所述第三Actor,
以实现任务状 态的流转,在判定出超过所述第一预设阈值时,不会将所述已分发状态以第
三消息的形式发 送给所述第三Actor,从而实现用户级别的任务限流。
刻正被执 行的任务数量是否超过第一预设阈值,若判定出未超过所述第一预设阈值,则将
所述已分发 状态以第三消息的形式发送给所述第三Actor包括:
所述第一 预设阈值,将所述已分发状态以第五消息的方式发送给所述第五Actor。
送给所述 第五Actor,由五Actor判定是否需要将所述已分发状态以第三消息的形式发送
给所述第三 Actor。
第二预设 阈值,则将所述已分发状态以第三消息的形式发送给所述第三Actor。
是否超过 第二预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发状态以第三
消息的形式 发送给所述第三Actor。
例,部门A所拥有的任务总共有150个,且在当前时刻正在被执行的任务数量为M个, 若M值
小于或者等于所述第二预设阈值m,则判定出未超过所述第二预设阈值,所述第五 Actor会
将所述已分发状态以第三消息的形式发送给所述第三Actor;若M值大于所述第二 预设阈
值m,则判定出超过所述第二预设阈值,所述第五Actor不会将所述已分发状态以第 三消息
的形式发送给所述第三Actor,而会继续判断所述用户所在的部门所拥有的任务中在 当前
时刻正被执行的任务数量是否超过第二预设阈值,直到判定出未超过所述第二预设阈 值,
才会将所述已分发状态以第三消息的形式发送给所述第三Actor。
述第二预设 阈值,才会将所述已分发状态以第三消息的形式发送给所述第三Actor,以实
现任务状态的 流转,在判定出超过所述第二预设阈值时,不会将所述已分发状态以第三消
息的形式发送给 所述第三Actor,从而实现部门级别的任务限流。
被执行的 任务数量是否超过第二预设阈值,若判定出未超过所述第二预设阈值,则将所述
已分发状态 以第三消息的形式发送给所述第三Actor包括:
第二预设 阈值,则将所述已分发状态以第六消息的形式发送给所述第六Actor。
式发送给 所述第六Actor。
Mailbox 中消费消息,并在消费到所述第三消息时,即可以从队列中顺序取出存储在其中
的任务,然 后,将任务发给执行节点进行执行,并在执行节点执行任务成功后,继续从队列
中取出下一 个任务发给执行节点进行执行。
中取出任 务,从而可以避免任务在执行过程中出现抢锁的问题。
当前任 务是否处于已就绪状态,并在判定出所述当前任务处于已就绪状态,将所述已就绪
状态以第 二消息的形式发送给所述第二Actor;通过所述第二Actor根据所述第二消息确
定执行所述 当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所
述已分发状态 以第三消息的形式发送给所述第三Actor;通过所述第三Actor根据所述第
三消息将所述当 前任务发送给所述执行节点,以通过所述执行节点执行所述当前任务。本
实施例中,由于各 个Actor之间是通过消息的方式来进行通信的,而通过消息通信的好处
就是不会产生数据竞 争的问题,因此,本申请可以无需借助锁便可以实现任务的调度。此
外,由于Actor模型中 的各个Actor之间的状态是相互隔离的,以及各个Actor之间通过消
息进行交互,因此,本 申请也可以避免基于分布式锁的实现方式也可能会出现抢锁的问
题,以及可以实现调度高并 发、异步化,任务进行高效流转,减少系统开销。
所述第一 Actor。
是否为执 行失败状态,若是,则会将该执行失败状态以第七消息的形式发送给所述第一
Actor,以便 可以再次对所述当前任务进行执行。
第三 Actor即会将所述执行失败状态以第七消息的形式发送给所述第一Actor,以便该当
前任务可 以再次重头开始进行执行。
常。在 另一实施方式中,该恢复策略也可以为对调度系统的内部状态重置,然后重新分配
资源,生 成一个新的Actor来替代该出现故障的Actor。
将最新 的消息发送给下一个Actor进行处理。
理时,可 以只处理一条最新的消息。
机程序 指令被处理器执行时,可以实现本申请各实施例的基于Actor模型的任务调度功
能。在一些 实施例中,基于该计算机程序指令各部分所实现的特定的操作,基于Actor模型
的任务调度 装置60可以被划分为一个或多个模块。例如,在图6中,所述基于Actor模型的
任务调度 装置60可以被分割成初始化模块61、第一发送模块62、第二发送模块63、第三发
送模块 64及第四发送模块65。其中:
二消息的 形式发送给所述第二Actor;
第三消息 的形式发送给所述第三Actor;
述当 前任务的状态修改为已分发状态,以及将所述已分发状态以第四消息的方式发送给
所述第四 Actor;通过所述第四Actor根据所述第四消息判断创建所述当前任务的用户所
拥有的任务中 在当前时刻正被执行的任务数量是否超过第一预设阈值,若判定出未超过
所述第一预设阈 值,则将所述已分发状态以第三消息的形式发送给所述第三Actor。
务中在 当前时刻正被执行的任务数量是否超过第一预设阈值,若判定出未超过所述第一
预设阈值, 将所述已分发状态以第五消息的方式发送给所述第五Actor;通过所述第五
Actor根据所述 第五消息判断所述用户所在的部门所拥有的任务中在当前时刻正被执行
的任务数量是否超 过第二预设阈值,若判定出未超过所述第二预设阈值,则将所述已分发
状态以第三消息的形 式发送给所述第三Actor。
在当前 时刻正被执行的任务数量是否超过第二预设阈值,若判定出未超过所述第二预设
阈值,则将 所述已分发状态以第六消息的形式发送给所述第六Actor;通过所述第六Actor
根据所述第 六消息将所述当前任务存储至预设的队列中,并将所述已分发状态以第三消
息的形式发送给 所述第三Actor。
消息的形 式发送给所述第一Actor。
复 正常。
当前任 务是否处于已就绪状态,并在判定出所述当前任务处于已就绪状态,将所述已就绪
状态以第 二消息的形式发送给所述第二Actor;通过所述第二Actor根据所述第二消息确
定执行所述 当前任务的执行节点,并将所述当前任务的状态修改为已分发状态,以及将所
述已分发状态 以第三消息的形式发送给所述第三Actor;通过所述第三Actor根据所述第
三消息将所述当 前任务发送给所述执行节点,以通过所述执行节点执行所述当前任务。本
实施例中,由于各 个Actor之间是通过消息的方式来进行通信的,以及各个Actor之间通过
消息进行交互,因 此,本申请也可以避免基于分布式锁的实现方式也可能会出现抢锁的问
题,以及可以实现调 度高并发、异步化,任务进行高效流转,减少系统开销。
或者存 储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是平板电脑、笔记
本电脑、 台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独
立的服务 器,或者多个服务器所组成的服务器集群)等。如图7所示,计算机设备20至少包
括但不 限于:可通过系统总线相互通信链接存储器120、处理器121、网络接口123。其中:
储器(例 如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、 只读
存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、 磁性存储
器、磁盘、光盘等。在一些实施例中,存储器120可以是计算机设备20的内部存 储模块,例如
该计算机设备20的硬盘或内存。在另一些实施例中,存储器120也可以是计 算机设备20的
外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media
Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card) 等。当
然,存储器120还可以既包括计算机设备20的内部存储模块也包括其外部存储设备。 本实
施例中,存储器120通常用于存储安装于计算机设备20的操作系统和各类应用软件, 例如
基于Actor模型的任务调度方法的程序代码等。此外,存储器120还可以用于暂时地存 储已
经输出或者将要输出的各类数据。
算机设 备20的总体操作,例如执行与计算机设备20进行数据交互或者通信相关的控制和
处理等。 本实施例中,处理器121用于运行存储器120中存储的程序代码或者处理数据。
算机 设备20与外部终端相连,在计算机设备20与外部终端之间的建立数据传输通道和通
信链接 等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统
(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code
Division Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi‑Fi等无
线或有线 网络。
成本 申请。
的步骤。
(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁 性存储器、磁
盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部 存储单元,例
如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可 以是计算机
设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡 (Smart Media
Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当
然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外 部存储设
备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统 和各类
应用软件,例如实施例中的基于Actor模型的任务调度方法的程序代码等。此外,计 算机可
读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
可以位于 一个地方,或者也可以分布到至少两个网络单元上。可以根据实际的需要筛选出
其中的部分 或者全部模块来实现本申请实施例方案的目的。本领域普通技术人员在不付
出创造性的劳动 的情况下,即可以理解并实施。
以理解实 现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬
件来完成,所 述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如
上述各方法的实 施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体
(Read‑OnlyMemory, ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
然可以 对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征
进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技
术方案的范围。