掌桥专利:专业的专利平台
掌桥专利
首页

一种控制调度算法及可视化监控的方法及装置

文献发布时间:2023-06-19 18:37:28


一种控制调度算法及可视化监控的方法及装置

技术领域

本发明涉及调度算法领域,尤其是一种控制调度算法及可视化监控的方法及装置。

背景技术

API执行是采控平台业务开通的重要组成部分,当大批量API同时进行下发操作时,由于部分设备存在瓶颈,单个设备无法同时处理大批量的下发操作,会导致卡单、工单积压等问题,导致客户不能及时得到反馈,考虑到客户对API执行的并发量要求是非常高的,那么如何提高API的执行效率,将设备下发结果及时反馈给客户,是我们必须要考虑的一个方面。特别是由于设备瓶颈等不可避免因素导致的任务积压、卡单现象,如何避免这些问题,并能进行人工监视以及调控,是我们必须要考虑解决的问题。

发明内容

为解决现有技术存在的问题,本发明提供一种控制调度算法及可视化监控的方法及装置,通过可视化监控页面进行人工干预,可以有效提高API的执行效率,同时可人工调控任务的优先级、启动、暂停等,增加便捷性、可操控性,提高用户满意度。

为实现上述目的,本发明采用下述技术方案:

在本发明一实施例中,提出了一种控制调度算法及可视化监控的方法,该方法包括:

S01、接收到API请求之后,将API请求信息、队列信息、设备信息存储到redis,在redis中创建哈希表;

S02、获取redis中等待调度的API,根据队列、调度优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑;

S03、提供API调度下发实时监控页面,控制API的调度优先级可以进行人工干预,例如可提升特定API的优先级别或停止针对特定设备的下发;

S04、设置告警阈值,针对调度或执行时间过长的控制API,可触发告警。

进一步地,所述S01中API请求信息的存储格式为:

key=ckapiScheApi.$apiTraceId,

field=queueNo/devid/apiCode/url/method/requestTime/stat us/priority/islock/execTime/header/requestBody/proto。

进一步地,所述S01中队列信息的存储格式为:

key=ckapiScheQueue.$queueNo,

field=apiNum。

进一步地,所述S01中设备信息的存储格式为:

key=ckapiScheDev.$devid:$proto(ckapiScheDev为固定前缀,$devid:设备唯一标识,$proto:配置协议),

field=queueNo/apiNum/islock/break/longWaitNum/devset。

进一步地,所述S02中的API下发逻辑包括:排队机制与队列动态切换机制。

进一步地,所述排队机制包括:

S021、针对redis中等待调度的API下发任务,分析任务所属设备;

S022、判断该设备是否需要限制并发执行数,若已超过设置阈值,设备性能无法满足调度下发要求,则跳过该设备进行下一个队列处理;

S023、待该设备任务不足阈值时,再根据队列、任务优先级、请求时间因素分配一个空闲工作线程执行API下发逻辑。

进一步地,所述S02中的队列动态切换机制包括:历redis中的队列信息,按照队列中的API执行数进行排序。

进一步地,所述S04包括:

S041、设置API执行超时阈值,记为:ApiTimeoutThreshold;

S042、遍历redis中的API信息,若当前时间-API请求时间>ApiTimeoutThreshold,则发送syslog告警消息;

S043、设置API执行超长个数阈值,记为:ApiLongWaitNum;

S044、遍历redis中的等待调度的API信息,找出当前时间-请求时间>ApiTimeoutThreshold&&status=W的API个数,用这个计数更新redis中key=ckapiScheDev.$devid:$proto的longWaitNum的值;

S045、若longWaitNum>=ApiLongWaitNum&&break=0,则将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中断,即将break设置为1;否则,将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中,即将break设置为0。

在本发明一实施例中,还提出了一种控制调度算法及可视化监控的装置,该装置包括:

存储模块、接收到API请求之后,将API请求信息、队列信息、设备信息存储到redis,在redis中创建哈希表;

API下发模块、获取redis中等待调度的API,根据队列、调度优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑;

页面监控模块、提供API调度下发实时监控页面,控制API的调度优先级可以进行人工干预,例如可提升特定API的优先级别或停止针对特定设备的下发;

告警模块、设置告警阈值,针对调度或执行时间过长的控制API,可触发告警。

在本发明一实施例中,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现前述控制调度算法及可视化监控的方法。

在本发明一实施例中,还提出了一种计算机可读存储介质,计算机可读存储介质存储有执行控制调度算法及可视化监控的方法的计算机程序。

有益效果:

本发明避免了设备瓶颈等不可避免因素导致的任务积压、卡单现象。提供了API调度下发执行过程的实时监控页面,客户可通过实时监控页面API调度下发过程有一个清晰的认识,并可进行人工干预,增加了便捷性、可操控性。通过设置告警阈值,对于超过阈值的异常API,及时发送告警信息给客户,及时排障。

当大批量API同时进行下发操作时通过本发明,分专业、设备动态生成队列进行下发操作,各个队列互不影响。在下发调度过程中,可通过设置单个设备的调度阈值,若该设备已超过阈值,则跳过该队列,进行下一队列处理,待该设备下发任务不足阈值时,再按需调用队列处理。同时提供可视化页面,记录下发调度过程并可动态刷新,客户可在可视化监控页面进行人工干预。例如可提升特定工单的优先级别或停止针对特定设备的下发操作;设置工单超时时间告警阈值,针对调度或执行时间过长的控制API,可发送告警信息通知客户,及时反馈给客户,提高客户满意度。

附图说明

图1是本发明控制调度算法及可视化监控的方法流程示意图;

图2是实施例中API调度下发实时监控页面示意图;

图3是实施例中实时刷新API调度执行信息的页面截图;

图4是实施例中“暂停”按钮页面截图;

图5是实施例中“启动”按钮页面截图;

图6是实施例中“置顶”按钮页面截图;

图7是本发明控制调度算法及可视化监控的装置结构示意图;

图8是本发明一实施例的计算机设备结构示意图。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神,应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本发明的实施方式,提出了一种控制调度算法及可视化监控的方法及装置,通过可视化监控页面进行人工干预,可以有效提高API的执行效率,同时可人工调控任务的优先级、启动、暂停等,增加便捷性、可操控性,提高用户满意度。

下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。

如图1所示,该方法包括:

S01、接收到API请求之后,将API请求信息、队列信息、设备信息存储到redis,在redis中创建哈希表;

S02、获取redis中等待调度的API,根据队列、调度优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑;

S03、提供API调度下发实时监控页面,控制API的调度优先级可以进行人工干预,例如可提升特定API的优先级别或停止针对特定设备的下发;

S04、设置告警阈值,针对调度或执行时间过长的控制API,可触发告警。

所述S01中API请求信息的存储格式为:

key=ckapiScheApi.$apiTraceId,

field=queueNo/devid/apiCode/url/method/requestTime/stat us/priority/islock/execTime/header/requestBody/proto。

所述S01中队列信息的存储格式为:

key=ckapiScheQueue.$queueNo,

field=apiNum。

所述S01中设备信息的存储格式为:

key=ckapiScheDev.$devid:$proto(ckapiScheDev为固定前缀,$devid:设备唯一标识,$proto:配置协议),

field=queueNo/apiNum/islock/break/longWaitNum/devset。

所述S02中的API下发逻辑包括:排队机制与队列动态切换机制。

所述排队机制包括:

S021、针对redis中等待调度的API下发任务,分析任务所属设备;

S022、判断该设备是否需要限制并发执行数,若已超过设置阈值,设备性能无法满足调度下发要求,则跳过该设备进行下一个队列处理;

S023、待该设备任务不足阈值时,再根据队列、任务优先级、请求时间因素分配一个空闲工作线程执行API下发逻辑。

所述S02中的队列动态切换机制包括:历redis中的队列信息,按照队列中的API执行数进行排序。

所述S04包括:

S041、设置API执行超时阈值,记为:ApiTimeoutThreshold;

S042、遍历redis中的API信息,若当前时间-API请求时间>ApiTimeoutThreshold,则发送syslog告警消息;

S043、设置API执行超长个数阈值,记为:ApiLongWaitNum;

S044、遍历redis中的等待调度的API信息,找出当前时间-请求时间>ApiTimeoutThreshold&&status=W的API个数,用这个计数更新redis中key=ckapiScheDev.$devid:$proto的longWaitNum的值;

S045、若longWaitNum>=ApiLongWaitNum&&break=0,则将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中断,即将break设置为1;否则,将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中,即将break设置为0。

需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

为了对上述控制调度算法及可视化监控的方法进行更为清楚的解释,下面结合一个具体的实施例来进行说明,然而值得注意的是该实施例仅是为了更好地说明本发明,并不构成对本发明不当的限定。

S01、接收到客户的API请求之后,先将设备、API请求信息、队列信息存储到redis。

设备信息是根据客户的请求参数获取的,请求参数会包含设备地址信息,根据设备地址查询数据库可获取到详细的设备信息,即存储在redis中key=ckapiScheDev.$devid:$proto的信息。

队列信息是获取到API请求信息的时候,程序自动判断现有队列中,哪个队列中等待调度的API数量最少,就将该API放置到该队列中。队列总数为固定的,即存储在redis中key=ckapiScheQueue.$queueNo的信息。

在redis中创建如下哈希表hashtable:

设备信息:key=ckapiScheDev.$devid:$proto(ckapiScheDev为固定前缀,$devid:设备唯一标识,$proto:配置协议),

field=queueNo/apiNum/islock/break/longWaitNum/devset,其中:

存储到redis中的数据是哈希表类型,一个key对应多个键值对,filed指的是字段对应的键;

ckapiScheDev是存储在redis中固定的前缀,以ckapiScheDev开头的数据代表是设备信息数据;

proto:表示配置协议,例如snmp/cli。

queueNo:表示当前设备+协议组合归属的调度队列编号。

apiNum:表示正在调度的API数。

islock:表示设备是否加锁。根据数据库配置,获取该设备是否需要加锁,islock=Y,表示加锁;islock=N,表示不需要加锁

break:表示是否设置为调度中断,1=中断、0-未中断。

longWaitNum:表示超长执行API数。

devset:设备细类。

设备信息存储在redis里的示例:

API请求信息:key=ckapiScheApi.$apiTraceId($apiTraceId:API请求唯一标识),

field=queueNo/devid/apiCode/url/method/requestTime/stat us/priority/islock/execTime/header/requestBody/proto。其中:

apiTraceId:表示API请求唯一标识

queueNo:表示当前API归属的调度队列编号--获取redis中key=ckapiScheQueue.$queueNo,apiNum最小对应的队列号

$queueNo表示队列号,可理解为1号、2号等

devid:表示API下发设备标识

apiCode:表示当前API编码

url:表示API调用URL

method:表示API调用方法

requestTime:表示当前API被调用请求时间

priority:表示当前API执行优先级别,数字越小优先级越高--默认赋值为5

islock:表示当前API是否加锁(Y-加锁N-不加锁)。

status:表示当前API执行状态,含义如下:

status=W:等待调度

status=S:调度中

status=R:执行中

status=P:暂停执行

status=B:调度中断

execTime:表示当前API开始执行时间。

header:表示请求头参数。

requestBody:表示客户发送的请求体参数。

proto:表示配置协议,例如snmp/cli。

API请求信息存储在redis里的示例:

队列信息:key=ckapiScheQueue.$queueNo,(ckapiScheQueue.为固定前缀,$queueNo:队列号)

field=apiNum。其中apiNum表示调度队列正在调度的API数。

队列信息存储在redis里的示例:

S02、获取redis中等待调度的API,根据队列、任务优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑

排队机制:针对redis中等待调度的API下发任务,分析任务所属设备,判断该设备是否需要限制并发执行数,若已超过设置阈值,设备性能无法满足调度下发要求,则跳过该设备进行下一个队列处理,待该设备任务不足阈值时,再根据队列、任务优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑

队列动态切换机制:遍历redis中的队列信息,按照队列中的API执行数(apiNum)进行排序,若max(apiNum)-min(apiNum)>=10,假设:max(apiNum)对应的队列为queueNo1,min(apiNum)对应的队列queueNo2,则将队列queueNo1中的后5个API放置到队列queueNo2中等待调度执行。该队列动态切换机制主要是为了防止某个队列中等待执行的API过多,导致效率低下,将等待执行的API动态切换到比较空闲的队列中,可以明显提高API执行效率。

S03、提供API调度下发实时监控页面,控制API的调度优先级可以进行人工干预,例如可提升特定API的优先级别或停止针对特定设备的下发。

页面原型如图2所示,点击页面上的“过滤”按钮,会调用查询接口,接口会返回存储在redis里面的API调度执行信息。

如图3所示,页面可以实时刷新API调度执行信息,给客户一个直观的展示。

如图4所示,“暂停”、“暂停选中API”操作按钮,针对排查某个设备慢或者卡单的,可人工设置调度中断。避免影响到其他API的执行操作,对于执行状态为等待调度的API,提供“暂停”按钮。

如图5所示,“启动”、“启动选中API”操作按钮,针对队列中暂停执行的API,当人工排障之后,可人工控制该API继续执行。对于执行状态为暂停执行的API,提供“启动”按钮。

如图6所示“置顶”或图2中“置顶选中API”操作按钮,可以单个或批量进行API调度置顶,选择对应API置顶后,无论该API处于队列的什么位置,将调用顺序提前到队列的最前端,优先进行执行调用。“置顶”按钮,会将该API的优先级修改为1,优先级越小,队列优先执行调用。

S04、设置告警阈值,针对调度或执行时间过长的控制API,可触发告警。

设置API执行超时阈值,记为:ApiTimeoutThreshold。遍历redis中的API信息,若当前时间-API请求时间>ApiTimeoutThreshold,则发送syslog告警消息,告警消息为:AlarmType:采控稽核告警,DeviceIP:<本机IP>,StartTime:<开始时间>,AlarmDetail:API()执行时间超长,请求时间,已超过设置的阈值秒。

示例:假设API执行超时阈值ApiTimeoutThreshold=180秒,请求时间为2022-03-2813:36:47,正在等待调度的API超过180秒未执行的时候,程序会及时发送syslog告警信息通知客户:

设置API执行超长个数阈值,记为:ApiLongWaitNum。遍历redis中的等待调度的API信息,根据设备($devid)和配置协议($proto)记录满足“当前时间-请求时间>ApiTimeoutThreshold&&status=W”条件的API个数,用这个计数更新redis中key=ckapiScheDev.$devid:$proto的longWaitNum的值。若longWaitNum>=ApiLongWaitNum&&break=0,则将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中断,即将break设置为1;否则,将redis中相同设备($devid)和配置协议($proto)的API状态设置为调度中,即将break设置为0。

status=W表示API状态为等待调度

&&表示并且

整体意思是:等待调度的API等待时间超时,超过了设置的超时阈值(ApiTimeoutThreshold)

break=0表示调度未中断,等待调度

整体意思是:等待调度且调度未中断的API个数超过了系统设置的API超长个数阈值(ApiLongWaitNum)

可理解为:该队列排队人数过多。

基于同一发明构思,本发明还提出一种控制调度算法及可视化监控的装置。该装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图7是本发明控制调度算法及可视化监控的装置结构示意图。如图7所示,该装置包括:

存储模块110、接收到API请求之后,将API请求信息、队列信息、设备信息存储到redis,在redis中创建哈希表;

API下发模块120、获取redis中等待调度的API,根据队列、调度优先级、请求时间等因素分配一个空闲工作线程执行API下发逻辑;

页面监控模块130、提供API调度下发实时监控页面,控制API的调度优先级可以进行人工干预,例如可提升特定API的优先级别或停止针对特定设备的下发;

告警模块140、设置告警阈值,针对调度或执行时间过长的控制API,可触发告警。

应当注意,尽管在上文详细描述中提及了控制调度算法及可视化监控的装置的若干模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。

基于前述发明构思,如图8所示,本发明还提出一种计算机设备200,包括存储器210、处理器220及存储在存储器210上并可在处理器220上运行的计算机程序230,处理器220执行计算机程序230时实现前述控制调度算法及可视化监控的方法。

基于前述发明构思,本发明还提出一种计算机可读存储介质,计算机可读存储介质存储有执行前述控制调度算法及可视化监控的方法的计算机程序。

本发明避免了设备瓶颈等不可避免因素导致的任务积压、卡单现象。提供了API调度下发执行过程的实时监控页面,客户可通过实时监控页面API调度下发过程有一个清晰的认识,并可进行人工干预,增加了便捷性、可操控性。通过设置告警阈值,对于超过阈值的异常API,及时发送告警信息给客户,及时排障。

当大批量API同时进行下发操作时通过本发明,分专业、设备动态生成队列进行下发操作,各个队列互不影响。在下发调度过程中,可通过设置单个设备的调度阈值,若该设备已超过阈值,则跳过该队列,进行下一队列处理,待该设备下发任务不足阈值时,再按需调用队列处理。同时提供可视化页面,记录下发调度过程并可动态刷新,客户可在可视化监控页面进行人工干预。例如可提升特定工单的优先级别或停止针对特定设备的下发操作;设置工单超时时间告警阈值,针对调度或执行时间过长的控制API,可发送告警信息通知客户,及时反馈给客户,提高客户满意度。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包含的各种修改和等同布置。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

技术分类

06120115636274