CN117453365A - 物联网设备的任务调度方法及分布式任务调度*** - Google Patents
物联网设备的任务调度方法及分布式任务调度*** Download PDFInfo
- Publication number
- CN117453365A CN117453365A CN202311529718.5A CN202311529718A CN117453365A CN 117453365 A CN117453365 A CN 117453365A CN 202311529718 A CN202311529718 A CN 202311529718A CN 117453365 A CN117453365 A CN 117453365A
- Authority
- CN
- China
- Prior art keywords
- task
- information
- queue
- lock
- executed
- 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
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000012545 processing Methods 0.000 claims description 9
- 238000012217 deletion Methods 0.000 claims description 4
- 230000037430 deletion Effects 0.000 claims description 4
- 238000012986 modification Methods 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010195 expression analysis Methods 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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
- G06F9/4887—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/521—Atomic
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Telephonic Communication Services (AREA)
Abstract
本申请提供了物联网设备的任务调度方法及分布式任务调度***,方法包括:kafka集群模块接收并存储来自物联网平台的携带有任务执行时间信息的待调度任务信息;kafka消费者实例从kafka集群模块获取待调度任务信息并发送至任务调度器实例;任务调度器实例根据任务执行时间信息生成待执行任务信息,并通过任务入队接口将待执行任务信息添加至无锁任务队列;任务通知实例通过任务出队接口从无锁任务队列获取待执行任务信息并发送至对应的至少一个目标物联网设备,以使各目标物联网设备根据待执行任务信息执行任务。本申请提供的上述物联网设备的任务调度方法及分布式任务调度***能够提高任务分发的及时性和任务调度效率。
Description
技术领域
本申请涉及物联网技术领域,尤其涉及一种物联网设备的任务调度方法及分布式任务调度***。
背景技术
在物联网技术不断发展的背景下,物联网设备的种类不断增加,包括工业、智能家居、水利、电力等各类设备,种类繁多。在物联网中,从物联网设备定期读取状态数据是必不可少的操作。
现有的实现方式通常是采用任务调度的模式,物联网设备根据任务进行数据上报,面对大量的物联网设备对应的大量的数据上报任务,为有效协调任务的调度,现有方案中通常采用锁机制来实现任务分发。然而,采用锁机制来实现任务分发调度时,可能存在锁竞争、数据库操作延迟等性能问题,使得任务调度效率较低,尤其不适应大量的任务需要调度的情形。因此,亟需一种物联网设备的任务调度方案,旨在协调需要调度的大量任务,提高任务分发的及时性和任务调度效率,提高对大量任务调度的协调性和有序性。
发明内容
本申请实施例提供了物联网设备的任务调度方法及分布式任务调度***,能够协调需要调度的大量任务,提高任务分发的及时性和任务调度效率,提高对大量任务调度的协调性和有序性。
第一方面,本申请实施例提供了一种物联网设备的任务调度方法,应用于分布式任务调度***,所述分布式任务调度***包括:多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、以及多个任务通知实例;所述无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;所述无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制,所述方法包括:
所述kafka集群模块接收并存储来自物联网平台的待调度任务信息;所述待调度任务信息中携带有任务执行时间信息;
所述kafka消费者实例从所述kafka集群模块获取所述待调度任务信息,并将所述待调度任务信息发送至所述任务调度器实例;
所述任务调度器实例根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息,并通过所述任务入队接口将所述待执行任务信息添加至所述无锁任务队列;
所述任务通知实例通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务。
第二方面,本申请实施例提供了一种分布式任务调度***,所述分布式任务调度***包括多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例以及多个任务通知实例;所述无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;所述无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制;
所述kafka集群模块用于:接收并存储来自物联网平台的待调度任务信息;所述待调度任务信息中携带有任务执行时间信息;
所述kafka消费者实例用于:从所述kafka集群模块获取所述待调度任务信息,并将所述待调度任务信息发送至所述任务调度器实例;
所述任务调度器实例用于:根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息,并通过所述任务入队接口将所述待执行任务信息添加至所述无锁任务队列;
所述任务通知实例用于:通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务。
本申请实施例提供了一种物联网设备的任务调度方法及分布式任务调度***,方法应用于分布式任务调度***,分布式任务调度***包括:多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、以及任务通知实例;无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制,方法包括:kafka集群模块接收并存储来自物联网平台的待调度任务信息;待调度任务信息中携带有任务执行时间信息;kafka消费者实例从kafka集群模块获取待调度任务信息,并将待调度任务信息发送至任务调度器实例;任务调度器实例根据任务执行时间信息生成待调度任务信息对应的待执行任务信息,并通过任务入队接口将待执行任务信息添加至无锁任务队列;任务通知实例通过任务出队接口从无锁任务队列获取待执行任务信息,并将待执行任务信息发送至对应的至少一个目标物联网设备,以使各目标物联网设备根据待执行任务信息执行任务。本申请中,面对物联网平台产生的大量的待调度任务信息,采用kafka集群模块作为消息中间件承接物联网平台产生的任务流量,实现流量削峰,并利用多个kafka消费者实例负责从kafka集群模块中获取待调度任务信息给到任务调度器实例来进行实际的任务调度;对于实际的任务调度,本申请采用多个任务调度器实例来负责根据任务执行时间信息进行任务调度,添加待执行任务至无锁任务队列,多个任务通知实例则作为无锁任务队列的消费者通过无锁任务队列对应的任务出队接口获取待执行任务并发送至对应的至少一个目标物联网设备,提高了任务的分发效率;对于任务队列,本申请采用无锁化的任务队列,且无锁任务队列对应的任务入队接口、任务出队接口采用比较并交换原子操作进行对应的任务的入队控制和任务出队控制,一方面,无锁化能够降低任务的获取和添加时间,有利于及时分发任务到达物联网设备,另一方面,采用比较并交换原子操作进行入队控制和出队控制则能够避免多个任务通知实例获取任务、多个任务调度器实例添加任务时导致的竞争,实现多实例下任务的有序分发。综上,本申请提供的上述物联网设备的任务调度方法及分布式任务调度***能够协调需要调度的大量任务,提高任务分发的及时性和任务调度效率,提高对大量任务调度的协调性和有序性。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的物联网设备的任务调度方法的应用场景示意图;
图2为本申请实施例提供的物联网设备的任务调度方法的流程示意图;
图3为本申请实施例提供的无锁任务队列对应的任务入队接口的处理逻辑示意图;
图4为本申请实施例提供的无锁任务队列对应的任务出队接口的处理逻辑示意图;
图5为本申请实施例提供的分布式任务调度***的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
在物联网技术不断发展的背景下,物联网设备的种类不断增加,包括工业、智能家居、水利、电力等各类设备,种类繁多。在物联网中,从物联网设备定期读取状态数据是必不可少的操作。
现有的实现方式通常是采用任务调度的模式,物联网设备根据任务进行数据上报,面对大量的物联网设备对应的大量的数据上报任务,为有效协调任务的调度,现有方案中通常采用锁机制来实现任务分发。然而,采用锁机制来实现任务分发调度时,可能存在锁竞争、数据库操作延迟以及数据库负载等性能问题。
锁竞争:当多个获取任务的实例同时尝试获取锁时,会出现锁竞争的情况。如果锁竞争激烈,可能导致某些实例长时间等待锁的释放,降低任务调度的效率。
延迟问题:锁的获取和释放会引入数据库操作的延迟。锁的获取和释放需要额外的时间,在任务调度操作频繁的情况下,当锁的获取和释放操作时间较长,会导致任务调度的延时大大增加,影响任务的及时执行。
使得任务调度效率较低,尤其不适应大量的任务需要调度的情形。因此,亟需一种物联网设备的任务调度方案,旨在提高任务调度的效率,协调需要调度的大量任务,提高对大量任务调度的协调性和有序性。
请参阅图1,图1为本申请实施例提供物联网设备的任务调度方法的应用场景示意图。分布式任务调度***包括多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、以及多个任务通知实例。如图1中示出的,物联网平台与kafka集群通信连接,用户在物联网平台提交待调度任务信息(例如,设备A每间隔1小时上传一次当前温度数据)到kafka集群模块,由kafka消费者实例从kafka集群模块中获取待调度任务信息,并提交至任务调度器实例,由任务调度器实例负责实际的任务调度。具体的,任务调度器实例每间隔1小时生成该待调度任务信息对应的待执行任务信息(例如,上传当前温度数据信息)并通过任务入队接口添加至无锁任务队列,任务通知实例则负责从无锁任务队列中通过任务出队接口获取待执行任务信息,并发送至需要执行该待执行任务信息的物联网设备A。
图2为本申请一实施例提供的物联网设备的任务调度方法的流程示意图,该方法应用于分布式任务调度***,分布式任务调度***包括:多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、任务信息存储模块、以及多个任务通知实例,上述该物联网设备的任务调度方法具体包括下述步骤S110至步骤S190。
步骤S110、kafka集群模块接收并存储来自物联网平台的待调度任务信息;待调度任务信息中携带有任务执行时间信息。
其中,上述待调度任务信息为需要调度执行的任务信息;具体的,该待调度任务信息可以具体包括任务内容、任务内容对应的任务执行时间信息、以及任务执行对象,该任务内容指示需要执行的任务,该任务执行时间信息指示执行该任务内容对应的时间,该任务执行对象指示需要执行该任务内容的目标物联网设备。在具体实施时,若是需要定时执行的任务,任务执行时间信息可以具体为Cron表达式。
本实施例中,上述待调度任务信息可以由用户在物联网平台提交后到达上述kafka集群模块,上述kafka集群模块作为中间件,用于存储待调度任务信息。
本实施例中,由于物联网设备数量庞大,物联网设备的任务数量也十分巨大,为能够承接来自物联网平台的任务流,采用kafak集群作为消息中间件,从而实现削峰,避免大量的任务同时产生而导致的***崩溃。具体的,kafka集群模块中包括了多个kafka实例(即,Broker),每个kafka实例均用于负责处理待调度任务信息的读、写请求,存储待调度任务信息,从而处理大量的消息流。kafka实例运行在服务器上,每个服务器运行有一个或多个kafka实例,各服务器可以分布在不同位置。
步骤S120、kafka消费者实例从kafka集群模块获取待调度任务信息,将待调度任务信息写入任务信息存储模块中,并将待调度任务信息发送至任务调度器实例。
其中,上述kafka消费者实例用于消费kafka集群中存储的消息——待调度任务信息,在具体实施时,一个设备上可以运行上述一个或多个kafka消费者实例。本实施例中,分布式任务调度***中包括了多个kafka消费者实例,每个kafka消费者实例均可独立地用于从kafka集群模块获取待调度任务信息,并负责将待调度任务信息写入任务信息存储模块中,以及将该待调度任务信息发送至任务调度器实例。
其中,上述任务信息存储模块用于持久化存储与物联网设备的任务相关的数据,便于对物联网设备任务的管理和分析。kafka消费者实例获取到待调度任务之后,将该待调度任务存储在任务信息存储模块,并将该待调度任务发送至任务调度器实例进行具体的任务调度。
步骤S130、任务调度器实例根据任务执行时间信息生成待调度任务信息对应的待执行任务信息,将待执行任务信息对应的任务调度记录写入任务信息存储模块中,并与对应的待调度任务信息关联,并通过任务入队接口将待执行任务信息添加至无锁任务队列。
其中,上述待执行内容指示物联网设备需执行的任务内容。本实施例中,上述任务调度器实例的数量为多个,每个任务调度器实例均用于根据待调度任务信息生成对应的待执行任务信息,将待执行任务信息对应的任务调度记录写入任务信息存储模块中,并与对应的待调度任务信息关联,以及将待执行任务添加至无锁任务队列。在具体实施时,一个设备上可以运行上述一个或多个任务调度器实例。
其中,任务调度记录为该待执行任务信息对应的记录信息,在具体实施时,可以包括该待执行任务的生成时间,生成该待执行任务的任务调度器实例的标识信息,待执行任务对应的执行对象,还可以包括待上报的待执行任务对应的任务执行结果。
具体的,待调度任务信息已由kafka消费者存储在任务信息存储模块中,在此之后,任务调度器实例根据待调度任务信息中的任务执行时间信息生成待执行任务信息,并将该待执行任务信息存储在任务信息存储模块,且与对应的待调度任务信息关联。
在具体实施时,上述任务调度器实例可以包括Cron表达式解析模块,用于对任务执行时间信息中的Cron表达式进行解析,实现定时触发,生成待调度任务信息对应的待执行任务信息。
在本实施例中,在生成待执行任务信息之后,提交到无锁任务队列,由无锁任务队列基于先进先出的原则对任务进行有序分发。具体的,该无锁任务队列中,对于任务的获取操作和添加操作均不增加锁操作,不需要争取到锁后才允许进行任务的获取和添加操作。藉此,在本实施例中,当多个任务调度器实例向无锁任务队列添加待执行任务信息时,不需要先获得锁,从而避免了锁竞争以及锁分配过程中额外的时间开销,提高待执行任务信息的入队速度。
在本申请中,为避免多个任务调度器实例同时向无锁任务队列的同一存储位置写入待执行任务消息、提高任务入队的有序性,无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制。具体而言,比较并交换原子操作是一种包括比较操作和交换操作的原子操作,能够实现比较操作满足条件时,交换操作一定能执行。在队列中,头指针通常指向队列的第一个元素,尾指针指向队列的下一个要***元素的位置,当元素入队时,是从队列尾部进入,将元素放置在尾指针位置,并修改尾指针指向下一位置,因而需要正确修改尾指针才能保证队列的有序存储。本申请提供的上述无锁任务队列中,用于任务入队的任务入队接口中针对尾指针采用比较并交换原子操作进行入队控制,从而能够保证每个待执行任务信息入队时,尾指针能够正常修改,实现有序的入队控制,避免尾指针不正常修改时出现多个任务同时放置在一个位置而导致的任务覆盖问题,实现多实例下有序的任务入队控制。
其中,上述任务入队接口可以具体指的是无锁任务队列对应的任务入队方法,任务调度器实例可以是通过调用该无锁任务队列对应的任务入队方法来实现待执行任务信息的添加,该任务入队方法的入参可以至少包括上述待执行任务信息,该任务入队方法具体执行将该待执行任务信息添加到无锁任务队列中。
具体的,在一实施例中,上述无锁任务队列为循环队列,此时,如图3所示,上述无锁任务队列对应的任务入队接口对应的处理步骤包括下述步骤S210至步骤S250。
步骤S210、获取无锁任务队列的当前头指针位置值和当前尾指针位置值。
其中,上述当前头指针位置值(例如,表示成current_head)指的是(执行步骤S210时)当前无锁任务队列中头指针(所指向的位置)的值,其具体是头指针变量的值;上述当前尾指针位置值(例如,表示成current_tail)指的是(执行步骤S210时)当前无锁任务队列中尾指针(所指向的位置)的值,其具体是尾指针变量的值。
步骤S220、根据当前头指针位置值和无锁任务队列的大小获取下一尾指针位置值。
其中,上述无锁任务队列的大小可以具体为无锁任务队列的存储单元的总个数;上述下一尾指针位置值为根据当前头指针位置值和无锁任务队列的大小计算得到的当有一个元素入队后,无锁任务队列的尾指针(所指向的位置)的值。在队列中,尾指针始终指向要下一个***元素的位置,若要***新的元素,尾指针需要修改,指向下一个位置,该位置的值即是上述下一尾指针位置值。
具体的,在循环队列中,下一个尾指针位置值next_tail的计算公式为:
next_tail=(current_tail+1)%无锁任务队列的大小
步骤S230、判断下一尾指针位置值是否与当前头指针位置值相等,若否,执行下述步骤S240至步骤S250,若是,返回执行上述步骤S210。
在循环队列中,头指针指向队列中的第一个元素(即出队顺序的第一个元素),尾指针指向队列中的下一个存储位置,并且为区分队满和队空的情况,通常在循环队列中设置一个空的存储位置,藉此,通过判断下一尾指针位置值与当前头指针位置值是否相等,以判断循环队列——无锁任务队列是否已满。
本实施例中,下一尾指针位置值与当前头指针位置值相等,说明队列已满,无法继续***待执行任务,则可以返回执行上述步骤S210,即再次执行步骤S210至步骤S250的任务入队步骤,直至能够执行下述步骤S250,完成待执行任务信息的写入。
在一些实施方式中,上述步骤S230中判断下一尾指针位置值是否与当前头指针位置值相等之后,若下一尾指针位置值与当前头指针位置值相等,还可以向任务入队接口的调用者——任务调度器实例返回“队列已满,操作失败”的提醒,任务调度器实例则可以后续再调用该任务入队接口尝试将待执行任务信息写入无锁任务队列。
步骤S240、通过比较并交换原子操作在当前尾指针与当前尾指针位置值相同时将当前尾指针修改指向下一尾指针位置值。
其中,上述当前尾指针指的是(执行步骤S240时)当前队列的尾指针(所指向的位置),其为一个指针变量。
具体的,上述步骤中,比较并交换原子操作首先是比较上述当前尾指针(的值)与步骤S210执行时获得的上述当前尾指针位置值是否相同,若相同,将当前队列的尾指针修改为指向上述下一尾指针位置值,即使得队列的尾指针指向下一个存储位置。
步骤S250、在当前尾指针修改成功时,将待执行任务信息写入无锁任务队列中当前尾指针位置值对应的存储位置。
本实施例中,在修改尾指针成功的基础上,将待执行任务信息写入无锁任务队列中步骤S210中获取到的上述当前尾指针位置值对应的存储位置。
本实施例中,任务入队接口采用先修改尾指针,在修改成功后再添加待执行任务信息到尾指针之前的位置来实现任务的入队控制,为确保尾指针的成功修改,本实施例采用比较并交换原子操作,确保在尾指针未被其余实例修改时,成功将尾指针修改,从而避免其余实例修改尾指针而导致队列中存储位置的变化,实现任务的有序入队。
举例而言,根据上述步骤S210至步骤S250,假设任务调度器实例A在执行上述步骤S240中的比较并交换原子操作后,还没有来得及将待执行任务信息写入队列,任务调度器实例B就开始调用上述任务入队接口,并且任务调度器实例B可能也成功地执行比较并交换原子操作。在这种情况下,不会影响待执行任务信息的有序入队,原因如下:
首先,任务调度器实例A执行比较并交换原子操作,成功地将当前尾指针tail从当前尾指针位置值current_tail更新为下一尾指针位置值next_tail。
然后,任务调度器实例B开始调用任务入队接口:此时,任务调度器实例B获取到的当前尾指针位置值已经是next_tail,计算到的下一尾指针位置值为next_tail+1,并尝试执行比较并较换原子操作。由于任务调度器实例B获取的当前尾指针已经是next_tail,所以它实际上是尝试将当前尾指针从next_tail更新为next_tail+1,而这不会影响任务调度器实例A将待执行任务信息a添加至当前尾指针位置值current_tail对应的位置,并且,后续任务调度器实例B对应的待执行任务信息b也是添加至队列中next_tail位置,不会与待执行任务信息a放置在同一个位置。
可见,本申请通过采用比较并交换原子操作来保证尾指针能够成功修改的情况下,再将待执行任务信息***尾指针的位置之前的存储位置,从而避免了其余实例同时往无锁任务队列中添加待执行任务信息的干扰,避免了任务丢失,从而实现了无锁的基础上任务的有序入队。
为更清楚说明上述步骤,示例性的,上述任务入队接口(例如,enqueue)在python下的简要实现代码可以为:
步骤S140、任务通知实例通过任务出队接口从无锁任务队列获取待执行任务信息,并将待执行任务信息发送至对应的至少一个目标物联网设备,以使各目标物联网设备根据待执行任务信息执行任务。
其中,上述目标物联网设备为需执行该待执行任务信息的物联网设备,目标物联网设备的数量可以是一个或多个。
本实施例中,上述任务通知实例的数量为多个,每个任务通知实例均作为无锁任务队列的消费者——负责从无锁任务队列中获取待执行任务信息,并通知对应的目标物联网设备。
其中,上述任务出队接口为无锁任务队列对应的任务出队方法,任务通知实例可以是通过调用该无锁任务队列对应的任务出队方法来实现无锁任务队列中的待执行任务信息的获取,该任务出队方法具体执行取出无锁任务队列中的待执行任务信息。
本实施例中,为避免多个任务通知器实例同时获取到无锁任务队列的同一存储位置的待执行任务消息,无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制。具体的,在队列中,头指针指向队列的第一个元素,尾指针指向队列的下一个要***元素的位置,当元素出队时,是从队列头部出队,并修改头指针指向下一位置,因而需要正确修改头指针才能保证队列存储内容的有序出队。本申请提供的上述无锁任务队列中,用于待执行任务信息出队的任务出队接口中针对头指针采用比较并交换原子操作进行出队控制,从而能够保证每个待执行任务信息出队时,头指针能够正常修改,实现有序的出队控制,避免头指针不正常修改时多个不同的任务通知实例获取到同一个待执行任务信息,实现多实例下有序的出队控制。
具体的,在一实施例中,上述无锁任务队列为循环队列,此时,如图4所示,上述无锁任务队列对应的任务出队接口对应的处理步骤包括下述步骤S310至步骤S360。
步骤S310、获取无锁任务队列的当前头指针位置值和当前尾指针位置值。
其中,上述步骤S310与上述步骤S210相同。具体的,上述当前头指针位置值(例如,表示成current_head)指的是(执行步骤S310时)当前无锁任务队列中头指针(所指向的位置)的值,其具体是头指针变量的值;上述当前尾指针位置值(例如,表示成current_tail)指的是(执行步骤S310时)当前无锁任务队列中尾指针(所指向的位置)的值,其具体是尾指针变量的值。
步骤S320、判断当前头指针位置值是否与当前尾指针位置值相等,若否,执行下述步骤S330至步骤S350,若是,执行下述步骤S360。
在循环队列中,头指针指向队列中的第一个元素(即出队顺序的第一个元素),尾指针指向队列中的下一个存储位置,并且为区分循环队列中队满和队空的情况,通常在循环队列中设置一个空的存储位置,藉此,通过判断当前尾指针位置值与当前头指针位置值是否相等,以判断循环队列——无锁任务队列是否为空。
步骤S330、根据当前头指针位置值和无锁任务队列的大小获取下一头指针位置值。
其中,上述无锁任务队列的大小可以具体为无锁任务队列的存储单元的总个数;上述下一头指针位置值为根据当前头指针位置值和当前尾指针位置值计算得到的当有一个元素出队后,无锁任务队列的头指针(所指向的位置)的值。由于在队列中,头指针始终指向第一个元素的位置,若需从队列中获取元素,头指针则需要修改指向下一个位置,该位置的值即是上述下一头指针位置值。
具体的,在循环队列中,下一个头指针位置值next_head的计算公式为:
next_head=(current_head+1)%无锁任务队列的大小
步骤S340、通过比较并交换原子操作在当前头指针与当前头指针位置值相同时将当前头指针修改指向下一头指针位置值。
其中,上述当前头指针指的是(执行步骤S340时)当前队列的头指针(所指向的位置),其是一个指针变量。
具体的,上述步骤S340中,比较并交换原子操作首先是比较上述当前头指针(的值)与步骤S310执行时获得的上述当前头指针位置值是否相同,若相同,将当前队列的头指针修改为指向上述下一头指针位置值,即使得队列的头指针指向下一个存储位置。
步骤S350、在当前头指针修改成功时,读取无锁任务队列中当前头指针位置值对应的存储位置中的待执行任务信息。
本实施例中,在修改头指针成功的基础上,从无锁任务队列中步骤S210中获取到的上述当前头指针位置值对应的存储位置读取待执行任务信息。
在一些实施方式中,上述步骤S350之后,还可以进一步将当前头指针位置值对应的存储位置设为空,清空该存储位置的存储内容。
本实施例中,任务出队接口同样采用先修改头指针,在修改成功后再获取位于头指针之前的存储位置的待执行任务信息来实现任务的出队控制,为确保头指针的成功修改,本实施例采用比较并交换原子操作,确保在头指针未被其余实例修改时,成功将头指针修改,从而避免其余实例修改头指针而导致队列中存储位置的变化和错乱,实现任务的有序出队。
举例而言,根据上述步骤S310至步骤S350,假设任务调度器实例A在执行上述步骤S340中的比较并交换原子操作后,还没有来得及从无锁任务队列中获取待执行任务信息,任务调度器实例B就开始调用上述任务出队接口,并且任务调度器实例B可能也会成功地执行比较并交换原子操作。在这种情况下,不会影响待执行任务的信息有序出队,原因如下:
首先,任务调度器实例A执行比较并交换原子操作,成功地将当前头指针head从当前头指针位置值current_head更新为下一头指针位置值next_head。
然后,任务调度器实例B开始调用任务出队接口:它获取到的当前头指针位置值已经是next_head,计算到的下一头指针位置值为next_head+1,并尝试执行比较并较换原子操作。由于任务调度器实例B获取的当前头指针已经是next_head,所以它实际上是尝试将当前头指针从next_head更新为next_head+1,而这不会影响任务调度器实例A从无锁任务队列中current_head对应的位置获取待执行任务信息,任务调度器实例B后续是从无锁任务队列中next_head对应的位置获取待执行任务信息,从而不会获取到同一个待执行任务信息。
步骤S360、抛出队列为空异常。
本实施例中,若当前头指针位置值与当前尾指针位置值相等,则说明无锁任务队列为空,抛出队列为空异常。
为更清楚说明上述步骤,实例性的,上述任务入队接口(dequeue)在python下的简要实现代码可以为:
可见,本实施例中,通过采用比较并交换原子操作来保证头指针能够成功修改的情况下,再从头指针的位置之前的存储位置读取待执行任务信息,从而避免了其余实例获取待执行任务信息的干扰,避免了待执行任务信息的重复获取,实现了无锁的基础上任务的有序出队。
为便于通知目标物联网设备,在一实施例中,上述步骤S140具体可以通过以下步骤实现:
任务通知实例通过任务出队接口从无锁任务队列获取待执行任务信息,并发送至基于MQTT的任务通知模块中的目标主题;目标主题为待执行任务信息对应的预设主题;
通过基于MQTT的任务通知模块将待执行任务信息转发至已订阅目标主题的各目标物联网设备,其中,各物联网设备均已订阅基于MQTT的任务通知模块中的一个或多个预设主题。
具体的,上述各预设主题可以根据实际情况进行划分和确定,各物联网设备可以预先订阅一个或多个预设主题,当任务通知实例将待执行任务信息发送至基于MQTT(Message Queuing Telemetry Transport)的任务通知模块中的某个预设主题时,基于MQTT的任务通知模块基于订阅机制将该待执行任务信息转发至已订阅该预设主题的所有物联网设备。
在本实施例中,在通知目标物联网设备时,任务通知实例是将发送待执行任务信息至基于MQTT的任务通知模块中的目标主题,由基于MQTT的任务通知模块将该待执行任务信息转发至已订阅该基于MQTT的任务通知模块中的目标主题的物联网设备——即目标物联网设备,与实时通信相比,基于消息订阅的方式进行待执行任务信息的通知,能够保证物联网设备的任务通知效率的同时,解耦消息的发送者和接收者,降低对***的带宽要求。
步骤S150、任务通知实例接收目标物联网设备根据待执行任务信息上报的任务执行结果信息,并将任务执行结果信息发送至kafka集群模块。
本实施例中,目标物联网设备接收到待执行任务信息之后,根据待执行任务信息进行执行,并将任务执行结果信息发送至任务通知实例,由任务通知实例将该任务执行结果信息发送至kafka集群模块。
在具体实施时,目标物联网设备可以向基于MQTT的消息通知模块中对应的结果主题发送该任务执行结果信息,由基于MQTT的消息通知模块将该任务执行结果信息转发至订阅该结果主题的任务通知实例。
在具体实施时,kafka集群模块中可以设置有任务主题和任务执行结果主题,在此基础上,kafka消费者将该任务执行结果信息发送至kafka集群模块中的任务执行结果主题,物联网平台产生的待调度任务信息则可以发送至kafka集群模块中的任务主题。
步骤S160、kafka集群模块接收并存储任务执行结果信息。
本实施例中,任务执行结果信息存储至kafka集群模块,以进行流量削峰。
步骤S170、kafka消费者实例从kafka集群模块获取任务执行结果信息,并将任务执行结果信息写入任务信息存储模块中对应的任务调度记录中。
具体的,任务信息存储模块已存储有由任务调度器实例写入的待执行任务信息对应的任务调度记录,对于该待执行任务对应的任务执行结果信息,由kafka消费者实例写入任务信息存储模块中的该任务调度记录。
步骤S180、kafka集群模块接收并存储来自物联网平台的针对目标待调度任务信息的删除信息。
其中,针对目标待调度任务信息的删除信息用于指示删除目标待调度任务信息,即停止启用该目标待调度任务信息。在具体实施时,用户可以在物联网平台输入针对已发送的待调度任务信息中的目标待调度任务信息的删除指令,物联网平台进而向kafka集群模块发送针对该目标待调度任务信息的删除信息,kafka集群模块则作为中间件,接收并存储该待调度任务信息的删除信息。
步骤S190、kafka消费者实例从kafka集群模块获取删除信息,根据删除信息删除任务信息存储模块中的目标待调度任务信息,并向调度目标待调度任务信息的任务调度器实例发送针对目标待调度任务信息的停止调度信息。
本实施例中,kafka消费者实例从kafka集群模块获取删除信息,在此之后,删除任务信息存储模块中的目标待调度任务信息,并向调度目标待调度任务信息的任务调度器实例发送针对目标待调度任务信息的停止调度信息,任务调度器实例不再生成该目标待调度任务信息对应的执行任务信息,即停止该目标待调度任务信息的任务调度。
综上,本申请实施例提供了一种物联网设备的任务调度方法及分布式任务调度***,方法应用于分布式任务调度***,分布式任务调度***包括:多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、以及任务通知实例;无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制,方法包括:kafka集群模块接收并存储来自物联网平台的待调度任务信息;待调度任务信息中携带有任务执行时间信息;kafka消费者实例从kafka集群模块获取待调度任务信息,并将待调度任务信息发送至任务调度器实例;任务调度器实例根据任务执行时间信息生成待调度任务信息对应的待执行任务信息,并通过任务入队接口将待执行任务信息添加至无锁任务队列;任务通知实例通过任务出队接口从无锁任务队列获取待执行任务信息,并将待执行任务信息发送至对应的至少一个目标物联网设备,以使各目标物联网设备根据待执行任务信息执行任务。本申请中,面对物联网平台产生的大量的待调度任务信息,采用kafka集群模块作为消息中间件承接物联网平台产生的任务流量,实现流量削峰,并利用多个kafka消费者实例负责从kafka集群模块中获取待调度任务信息给到任务调度器实例来进行实际的任务调度;对于实际的任务调度,本申请采用多个任务调度器实例来负责根据任务执行时间信息进行任务调度,添加待执行任务信息至无锁任务队列,多个任务通知实例则作为无锁任务队列的消费者通过无锁任务队列对应的任务出队接口获取待执行任务并发送至对应的至少一个目标物联网设备,提高了任务的分发效率;对于任务队列,本申请采用无锁化的任务队列,且无锁任务队列对应的任务入队接口、任务出队接口采用比较并交换原子操作进行对应的任务的入队控制和任务出队控制,一方面,无锁化能够降低任务的获取和添加时间,有利于及时分发任务到达物联网设备,另一方面,采用比较并交换原子操作进行入队控制和出队控制则能够避免多个任务通知实例获取任务、多个任务调度器实例添加任务时导致的竞争,实现多实例下任务的有序分发。综上,本申请提供的上述物联网设备的任务调度方法及分布式任务调度***能够协调需要调度的大量任务,提高任务分发的及时性和任务调度效率,提高对大量任务调度的协调性和有序性。
可见,本申请一方面采用kafka集群以及kafka消费者来实现对任务产生端的削峰,另一方面,采用无锁任务队列提高任务入队和任务出队的有序性和速度,从而提高任务的消耗速度,实现了同时从任务产生端、任务消耗端两端的对海量任务的适配,是一种有效的协调物联网平台产生的大量待调度任务信息的解决方案。
本申请实施例还提供一种分布式任务调度***,具体地,请参阅图5,图5是本申请实施例提供的分布式任务调度***500的示意性框图,所述分布式任务调度***500包括kafka集群模块501、多个kafka消费者实例502、多个任务调度器实例503、无锁任务队列504,以及多个任务通知实例505;所述无锁任务队列504对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;所述无锁任务队列504对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制;其中,
所述kafka集群模块用于:接收并存储来自物联网平台的待调度任务信息;所述待调度任务信息中携带有任务执行时间信息;
所述kafka消费者实例用于:从所述kafka集群模块获取所述待调度任务信息,并将所述待调度任务信息发送至所述任务调度器实例;
所述任务调度器实例用于:根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息,并通过所述任务入队接口将所述待执行任务信息添加至所述无锁任务队列;
所述任务通知实例用于:通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的***的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元、模块及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和***,可以通过其它的方式实现。例如,以上所描述的***实施例仅仅是示意性的,例如,模块、单元的划分,仅仅为逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的模块、单元集合成一个模块、单元,例如多个模块、单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
作为分离部件说明的模块、单元可以是或者也可以不是物理上分开的,作为模块、单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能模块、单元可以集成在一个处理模块、单元中,也可以是各个模块、单元单独物理存在,也可以是两个或两个以上模块、单元集成在一个模块、单元中。上述集成的模块、单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块、单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,后台服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种物联网设备的任务调度方法,其特征在于,应用于分布式任务调度***,所述分布式任务调度***包括:多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例、以及多个任务通知实例;所述无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;所述无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制,所述方法包括:
所述kafka集群模块接收并存储来自物联网平台的待调度任务信息;所述待调度任务信息中携带有任务执行时间信息;
所述kafka消费者实例从所述kafka集群模块获取所述待调度任务信息,并将所述待调度任务信息发送至所述任务调度器实例;
所述任务调度器实例根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息,并通过所述任务入队接口将所述待执行任务信息添加至所述无锁任务队列;
所述任务通知实例通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务。
2.根据权利要求1所述的方法,其特征在于,所述无锁任务队列为循环队列,所述任务入队接口对应的处理步骤包括:
获取所述无锁任务队列的当前头指针位置值和当前尾指针位置值;
根据所述当前头指针位置值和所述无锁任务队列的大小获取下一尾指针位置值;
当所述下一尾指针位置值不与所述当前头指针位置值相等时,通过比较并交换原子操作在当前尾指针与所述当前尾指针位置值相同时将所述当前尾指针修改指向所述下一尾指针位置值;
在所述当前尾指针修改成功时,将所述待执行任务信息写入所述无锁任务队列中所述当前尾指针位置值对应的存储位置。
3.根据权利要求2所述的方法,其特征在于,所述根据所述当前头指针位置值和所述无锁任务队列的大小获取下一尾指针位置值之后,所述方法还包括:
当所述下一尾指针位置值与所述当前头指针位置值相等时,返回执行所述获取所述无锁任务队列的当前头指针位置值和当前尾指针位置值。
4.根据权利要求1所述的方法,其特征在于,所述无锁任务队列为循环队列,所述任务出队接口对应的处理步骤包括:
获取所述无锁任务队列的当前头指针位置值和当前尾指针位置值;
当所述当前头指针位置值不与所述当前尾指针位置值相等时,根据所述当前头指针位置值和所述无锁任务队列的大小获取下一头指针位置值;
通过比较并交换原子操作在当前头指针与所述当前头指针位置值相同时将所述当前头指针修改指向所述下一头指针位置值;
在所述当前头指针修改成功时,读取所述无锁任务队列中所述当前头指针位置值对应的存储位置中的所述待执行任务信息。
5.根据权利要求4所述的方法,其特征在于,所述获取所述无锁任务队列的当前头指针位置值和当前尾指针位置值之后,所述方法还包括:
当所述当前头指针位置值与所述当前尾指针位置值相等时,抛出队列为空异常。
6.根据权利要求1所述的方法,其特征在于,所述分布式任务调度***还包括任务信息存储模块,所述kafka消费者实例从所述kafka集群模块获取所述待调度任务信息之后,所述方法还包括:
所述kafka消费者实例将所述待调度任务信息写入所述任务信息存储模块中;
所述任务调度器实例根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息之后,所述方法还包括:
所述任务调度器实例将所述待执行任务信息对应的任务调度记录写入所述任务信息存储模块中,并与对应的所述待调度任务信息关联。
7.根据权利要求6所述的方法,其特征在于,所述任务通知实例通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备之后,所述方法还包括:
所述任务通知实例接收所述目标物联网设备根据所述待执行任务信息上报的任务执行结果信息,并将所述任务执行结果信息发送至所述kafka集群模块;
所述kafka集群模块接收并存储所述任务执行结果信息;
所述kafka消费者实例从所述kafka集群模块获取所述任务执行结果信息,并将所述任务执行结果信息写入所述任务信息存储模块中对应的所述任务调度记录中。
8.根据权利要求6所述的方法,其特征在于,所述任务调度器实例将所述待执行任务信息对应的任务调度记录写入所述任务信息存储模块中之后,所述方法还包括:
所述kafka集群模块接收并存储来自物联网平台的针对目标待调度任务信息的删除信息;
所述kafka消费者实例从所述kafka集群模块获取所述删除信息;
所述kafka消费者实例根据所述删除信息删除所述任务信息存储模块中的所述目标待调度任务信息,并向调度所述目标待调度任务信息的所述任务调度器实例发送针对所述目标待调度任务信息的停止调度信息。
9.根据权利要求1所述的方法,其特征在于,所述任务通知实例通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务,包括:
所述任务通知实例通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并发送至基于MQTT的任务通知模块中的目标主题;所述目标主题为所述待执行任务信息对应的预设主题;
通过所述基于MQTT的任务通知模块将所述待执行任务信息转发至已订阅所述目标主题的各所述目标物联网设备,其中,各物联网设备均已订阅所述基于MQTT的任务通知模块中的一个或多个所述预设主题。
10.一种分布式任务调度***,其特征在于,所述分布式任务调度***包括多个任务调度器实例、无锁任务队列、kafka集群模块、多个kafka消费者实例以及多个任务通知实例;所述无锁任务队列对应的任务入队接口采用针对尾指针的比较并交换原子操作进行任务的入队控制;所述无锁任务队列对应的任务出队接口采用针对头指针的比较并交换原子操作进行任务的出队控制;
所述kafka集群模块用于:接收并存储来自物联网平台的待调度任务信息;所述待调度任务信息中携带有任务执行时间信息;
所述kafka消费者实例用于:从所述kafka集群模块获取所述待调度任务信息,并将所述待调度任务信息发送至所述任务调度器实例;
所述任务调度器实例用于:根据所述任务执行时间信息生成所述待调度任务信息对应的待执行任务信息,并通过所述任务入队接口将所述待执行任务信息添加至所述无锁任务队列;
所述任务通知实例用于:通过所述任务出队接口从所述无锁任务队列获取所述待执行任务信息,并将所述待执行任务信息发送至对应的至少一个目标物联网设备,以使各所述目标物联网设备根据所述待执行任务信息执行任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311529718.5A CN117453365A (zh) | 2023-11-15 | 2023-11-15 | 物联网设备的任务调度方法及分布式任务调度*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311529718.5A CN117453365A (zh) | 2023-11-15 | 2023-11-15 | 物联网设备的任务调度方法及分布式任务调度*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117453365A true CN117453365A (zh) | 2024-01-26 |
Family
ID=89579803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311529718.5A Pending CN117453365A (zh) | 2023-11-15 | 2023-11-15 | 物联网设备的任务调度方法及分布式任务调度*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117453365A (zh) |
-
2023
- 2023-11-15 CN CN202311529718.5A patent/CN117453365A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5428781A (en) | Distributed mechanism for the fast scheduling of shared objects and apparatus | |
US6131113A (en) | Managing a shared resource in a multi-processor system | |
Sprunt et al. | Aperiodic task scheduling for hard-real-time systems | |
US8516054B2 (en) | Message handling | |
US7219198B2 (en) | Facilitating communication within shared memory environments using lock-free queues | |
US7707464B2 (en) | Timeout request scheduling using grouping and nonsynchronized processing to enhance performance | |
CA2536037A1 (en) | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment | |
US20030233392A1 (en) | Method and system for managing the execution of threads and the processing of data | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN101470636B (zh) | 一种消息的读写方法和装置 | |
CN111949497A (zh) | 消息队列***以及基于消息队列***的消息处理方法 | |
CN109842621A (zh) | 一种减少token存储数量的方法及终端 | |
WO2022211724A1 (en) | Method and apparatus for transmitting messages, and device and storage medium thereof | |
EP2171934B1 (en) | Method and apparatus for data processing using queuing | |
US7950011B2 (en) | Leveraging advanced queues to implement event based job scheduling | |
US20060143150A1 (en) | Messaging system and method of operation thereof | |
CN116633875B (zh) | 一种多业务耦合并发通信的时间保序调度方法 | |
CN111190541B (zh) | 存储***的流控方法以及计算机可读存储介质 | |
CN111225063B (zh) | 用于静态分布式计算架构的数据交换***及其方法 | |
CN117453365A (zh) | 物联网设备的任务调度方法及分布式任务调度*** | |
CN101634956B (zh) | 多核处理器消息调度方法及调度器 | |
CN115391053A (zh) | 基于cpu和gpu混合计算的在线服务方法及装置 | |
CN116107952A (zh) | 多核异构通信方法以及车辆 | |
CN115623071A (zh) | 单机多客户端的发布订阅消息分发方法及*** | |
CN114416717A (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 |