CN113672364B - 任务调度方法、装置、电子设备及存储介质 - Google Patents
任务调度方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113672364B CN113672364B CN202110881888.4A CN202110881888A CN113672364B CN 113672364 B CN113672364 B CN 113672364B CN 202110881888 A CN202110881888 A CN 202110881888A CN 113672364 B CN113672364 B CN 113672364B
- Authority
- CN
- China
- Prior art keywords
- task
- semaphore
- message
- idle
- occupied
- 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.)
- Active
Links
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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种任务调度方法、装置、电子设备及存储介质,其中,所述任务调度方法应用于服务器集群中的各节点服务器,所述方法包括:启动时初始化信号量;检测是否存在空闲信号量;在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量;在所述任务执行完成后,释放所述任务占用的信号量。本发明实施例提供的任务调度方法,能够灵活地对任务进行调度。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种任务调度方法、装置、电子设备及存储介质。
背景技术
服务器集群是指将很多服务器集中起来一起进行同一种服务。集群可以利用多台服务器进行并行计算从而获得很高的计算速度,也可以利用多台服务器并行处理任务,还可以用多台服务器做备份,从而使得任何一台服务器坏了整个服务器集群还是能正常运行。
随着系统的更新迭代和用户量逐渐增多,多任务作业调度及集群资源管理成为亟需解决的问题。传统的集群式中心化多任务调度方式为:由控制中心统一为集群中的各节点服务器分配任务。该种任务调度方式,当控制中心宕机或掉线时,整个调度系统将瘫痪。
可见,现有的任务调度方法受控制中心制约,任务调度时灵活性差。
发明内容
本发明实施例的目的在于提供一种任务调度方法,以提升任务调度的灵活性。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种任务调度方法,应用于服务器集群中的各节点服务器,所述方法包括:
启动时初始化信号量;
检测是否存在空闲信号量;
在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
在所述任务执行完成后,释放所述任务占用的信号量。
可选地,所述初始化信号量的步骤,包括:
启动时获取配置表,其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;从所述配置表中查找自身IP地址对应的并发任务数;设置初始化信号量数量为所述并发任务数。
可选地,在所述检测是否存在空闲信号量的步骤之后,所述方法还包括:
在不存在空闲信号量的情况下,预设时长后再次检测是否存在空闲信号量。可选地,在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务的步骤,包括:在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;使用rightPop()方法从消息队列中拉取一条消息,并执行所述消息对应的任务。
可选地,在所述任务执行完成后,释放所述任务占用的信号量的步骤,包括:在所述任务执行完成后,使用semaphore.release()语句释放所述任务占用的信号量。
在本发明实施的第二方面,还提供了一种任务调度方法,该方法应用于任务调度系统,该系统包括系统服务器和服务器集群中的各节点服务器,所述系统服务器包括前端设备和后端设备;该方法包括:所述前端设备确定待评估对象,并将所述待评估对象发送至所述后端设备;所述后端设备为所述待评估对象生成消息任务,并将所述消息任务添加至消息队列中进行管理;所述节点服务器在存在空闲信号量的情况下,从所述后端设备的消息队列中获取消息,执行所述消息对应的任务,并将被占用的空闲信号量状态变更为已占用;在所述任务执行完成后,释放所述任务占用的信号量,并将状态变更为空闲;其中,所述消息队列中的各消息由分布式锁控制,且所述消息队列中的消息按照先进先出规则被各子节点服务器获取。
可选地,该方法还包括:所述后端设备根据所述各节点服务器的资源配置,生成配置表,并根据所述各节点服务器的信号量状态来更新配置表;所述节点服务器在启动时,从后端设备处获取的配置表;并基于所述配置表中的并发任务数,初始化信号量;其中,所述配置表包括所述服务器集群中各节点服务器对应的并发任务数。
在本发明实施的第三方面,还提供了一种集群任务调度装置,应用于服务器集群中的各节点服务器,所述装置包括:
初始化模块,用于启动时初始化信号量;
检测模块,用于检测是否存在空闲信号量;
任务执行模块,用于在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
释放模块,用于在所述任务执行完成后,释放所述任务占用的信号量。
可选地,所述初始化模块,包括:
配置表获取子模块,用于启动时获取配置表;其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
查找子模块,用于从所述配置表中查找自身IP地址对应的并发任务数;
设置子模块,用于设置初始化信号量数量为所述并发任务数。
可选地,所述装置还包括:
调用模块,用于在所述检测模块检测是否存在空闲信号量之后,在不存在空闲信号量的情况下,预设时长后调用所述检测模块检测是否存在空闲信号量。
可选地,所述任务执行模块包括:
获取子模块,用于在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;
拉取子模块,用于使用rightPop()方法从单线程消息队列中拉取一条消息,并执行所述消息对应的任务。
可选地,所述释放模块具体用于:
在所述任务执行完成后,使用semaphore.release()语句释放所述任务占用的信号量。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的任务调度方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的任务调度方法。
本发明实施例提供的任务调度方案,服务器集群中的各节点服务器从消息队列中主动获取任务,任务调度不受限于任何其他服务器,各节点服务器能够灵活地对任务进行调度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中的一种任务调度方法的步骤流程图;
图2为本发明实施例中的又一种任务调度方法的步骤流程图;
图3为本发明实施例中的再一种任务调度方法的步骤流程图;
图4为本发明实施例中的消息队列示意图;
图5为本发明实施例中的一种任务调度装置的结构框图;
图6为本发明实施例中的另一种任务调度装置的结构框图;
图7为本发明实施例中的一种电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
本发明实施例通过在服务器集群中的各节点服务器内布局任务调度相关的计算机程序,各节点服务器可独立完成任务调度,不受限于控制中心进行任务调度,因此任务调度更加灵活。
图1为本发明实施例中的一种任务调度方法的步骤流程图。图1所示的任务调度方法执行于服务器集群中的节点服务器。
如图1所示,任务调度方法可以包括以下步骤:
步骤101:节点服务器启动时初始化信号量。
每个信号量用于处理一个任务,节点服务器初始化时创建的总信号量依据节点服务器可并发任务数确定。节点服务器的可并发任务数,可依据节点服务器的配置、使用年限或优先级等参数确定。
信号量用于线程控制,信号量被占用时可为该信号量分配一个线程,通过所分配的线程处理信号量对应的任务。
步骤102:节点服务器检测是否存在空闲信号量。
节点服务器初始化信号量后,节点服务器中包括N个空闲信号量,节点服务器先后占用N个空闲信号量中的各个空闲信号量,所占用的空闲信号量用于处理从消息队列中获取的消息对应的任务。其中,消息队列可由服务器集群中的系统服务器管理。
步骤103:节点服务器在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行该消息对应的任务。
其中,被占用的空闲信号量状态变更为已占用信号量,相应地,节点服务器存在的空闲信号量数量减一,已占用信号量增加一。消息队列中的每个消息对应一个任务,每个任务对应一个待评估对象,消息对应的任务具有处理耗时长、资源消耗大的特点。例如:待评估对象可以为剧本。
在节点服务器中初始化信号量全部被占用即不存在空闲信号量的情况下,可等待预设时长后再判断节点服务器中是否存在空闲信号量。预设时长可以由本领域技术人员根据实际需求进行设置,例如:设置为60秒、30秒或者45秒等。
消息队列中的消息按照先进先出规则获取,消息队列中的各消息由分布式锁控制。消息队列中的消息按照先进先出的规则获取,能够确保消息按生成时间先后顺序被获取。消息由分布式锁控制,可避免同一消息被多台子节点服务器重复处理。步骤104:节点服务器在任务执行完成后,释放任务占用的信号量。
占用的信号量被释放后,节点服务器中的空闲信号量增加一,相应地已占用信号量减一。
本发明实施例中以一个节点服务器调度任务的流程为例进行说明,在实际实现过程中,各节点服务器可以同时调度任务,各节点服务器在任务调度时无交集。
需要说明的是,本发明实施例提供的任务调度方法,不仅可以应用于不包含中心调度服务器的去中心化服务器集群环境中,还可以应用于包含中心调度服务器的服务器集群环境中,在中心调度服务器宕机的情况下,服务器集群中的各节点服务器则可启动本发明实施例提供的任务调度方法主动获取消息队列中的任务,以继续任务调度。
本发明实施例中服务器集群中的各节点服务器从消息队列中主动获取任务,任务调度不受限于任何其他服务器,各节点服务器能够灵活地对任务进行调度。
在一种可选地实施例中,节点服务器初始化信号量时,可通过如下方式:
首先,节点服务器获取配置表;
其中,配置表中配置有服务器集群中各节点服务器的IP地址对应的并发任务数,配置表由任务调度系统中的系统服务器管理,服务器集群中的各节点服务器在启动时分别从系统服务器侧获取配置表。任务调度系统包括系统服务器和服务器集群中的各节点服务器。
其次,从配置表中查找自身IP地址对应的并发任务数。
最后,节点服务器设置初始化信号量数量为并发任务数。
节点服务器初始化Semaphore信号量用于线程控制,信号量可以为Semaphore,Semaphore是一个计数信号量,其本质是“共享锁”。以并发任务数为n为例,节点服务器可通过如下计算机语句初始化信号量:
Semaphore semaphore=new Semaphore(n)
该种可选地初始化信号量的方式,能够对节点服务器并发的任务数进行限制,避免节点服务器并发任务数超出自身负荷而宕机。
在一种可选地实施例中,在检测是否存在空闲信号量之后,该方法还包括:在不存在空闲信号量的情况下,预设时长后再次检测是否存在空闲信号量。
在预设时长后再次检测节点服务器中是否存在空闲信号量之后,若节点服务器中仍未存在空闲信号量,可循环执行预设时长后再次检测是否存在空闲信号量的步骤,直至节点服务器中存在空闲信号量或连续循环检测次数超出预设次数为止。
该种可选地对空闲信号量进行检测的方式,能够即时的对空闲信号量进行利用,避免节点服务器资源浪费。
在一种可选地实施例中,在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行该消息对应的任务的方式,包括如下子流程:
首先,在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;
semaphore.acquire()语句用于请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire。
其次,使用rightPop()方法从消息队列中拉取一条消息,并执行消息对应的任务。
rightPop()方法会阻塞式从Redis list队列中移出一个元素,在Redis list队列中存储消息的情况下,所移出的元素则为消息。
该种可选地方式,能够有序的从消息列表中提取消息,避免消息遗漏或重复被提取。
在一种可选地实施例中,在任务执行完成后,释放任务占用的信号量的方式可以如下:
在任务执行完成后,使用semaphore.release()语句释放任务占用的信号量。
semaphore.release()语句用于释放信号量。需要说明的是,不仅可在任务完成后释放任务占用的信号量,还可以在任务执行失败的情况下,释放任务所占用的信号量。
该种可选地方式,可以及时释放已完成任务所占用的信号量,所释放的信号量作为空闲信号量可用于处理后续调度的任务,能够对信号量进行合理管理。
图2为本发明实施例中的又一种任务调度方法的步骤流程图。
图2所示的任务调度方法应用于服务器集群中的系统服务器。系统服务器包括前端设备和后端设备,本发明实施例中的任务调度方法具体包括如下步骤:
步骤201:前端设备确定待评估对象,并将待评估对象发送至后端设备。
待评估对象具有数据量大、评估耗时长、评估消耗节点服务器资源多的特点。待评估对象可以包括但不限于:剧本、小说或者视频等。
步骤202:后端设备为待评估对象消息任务,并将消息任务添加至消息队列中进行管理。
其中,每个待评估对象至少一个消息任务,节点服务器每次从消息队列中获取一个消息任务,节点服务器的处理线程与消息任务一一对应,每个处理线程对应一个信号量。
后端设备中添加有消息队列中间件,用于对消息队列进行管理,常用的消息队列中间件有kafka,rocketMQ,rabbitMQ和Redis等。鉴于本发明实施例中的消息队列为单线程消息队列,因此选择Redis作为消息队列中间件。相应地,服务器集群可以为Redis集群,消息队列可以为Redis list队列。Redis的数据存储在内存和部分文件中,所以读写速度非常快,因此Redis被广泛应用于缓存方向。
步骤201至步骤202为向消息队列中添加单个消息任务的流程,在实际实现过程中,系统服务器可为用户上传至前端设备的各待评估对象生成对应的消息任务,并添加至消息队列中,以供服务器集群中的各节点服务器并行消费各消息任务。
后端设备除可对消息队列进行管理外,还可以根据各节点服务器的资源配置,生成配置表,并根据各节点服务器的信号量状态来更新配置表;节点服务器在启动时,从后端设备处获取配置表;并基于配置表中的并发任务数,初始化信号量。
其中,配置表包括服务器集群中各节点服务器对应的并发任务数。在实际实现过程中,配置表的生成方式可以包括但不限于如下两种方式:方式一:用户在后端设备中手动输入信息,后端设备依据用户输入的信息生成配置表;方式二:后端设备获取各节点服务器的资源配置信息,依据获取的各资源配置信息生成配置表。
服务器集群中的各节点服务器执行任务调度方法时,初始化信号量后,在存在空闲信号量的情况下,从后端设备的消息队列中获取消息,执行消息对应的任务,并将被占用的空闲信号量状态变更为已占用;在任务执行完成后,释放任务占用的信号量,并将状态变更为空闲。各节点服务器各自从后端设备管理的消息队列中获取消息,无需中心调度服务器,可达到去中心化的效果。
下面,结合具体场景示例性的对本申请实施例提供的任务调度方法的流程进行说明。本申请实施例提供的任务调度方法应用于任务调度系统,该任务调度系统包括系统服务器和服务器集群中的各节点服务器,系统服务器包括前端设备和后端设备。
该具体场景为基于任务调度系统对用户例如编剧上传的剧本进行人工智能评估。编剧上传待评估剧本至前端设备,前设备将待评估剧本发送至后端设备,后端设备调用预设插件为用户上传的待评估剧本生成消息任务,并将消息任务添加至消息队列中,以供服务器集群中的各节点服务器对消息队列中的各消息任务对应的剧本进行评估,从而实现去中心化服务器集群的任务调度。
下面参照图3对本具体场景下的任务调度方法的步骤流程进行说明,具体包括如下步骤:
步骤301:前端设备确定待评估对象,并将待评估对象发送至后端设备。
后续以待评估对象为剧本为例对本具体实例进行说明。用户可通过账户登录前端设备,上传待评估剧本至前端设备,前端设备将待评估剧本发送至后端设备进行存储。
步骤302:后端设备为待评估对象消息任务,并将消息任务添加至消息队列中进行管理。
其中,每个待评估对象至少一个消息任务,节点服务器每次从消息队列中获取一个消息任务,节点服务器的处理线程与消息任务一一对应,每个处理线程对应一个信号量。
由于剧本评估所耗时长较长、所需消耗节点服务器资源较多,因此在对消息队列中的消息进行调配时需要考虑到剧本上传至前端设备的先后顺序,以及多节点服务器重复消费同一消息任务的问题,因此,本申请实施例中选择Redis用于对后端设备中的消息队列进行管理,Redis所管理的消息队列为Redis list队列,Redis list队列中的消息按照先进先出规则被各子节点服务器获取,且消息队列中的各消息由分布式锁控制。后端设备中的Redis可使用LeftPush方法把消息任务推进消息队列中进行排队,并从消息队列的头部压入数据。
步骤301至步骤302为向消息队列中添加单个消息任务的流程,在实际实现过程中,后端设备可为用户上传至前端设备的各待评估剧本生成对应的消息任务,并添加至消息队列中,以供服务器集群中的各节点服务器并行消费各消息任务。
步骤303:后端设备根据各节点服务器的资源配置,生成配置表。
其中,配置表包括服务器集群中各节点服务器对应的并发任务数,配置表中还可以包括各节点服务器的ID信息。
需要说明是,步骤303并不局限于在步骤302之后执行,还可以在步骤301之前执行。节点服务的资源配置可由用户手动输入至后端设备中,也可以在节点服务器启动后上传至后端设备,或者由后端设备主动从节点服务器侧获取。后端设备得到各节点服务器的配置信息后,生成配置表,以供节点服务再次启动时获取配置表。
服务器集群中的各节点服务器分别从后端设备的消息队列中获取任务进行处理,以实现去中心化的效果。
步骤304:节点服务器初始化信号量N。
本具体实例从单个节点服务器调度一个任务的角度,对任务调度方法进行说明,步骤304至步骤309的执行主体为服务器集群中的单个节点服务器。
后端设备使用配置表配置每个节点的网络地址IP和对应的可支持并发任务数N。在调度集群启动时,每个节点服务器从后端设备侧读取配置表,根据IP从配置表中查找自身IP对应的N值,初始化Semaphore信号量,所初始化的Semaphore信号量的数量为N,用于控制节点服务器所创建的线程数量,初始化语句可设置为:Semaphore semaphore=newSemaphore(N)。
步骤305:节点服务器判断是否有空闲信号量;若是,执行步骤306;若否,执行步骤307。
节点服务器判断自身已占用信号量是否已达到上限N,若未达到可确定存在空闲信号量。
步骤306:在有空闲信号量的情况下,节点服务器获取并占用一个空闲信号量;然后执行步骤308。
在有空闲信号量时,可使用semaphore.acquire()语句获取并占用一个空闲信号量,使用rightPop()方法从redis的list队列中拉取一条消息并执行其对应的任务即对该消息对应的剧本进行评估,此时该节点服务器的空闲信号量总数减一。
Redis list消息队列示意图如图4所示,用户创建的任务按照创建先后顺序依次存储至该队列中,各节点服务器分别从该队列中拉取消息。
步骤307:在无空闲信号量的情况下,休眠等待60秒。
休眠等待时长可由本领域技术人员根据实际需求进行设置,例如:等待40秒、50秒等。
休眠等待60秒后,再返回执行步骤305。
步骤308:节点服务器拉取消息并消费消息。
节点服务器从Redis list队列中拉取消息后,对消息进行分析确定消息对应的任务,对任务进行处理。本申请实施例中由于任务为待评估剧本,则对任务的处理为对待评估剧本进行评估。
步骤309:任务执行完成后,节点服务器释放对应的信号量。
任务执行完成后,可使用semaphore.release()语句释放所执行的任务占用的信号量,等待消费下一条消息。如果任务因为某种原因执行失败,同样释放该任务占用的信号量,不影响接下来的消息消费。
本具体实例中提供的任务调度方法,无需依赖控制中心统一为各节点服务器进行任务调度,因此可视为去中心化的调度方式。该种去中心化的调度方式,一方面可使得每个节点服务器独立管理自身资源;第二方面,用Semaphore信号量实现线程锁,使用线程锁巧妙进行任务的领取和排队机制,达到排队执行任务的目的,相比其他实现线程锁的方式,部署更方便快捷;第三方面,使用redis的list数据结构作为单线程消息队列,可以保证消息按序消费,消息和任务的解耦可以防止节点宕机导致系统崩溃,也可在系统运行中热部署新节点扩充集群。
图5为本发明实施例中的一种任务调度装置的结构框图。图5所示的任务调度装置应用于服务器集群中的各节点服务器。
如图5所示,任务调度装置可以包括以下模块:
初始化模块501,用于启动时初始化信号量;
检测模块502,用于检测是否存在空闲信号量;
任务执行模块503,用于在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
释放模块504,用于在所述任务执行完成后,释放所述任务占用的信号量。
图6为本发明实施例中的另一种任务调度装置的结构框图。图6所示的任务调度装置应用于服务器集群中的各节点服务器。
如图6所示,任务调度装置可以包括以下模块:
初始化模块601,用于启动时初始化信号量;
检测模块602,用于检测是否存在空闲信号量;
任务执行模块603,用于在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
释放模块604,用于在所述任务执行完成后,释放所述任务占用的信号量。
可选地,所述初始化模块601包括:
配置表获取子模块6011,用于启动时获取配置表,其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
查找子模块6012,用于从所述配置表中查找自身IP地址对应的并发任务数,其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
设置子模块6013,用于设置初始化信号量数量为所述并发任务数。
可选地,所述装置还包括如下模块:
调用模块605,用于在所述检测模块602检测是否存在空闲信号量之后,在不存在空闲信号量的情况下,预设时长后调用所述检测模块检测是否存在空闲信号量。
可选地,所述任务执行模块603包括:
获取子模块6031,用于在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;
拉取子模块6032,用于使用rightPop()方法从消息队列中拉取一条消息,并执行所述消息对应的任务。
可选地,所述释放模块604具体用于:在所述任务执行完成后,使用semaphore.release()语句释放所述任务占用的信号量。
本申请实施例中,一方面,设置在节点服务器中的任务调度装置从单线程消息队列中主动获取任务,任务调度不受限于任何其他服务器,各节点服务器能够灵活地对任务进行调度。再一方面,通过在节点服务器中初始化信号量,能够对节点服务器并发任务数量进行限制,避免节点服务器因并发任务量过大而崩溃。
本发明实施例还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信。
存储器703,用于存放计算机程序;
处理器701,用于执行存储器703上所存放的程序时,实现如下步骤:
启动时初始化信号量;
检测是否存在空闲信号量;
在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
在所述任务执行完成后,释放所述任务占用的信号量。
可选地,所述初始化信号量包括:
启动时获取配置表;从所述配置表中查找自身IP地址对应的并发任务数,其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
设置初始化信号量数量为所述并发任务数。
可选地,在所述检测是否存在空闲信号量之后,还包括:
在不存在空闲信号量的情况下,预设时长后再次检测是否存在空闲信号量。
可选地,在存在空闲信号量的情况下,从单线程消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务包括:
在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;
使用rightPop()方法从消息队列中拉取一条消息,并执行所述消息对应的任务。
可选地,在所述任务执行完成后,释放所述任务占用的信号量包括:
在所述任务执行完成后,使用semaphore.release()语句释放所述任务占用的信号量。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的任务调度方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的任务调度方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种任务调度方法,其特征在于,应用于服务器集群中的各节点服务器,所述方法包括:
启动时获取配置表,其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
从所述配置表中查找自身IP地址对应的并发任务数;
设置初始化信号量数量为所述并发任务数;
检测是否存在空闲信号量;
在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
在所述任务执行完成后,释放所述任务占用的信号量。
2.根据权利要求1所述的方法,其特征在于,在所述检测是否存在空闲信号量的步骤之后,所述方法还包括:
在不存在空闲信号量的情况下,预设时长后再次检测是否存在空闲信号量。
3.根据权利要求1所述的方法,其特征在于,在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务的步骤,包括:
在存在空闲信号量的情况下,使用semaphore.acquire()语句获取并占用一个空闲信号量;
使用rightPop()方法从消息队列中拉取一条消息,并执行所述消息对应的任务。
4.根据权利要求1所述的方法,其特征在于,在所述任务执行完成后,释放所述任务占用的信号量的步骤,包括:
在所述任务执行完成后,使用semaphore.release()语句释放所述任务占用的信号量。
5.一种任务调度方法,其特征在于,该方法应用于任务调度系统,该系统包括系统服务器和服务器集群中的各节点服务器,所述系统服务器包括前端设备和后端设备;该方法包括:
所述前端设备确定待评估对象,并将所述待评估对象发送至所述后端设备;
所述后端设备为所述待评估对象生成消息任务,并将所述消息任务添加至消息队列中进行管理;
所述节点服务器在存在空闲信号量的情况下,从所述后端设备的消息队列中获取消息,执行所述消息对应的任务,并将被占用的空闲信号量状态变更为已占用;在所述任务执行完成后,释放所述任务占用的信号量,并将状态变更为空闲;
其中,所述消息队列中的各消息由分布式锁控制,且所述消息队列中的消息按照先进先出规则被各子节点服务器获取;
所述后端设备根据所述各节点服务器的资源配置,生成配置表,并根据所述各节点服务器的信号量状态来更新配置表;
所述节点服务器在启动时,从后端设备处获取的配置表;并基于所述配置表中的并发任务数,初始化信号量;其中,所述配置表包括所述服务器集群中各节点服务器对应的并发任务数。
6.一种任务调度装置,其特征在于,应用于服务器集群中的各节点服务器,所述装置包括:
初始化模块,用于启动时初始化信号量;
检测模块,用于检测是否存在空闲信号量;
任务执行模块,用于在存在空闲信号量的情况下,从消息队列中获取一条消息并占用一个空闲信号量执行所述消息对应的任务,其中,被占用的所述空闲信号量状态变更为已占用信号量,每个任务对应一个待评估对象,所述消息队列中的消息按照先进先出规则获取,所述消息队列中的各消息由分布式锁控制;
释放模块,用于在所述任务执行完成后,释放所述任务占用的信号量;
所述初始化模块,包括:
配置表获取子模块,用于启动时获取配置表;其中,所述配置表中配置有所述服务器集群中各节点服务器的IP地址对应的并发任务数;
查找子模块,用于从所述配置表中查找自身IP地址对应的并发任务数;
设置子模块,用于设置初始化信号量数量为所述并发任务数。
7.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一项所述的方法步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881888.4A CN113672364B (zh) | 2021-08-02 | 2021-08-02 | 任务调度方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881888.4A CN113672364B (zh) | 2021-08-02 | 2021-08-02 | 任务调度方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113672364A CN113672364A (zh) | 2021-11-19 |
CN113672364B true CN113672364B (zh) | 2023-09-01 |
Family
ID=78541150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110881888.4A Active CN113672364B (zh) | 2021-08-02 | 2021-08-02 | 任务调度方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672364B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101029788B1 (ko) * | 2010-10-22 | 2011-04-19 | 삼성탈레스 주식회사 | 미들웨어의 레이어 간 메시지 전달 방법 및 이를 행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
CN109815087A (zh) * | 2019-01-07 | 2019-05-28 | 平安科技(深圳)有限公司 | 任务处理进程监控方法、装置、计算机设备和存储介质 |
CN110018892A (zh) * | 2019-03-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 基于线程资源的任务处理方法及相关装置 |
CN111782404A (zh) * | 2020-07-21 | 2020-10-16 | 深圳市金蝶天燕云计算股份有限公司 | 一种数据处理方法及相关设备 |
CN112486702A (zh) * | 2020-11-27 | 2021-03-12 | 中船重工(武汉)凌久电子有限责任公司 | 基于多核多处理器并行系统的全局消息队列实现方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7644213B2 (en) * | 2007-06-05 | 2010-01-05 | Verigy (Singapore) Pte. Ltd. | Resource access manager for controlling access to a limited-access resource |
AU2014268246A1 (en) * | 2014-11-28 | 2016-06-16 | Canon Kabushiki Kaisha | Reverting tightly coupled threads in an over-scheduled system |
US11216315B2 (en) * | 2018-02-21 | 2022-01-04 | Rubrik, Inc. | Distributed semaphore with a different keys to reduce contention for dynamic reservation of disk space |
-
2021
- 2021-08-02 CN CN202110881888.4A patent/CN113672364B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101029788B1 (ko) * | 2010-10-22 | 2011-04-19 | 삼성탈레스 주식회사 | 미들웨어의 레이어 간 메시지 전달 방법 및 이를 행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체 |
CN102567096A (zh) * | 2011-12-30 | 2012-07-11 | 中国科学院软件研究所 | 一种在多任务环境下防止死锁的互斥信号量管理方法 |
CN109815087A (zh) * | 2019-01-07 | 2019-05-28 | 平安科技(深圳)有限公司 | 任务处理进程监控方法、装置、计算机设备和存储介质 |
CN110018892A (zh) * | 2019-03-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 基于线程资源的任务处理方法及相关装置 |
CN111782404A (zh) * | 2020-07-21 | 2020-10-16 | 深圳市金蝶天燕云计算股份有限公司 | 一种数据处理方法及相关设备 |
CN112486702A (zh) * | 2020-11-27 | 2021-03-12 | 中船重工(武汉)凌久电子有限责任公司 | 基于多核多处理器并行系统的全局消息队列实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113672364A (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7192103B2 (ja) | データ処理方法及び装置、及び、コンピューティングノード | |
CN105700939B (zh) | 一种分布式系统中多线程同步的方法和系统 | |
CN109471705B (zh) | 任务调度的方法、设备及系统、计算机设备 | |
CN107590072B (zh) | 一种应用开发和测试的方法和装置 | |
CN109150987B (zh) | 基于主机层和容器层的两层式容器集群弹性扩容方法 | |
US20190213040A1 (en) | Workflow scheduling system, workflow scheduling method, and electronic apparatus | |
JPWO2007072544A1 (ja) | 情報処理装置、計算機、リソース割り当て方法及びリソース割り当てプログラム | |
CN104092719A (zh) | 文件传输方法、装置及分布式集群文件系统 | |
CN116243995B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
CN114138434B (zh) | 一种大数据任务调度系统 | |
US20210311782A1 (en) | Thread scheduling for multithreaded data processing environments | |
CN113986534A (zh) | 任务调度方法、装置、计算机设备和计算机可读存储介质 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN113886069A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN111459622A (zh) | 调度虚拟cpu的方法、装置、计算机设备和存储介质 | |
CN113672364B (zh) | 任务调度方法、装置、电子设备及存储介质 | |
CN115712572A (zh) | 任务的测试方法、装置、存储介质及电子装置 | |
CN116166421A (zh) | 分布式训练任务的资源调度方法及其设备 | |
CN113254143A (zh) | 虚拟化网络功能网元编排调度方法、装置和系统 | |
CN113535361A (zh) | 任务调度方法、装置、设备及存储介质 | |
CN112015515A (zh) | 一种虚拟网络功能的实例化方法及装置 | |
CN115794449B (zh) | 动态线程池构建方法、远程过程调用方法及装置 | |
CN114915659B (zh) | 网络请求处理方法、装置、电子设备及存储介质 | |
CN118277122A (zh) | 一种分布式任务调度方法及平台 | |
CN116506430A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |