CN115774611A - 剧本执行方法、装置、终端设备以及存储介质 - Google Patents
剧本执行方法、装置、终端设备以及存储介质 Download PDFInfo
- Publication number
- CN115774611A CN115774611A CN202211513004.0A CN202211513004A CN115774611A CN 115774611 A CN115774611 A CN 115774611A CN 202211513004 A CN202211513004 A CN 202211513004A CN 115774611 A CN115774611 A CN 115774611A
- Authority
- CN
- China
- Prior art keywords
- script
- operator
- scenario
- configuration information
- operators
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开了一种剧本执行方法、装置、终端设备以及存储介质,其剧本执行方法包括:接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。本申请解决了剧本执行中数据处理时效性低以及资源消耗过多的问题。
Description
技术领域
本申请涉及计算机任务调度技术领域,尤其涉及一种剧本执行方法、装置、终端设备以及存储介质。
背景技术
在计算机任务调度技术领域,常见的剧本执行方法可以分为两种:定时调度执行剧本和剧本常驻进程的方式。一方面,定时调度执行剧本的方式可以包括:用户编排好各个算子形成数据处理剧本;配置定时执行表达式以定时执行剧本;当需要调度事件时,开始调度剧本,一个算子一个进程,即执行完一个算子再接着执行下一个算子;算子与算子之间的数据传输采用消息队列或者文件系统的方式。其中,定时调度执行剧本可以正常的执行完整个剧本,当资源使用完就释放,资源消耗不大,但是其在数据处理的时效上存在一定的延迟。另一方面,剧本常驻进程的方式可以包括:用户编排好算子剧本;首次运行剧本时,启动整个剧本算子,一个算子一个常驻进程,各个算子在有数据接入时实时处理数据;定时检测整个剧本是否运行正常,如果不正常则进行告警,重新启动算子;算子与算子之间的数据传输采用消息队列的方式。其中,剧本常驻进程的方式虽然满足了时效性,可以快速的处理数据,但如果剧本过多,每个剧本的算子过多时,则会导致进程创建过多,资源占用大,且算子与算子之间采用消息队列传输数据会导致消息队列消费主题过多。
因此,针对上述剧本执行方法存在的数据处理时效性低、资源消耗过多的问题,有必要提出一种可同时满足数据处理时效性高和资源占用情况少的剧本执行方法。
发明内容
本申请的主要目的在于提供一种剧本执行方法、装置、终端设备以及存储介质,旨在解决剧本执行中数据处理时效性低以及资源消耗过多的问题。
为实现上述目的,本申请提供一种剧本执行方法,应用于选取的代理,所述剧本执行方法包括:
接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
根据所述算子配置创建算子,将所述算子组合成算子图;
根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
可选地,所述算子图包括有向无环图,所述将所述算子组合成算子图的步骤包括:
根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图;
所述根据所述线程数和所述算子图将所述算子合并成算子链的步骤包括:
根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
深度遍历所述有向无环图,根据所述每个算子链包含的算子数划分所述算子链;
判断需要互相通信的算子是否在同一个算子链上;
若存在需要互相通信的算子不在同一个算子链上,则将队列读算子和队列写算子增加至不在同一个算子链但需要相互通信的算子上,以形成算子间的连接。
可选地,所述根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图的步骤之后,还包括:
通过进行拓扑排序校验所述有向无环图是否正常;
若正常,则执行步骤:根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
若不正常,则获取异常信息并打印,退出剧本执行程序。
可选地,所述接收剧本配置信息的步骤之前,还包括:
通过所述用户编排的剧本得到所述剧本配置信息,具体包括:
获取所述用户编排的剧本;
将所述用户编排的剧本生成剧本配置文件并写入数据库中;
通过剧本调度器从所述数据库中获取所述剧本配置文件;
读取所述剧本配置文件得到所述剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况;
通过资源感知器获取所有代理的资源使用情况;
将所述剧本的资源使用情况和所述代理的资源使用情况进行匹配,得到所述选取的代理;
将所述剧本配置信息发送至所述选取的代理,以告知所述选取的代理启动所述剧本。
可选地,所述根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程的步骤包括:
根据所述剧本配置信息生成所述剧本启动脚本;
发送接收完成信号至剧本调度器,以告知所述剧本调度器已完成所述剧本配置信息的接收和所述剧本的部署;
运行所述剧本启动脚本以启动剧本进程。
可选地,所述运行所述剧本启动脚本以启动剧本进程的步骤之后,还包括:
监控剧本运行状态并上报,具体包括:
获取剧本运行日志;
根据所述剧本运行日志进行判断,得到所述剧本运行状态;
将所述剧本运行状态上报至剧本调度器。
可选地,所述将所述算子链部署到所述任务中并运行的步骤之后,还包括:
为每一个任务添加监听器,通过所述监听器判断任务运行状态;
若所述任务运行状态为异常状态,则调用并执行所述监听器的逻辑。
若所述任务运行状态为正常运行状态,则深度遍历所述算子链处理数据,具体包括:
从所述算子链中的源头算子开始调用数据处理方法获取第一数据;
所述源头算子调用数据转交方法将所述第一数据转交给第一下游算子;
按照预先配置的时间进行睡眠;
所述第一下游算子调用数据处理方法获取第二数据;
所述第一下游算子调用数据转交方法将所述第二数据转交给第二下游算子;
执行步骤:按照预先配置的时间进行睡眠;
以此循环,重复上述步骤进行数据处理,直到将获取的数据转交给最后一个算子处理,剧本执行完成。
本申请实施例还提出一种剧本执行装置,所述剧本执行装置包括:
剧本调度模块,用于接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
剧本启动模块,用于根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
图形创建模块,用于根据所述算子配置创建算子,将所述算子组合成算子图;
算子合并模块,用于根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
剧本执行模块,用于根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
本申请实施例还提出一种终端设备,所述终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的剧本执行程序,所述剧本执行程序被所述处理器执行时实现如上所述的剧本执行方法的步骤。
本申请实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有剧本执行程序,所述剧本执行程序被处理器执行时实现如上所述的剧本执行方法的步骤。
本申请实施例提出的剧本执行方法、装置、终端设备以及存储介质,通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
附图说明
图1为本申请剧本执行装置所属终端设备的功能模块示意图;
图2为本申请剧本执行方法第一示例性实施例的流程示意图;
图3为本申请剧本执行方法第二示例性实施例的流程示意图;
图4为本申请剧本执行方法第三示例性实施例的流程示意图;
图5为本申请剧本执行方法第三示例性实施例涉及的总体剧本运行流程的流程示意图;
图6为本申请剧本执行方法第五示例性实施例的流程示意图;
图7为本申请示例性实施例中用户编排的剧本算子的示意图;
图8为本申请示例性实施例中用户编排的剧本算子之间数据传递的示意图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例的主要解决方案是:接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
具体地,参照图1,图1为本申请剧本执行装置所属终端设备的功能模块示意图。该剧本执行装置可以为独立于终端设备的、能够进行剧本调度、剧本启动和剧本执行的装置,其可以通过硬件或软件的形式承载于终端设备上。该终端设备可以为手机、平板电脑等具有数据处理功能的智能移动终端,还可以为具有数据处理功能的固定终端设备或服务器等。
在本实施例中,该剧本执行装置所属终端设备至少包括输出模块110、处理器120、存储器130以及通信模块140。
存储器130中存储有操作系统以及剧本执行程序,剧本执行装置可以将接收的剧本配置信息,生成的剧本启动脚本,根据所述算子配置创建的算子,将所述算子组合成的算子图,将所述算子合成的算子链,根据所述任务数创建的任务,以及根据所述线程数和创建的算子数计算得到的每个算子链包含的算子数,判断需要互相通信的算子是否在同一个算子链上的判断结果,获取的异常信息,获取的用户编排的剧本,生成的剧本配置文件,读取所述剧本配置文件得到的所述剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况,通过资源感知器获取的所有代理的资源使用情况,将所述剧本的资源使用情况和所述代理的资源使用情况进行匹配得到的所述选取的代理,发送的接收完成信号,获取的剧本运行日志,根据所述剧本运行日志进行判断得到的剧本运行状态,以及通过所述监听器判断得到的任务运行状态,调用数据处理方法获取的数据,调用数据转交方法转交的数据等信息存储于该存储器130中;输出模块110可为显示屏等。通信模块140可以包括WIFI模块、移动通信模块以及蓝牙模块等,通过通信模块140与外部设备或服务器进行通信。
其中,存储器130中的剧本执行程序被处理器执行时实现以下步骤:
接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
根据所述算子配置创建算子,将所述算子组合成算子图;
根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图;
根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
深度遍历所述有向无环图,根据所述每个算子链包含的算子数划分所述算子链;
判断需要互相通信的算子是否在同一个算子链上;
若存在需要互相通信的算子不在同一个算子链上,则将队列读算子和队列写算子增加至不在同一个算子链但需要相互通信的算子上,以形成算子间的连接。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
通过进行拓扑排序校验所述有向无环图是否正常;
若正常,则执行步骤:根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
若不正常,则获取异常信息并打印,退出剧本执行程序。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
通过所述用户编排的剧本得到所述剧本配置信息,具体包括:
获取所述用户编排的剧本;
将所述用户编排的剧本生成剧本配置文件并写入数据库中;
通过剧本调度器从所述数据库中获取所述剧本配置文件;
读取所述剧本配置文件得到所述剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况;
通过资源感知器获取所有代理的资源使用情况;
将所述剧本的资源使用情况和所述代理的资源使用情况进行匹配,得到所述选取的代理;
将所述剧本配置信息发送至所述选取的代理,以告知所述选取的代理启动所述剧本。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
根据所述剧本配置信息生成所述剧本启动脚本;
发送接收完成信号至剧本调度器,以告知所述剧本调度器已完成所述剧本配置信息的接收和所述剧本的部署;
运行所述剧本启动脚本以启动剧本进程。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
监控剧本运行状态并上报,具体包括:
获取剧本运行日志;
根据所述剧本运行日志进行判断,得到所述剧本运行状态;
将所述剧本运行状态上报至剧本调度器。
进一步地,存储器130中的剧本执行程序被处理器执行时还实现以下步骤:
为每一个任务添加监听器,通过所述监听器判断任务运行状态;
若所述任务运行状态为异常状态,则调用并执行所述监听器的逻辑。
若所述任务运行状态为正常运行状态,则深度遍历所述算子链处理数据,具体包括:
从所述算子链中的源头算子开始调用数据处理方法获取第一数据;
所述源头算子调用数据转交方法将所述第一数据转交给第一下游算子;
按照预先配置的时间进行睡眠;
所述第一下游算子调用数据处理方法获取第二数据;
所述第一下游算子调用数据转交方法将所述第二数据转交给第二下游算子;
执行步骤:按照预先配置的时间进行睡眠;
以此循环,重复上述步骤进行数据处理,直到将获取的数据转交给最后一个算子处理,剧本执行完成。
本实施例通过上述方案,具体通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
基于上述终端设备架构但不限于上述架构,提出本申请方法实施例。
参照图2,图2为本申请剧本执行方法第一示例性实施例的流程示意图。本实施例方法的执行主体可以是一种剧本执行装置,也可以是一种剧本执行终端设备或服务器,本实施例以剧本执行服务器进行举例,该剧本执行服务器可以集成在具有数据处理功能的智能手机、平板电脑等终端设备上。
在本实施例中,该剧本执行服务器至少包括一个代理(Agent),所述代理是部署在服务器上的进程,具有启动剧本、监控剧本运行状态以及上报当前服务器的可用资源等功能,是服务器的一个代理进程。所述剧本执行方法可以应用于该剧本执行服务器上任意一个选取的代理,所述剧本执行方法包括:
步骤S10,接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数。
具体地,通过选取的代理接收剧本配置信息。可选地,所述剧本配置信息可以是通过处理用户编排的剧本得到;可选地,所述剧本配置信息可以包括但不限于线程数、算子配置和任务数等。
步骤S20,根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程。
具体地,根据接收到的剧本配置信息生成剧本启动脚本,并封装好该剧本启动脚本,然后运行该剧本启动脚本以启动剧本进程。
步骤S30,根据所述算子配置创建算子,将所述算子组合成算子图。
具体地,在启动剧本进程后,根据剧本配置信息中的算子配置创建出算子,即实例化算子。可选地,采用Java语言实现算子对象(即算子实例)的创建。然后,将创建的算子组合生成算子图。
步骤S40,根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同。
具体地,根据剧本配置信息中的线程数以及组合生成的算子图,将算子合并成算子链,其中,合并生成的算子链的数量与配置的线程数相同。
步骤S50,根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
具体地,根据剧本配置信息中的任务数创建任务,将生成的算子链部署到创建的任务中,然后开启线程运行任务。在本实施例中,任务通过线程来管控,因此,可以配置相同的线程数和任务数。可选地,部署算子链的方式可以包括采用分布式部署。
本实施例通过上述方案,具体通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
参照图3,图3为本申请剧本执行方法第二示例性实施例的流程示意图。基于上述图2所示的实施例,在本实施例中,所述算子图可以包括有向无环图,上述将所述算子组合成算子图的步骤可以包括:
步骤S301,根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图。
具体地,所述剧本配置信息还可以包括边的配置。根据剧本配置信息中的边的配置,连接算子之间的有向边,组合生成有向无环图。
在本实施例中,上述步骤S40,根据所述线程数和所述算子图将所述算子合并成算子链可以包括:
步骤S401,根据所述线程数和创建的算子数计算得到每个算子链包含的算子数。
具体地,获取创建的算子的算子数,根据配置的线程数和创建的算子数计算得到每个算子链包含的算子数。可选地,计算方法可以为:将创建的算子的算子数除以配置的线程数,得到每个算子链最多链接的算子的数量。
步骤S402,深度遍历所述有向无环图,根据所述每个算子链包含的算子数划分所述算子链;
步骤S403,判断需要互相通信的算子是否在同一个算子链上。
可选地,若存在需要互相通信的算子不在同一个算子链上,则执行步骤S404,将队列读算子和队列写算子增加至不在同一个算子链但需要相互通信的算子上,以形成算子间的连接。
需要说明的是,在本实施例中,同一个算子链之间的算子以引用的方式来传递数据,不同的算子链之间通过将引用写入队列的方式来传递数据。
本实施例通过将算子合并成算子链,算子之间的数据传递通过引用的方式,算子链之间的数据传递通过将引用写入队列的方式,节省了网络IO和磁盘IO,减少数据传输所消耗的资源。
参照图4,图4为本申请剧本执行方法第三示例性实施例的流程示意图。基于上述图3所示的实施例,在本实施例中,在上述根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图的步骤之后,还可以包括:
步骤S31,通过进行拓扑排序校验所述有向无环图是否正常。
具体地,通过进行拓扑排序校验生成的有向无环图是否正常。可选地,校验的方式可以包括:校验是否是有向无环图,和/或,校验各个算子配置是否正常。
可选地,若所述有向无环图的校验结果为正常,则执行步骤S401,根据所述线程数和创建的算子数计算得到每个算子链包含的算子数。
可选地,若所述有向无环图的校验结果为不正常,则执行步骤S410,获取异常信息并打印,退出剧本执行程序。
通过对生成的有向无环图进行校验,有效地保证了剧本执行的稳定性,提升安全剧本算子执行的性能。
进一步地,本实施例还公开了在接收剧本配置信息的步骤之前实施的方案。参考图5,图5为本申请剧本执行方法第三示例性实施例涉及的总体剧本运行流程的流程示意图。在本实施例中,剧本执行服务器至少还包括一个Web,所述Web是部署在服务器上的一个为用户提供web交互式编排剧本的进程,同时还具有调度剧本到代理服务器上执行的功能。所述Web可以包括但不限于待运行剧本单元、Agent管理器、剧本调度器和资源感知器等。
在本实施例中,在接收剧本配置信息的步骤之前,还可以包括:
步骤S01,通过所述用户编排的剧本得到所述剧本配置信息。
具体地,上述通过所述用户编排的剧本得到所述剧本配置信息的步骤可以包括:
步骤S011,获取所述用户编排的剧本;
步骤S012,将所述用户编排的剧本生成剧本配置文件并写入数据库中;
步骤S013,通过剧本调度器从所述数据库中获取所述剧本配置文件;
步骤S014,读取所述剧本配置文件得到所述剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况;
步骤S015,通过资源感知器获取所有代理的资源使用情况;
步骤S016,将所述剧本的资源使用情况和所述代理的资源使用情况进行匹配,得到所述选取的代理;
步骤S017,将所述剧本配置信息发送至所述选取的代理,以告知所述选取的代理启动所述剧本。
在本实施例中,当用户根据自身业务通过Web编排好剧本后,获取用户编排好的剧本,其中,该剧本的内容包括配置的优先级和剧本的资源使用情况;将用户编排好的剧本生成剧本配置文件,并将该剧本配置文件写入数据库中,如MySQL;根据剧本配置的优先级,通过剧本调度器从数据库中获取待运行的剧本配置文件;读取获取的剧本配置文件得到对应的剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况,如任务数和内存数;通过资源感知器获取剧本执行服务器上所有代理的资源使用情况;将剧本的资源使用情况和获取到的代理的资源使用情况进行匹配,选取得到满足条件的代理;然后将读取到的剧本配置信息发送至选取的代理,以告知该代理启动对应的剧本。然后,异步等待代理上报剧本运行状态,并将上报的剧本运行状态更新至数据库中。
本实施例中通过采用任务数、内存的配置方法来控制剧本资源,其中,任务用线程来控制,内存数以Java JVM运行参数来控制,如果超出则会抛出异常;而每个代理都有配置自己能够分配的最多的线程数和内存数,这样可以精确的进行任务调度,资源控制。
本实施例通过上述方案,具体通过所述用户编排的剧本得到所述剧本配置信息;接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
基于上述图2所示的实施例,在本实施例中,上述步骤S20,根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程可以包括:
步骤S201,根据所述剧本配置信息生成所述剧本启动脚本;
步骤S202,发送接收完成信号至剧本调度器,以告知所述剧本调度器已完成所述剧本配置信息的接收和所述剧本的部署;
步骤S203,运行所述剧本启动脚本以启动剧本进程。
在本实施例中,选取的代理根据剧本调度器发送过来的剧本配置信息,生成剧本启动脚本并进行封装;然后,选取的代理向剧本调度器发送接收完成信息,以告知所述剧本调度器已经完成剧本配置信息的接收以及对应剧本的部署;然后,运行生成的剧本启动脚本以启动剧本进程。
进一步地,本实施例还公开了在运行所述剧本启动脚本以启动剧本进程的步骤之后实施的方案。在运行所述剧本启动脚本以启动剧本进程的步骤之后,还可以包括:
步骤S21,监控剧本运行状态并上报。
具体地,所述监控剧本运行状态并上报的步骤可以包括:
步骤S211,获取剧本运行日志;
步骤S212,根据所述剧本运行日志进行判断,得到所述剧本运行状态;
步骤S213,将所述剧本运行状态上报至剧本调度器。
在本实施例中,启动剧本运行进程后,获取剧本运行日志;根据获得的剧本运行日志对剧本运行状态进行判断,可选地,判断所述剧本运行日志中是否有运行成功的关键字或异常关键字,和/或,判断进程是否退出;获取判断得到的剧本运行状态;然后,将该剧本运行状态上报至剧本调度器。
本实施例通过上述方案,具体通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;监控剧本运行状态并上报;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
参照图6,图6为本申请剧本执行方法第五示例性实施例的流程示意图。基于上述图2所示的实施例,在本实施例中,在将所述算子链部署到所述任务中并运行的步骤之后,还可以包括:
步骤S60,为每一个任务添加监听器,通过所述监听器判断任务运行状态。可选地,所述任务运行状态可以包括异常状态和正常运行状态。
可选地,若所述任务运行状态为异常状态,则执行步骤S61,调用并执行所述监听器的逻辑。
具体地,如果任务运行异常则调用并执行监听器的逻辑,所述监听器的逻辑可以包括:停止其他任务的执行,然后获取该执行异常的任务的异常信息并打印,最后释放资源,退出剧本执行程序。
可选地,若所述任务运行状态为正常运行状态,则执行步骤S62,深度遍历所述算子链处理数据。
具体地,所述深度遍历所述算子链处理数据的步骤可以包括:
步骤S621,从所述算子链中的源头算子开始调用数据处理方法获取第一数据;
步骤S622,所述源头算子调用数据转交方法将所述第一数据转交给第一下游算子;
步骤S623,按照预先配置的时间进行睡眠;
步骤S624,所述第一下游算子调用数据处理方法获取第二数据;
步骤S625,所述第一下游算子调用数据转交方法将所述第二数据转交给第二下游算子;
重复循环执行步骤S623,按照预先配置的时间进行睡眠;所述第一下游算子调用数据处理方法获取第二数据;所述第一下游算子调用数据转交方法将所述第二数据转交给第二下游算子;
以此循环,重复上述步骤进行数据处理,直到将获取的数据转交给最后一个算子处理,剧本执行完成。
在本实施例中,首先从算子链中的源头算子开始调用数据处理方法handlerData()获取数据,以第一数据表示;然后该源头算子调用数据转交方法callNext()将获得的第一数据转交给下游算子,以第一下游算子表示;接着,按照用户预先配置的时间进行短暂的睡眠。
需要说明的是,每个算子都有数据处理方法handlerData(),用以根据每个算子不同的功能去获取数据,如,Kafka读算子的handlerData()是从Kafka中读取数据,清洗算子的handlerData()则是清洗数据,输出算子的handlerData()则是将数据输出到对应的数据源;而数据转交方法callNext()则是调用下游算子的handlerData()方法,将数据传递给下游算子。
然后,第一下游算子继续调用数据处理方法handlerData()获取数据,以第二数据表示;然后该第一下游算子调用数据转交方法callNext()将获得的第二数据继续转交给下游算子,以第二下游算子表示;接着,重复执行步骤,按照用户预先配置的时间进行短暂的睡眠。以此循环上述步骤,下游算子调用数据处理方法handlerData()获取数据,然后该下游算子调用数据转交方法callNext()将获得的数据继续转交给再一下游算子;直到将获取到的数据转交到算子链的最后一个算子去处理,在该算子的数据处理完成后,则剧本执行完成。
本实施例通过上述方案,具体通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
示例性地,参考图7,图7为本申请示例性实施例中用户编排的剧本算子的示意图。根据用户编排好的剧本得知算子数为4个,算子之间数据传递的关系如图7所示,数据传递由Kafka算子-清洗算子1-清洗算子2-输出算子。
参考图8,图8为本申请示例性实施例中用户编排的剧本算子之间数据传递的示意图。假设剧本配置的线程数为2,则算子链最大长度为4/2=2。经过算子合并后,前面两个算子合并成一个算子链1,后面两个算子合并成另一个算子链2。算子链1和算子链2中的清洗算子1和清洗算子2需要通信,由于它们在不同的线程中,因此在算子链1中由程序自动增加一个队列写算子,在算子链2中自动增加一个队列读算子,那么清洗算子1的输出结果就会通过队列写算子往队列中输出数据。然后队列读算子调用数据处理方法向队列中读取数据之后,再调用数据转交方法将数据转交给清洗算子2。
然后,将算子链1部署到线程1中开始处理数据,首先,调用Kafka读算子的处理数据方法读取Kafka消息队列的数据;然后,调用数据转交方法将数据传递给清洗算子1处理数据;清洗算子1处理完数据,将数据交给队列写算子,队列写算子将数据写到队列中。至此,任务1中一个周期的数据就处理完成了。等待200ms的时间(此值可以由用户来配置),开始下一轮处理数据。
接着,将算子链2部署到线程2中开始处理数据,首先,调用队列读算子的数据处理方法读取队列中传输过来的数据;然后,调用数据转交方法将数据转交给清洗算子2;清洗算子2经过自己的数据处理方法,然后调用数据转交方法将数据转交给输出算子,最终,输出算子调用数据处理方法将数据写出到对应的数据源。
此外,本申请实施例还提出一种剧本执行装置,所述剧本执行装置包括:
剧本调度模块,用于接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
剧本启动模块,用于根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
图形创建模块,用于根据所述算子配置创建算子,将所述算子组合成算子图;
算子合并模块,用于根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
剧本执行模块,用于根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
本实施例实现剧本执行的原理及实施过程,请参照上述各实施例,在此不再一一赘述。
此外,本申请实施例还提出一种终端设备,所述终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的剧本执行程序,所述剧本执行程序被所述处理器执行时实现如上所述的剧本执行方法的步骤。
由于本剧本执行程序被处理器执行时,采用了前述所有实施例的全部技术方案,因此至少具有前述所有实施例的全部技术方案所带来的所有有益效果,在此不再一一赘述。
此外,本申请实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有剧本执行程序,所述剧本执行程序被处理器执行时实现如上所述的剧本执行方法的步骤。
由于本剧本执行程序被处理器执行时,采用了前述所有实施例的全部技术方案,因此至少具有前述所有实施例的全部技术方案所带来的所有有益效果,在此不再一一赘述。
相比现有技术,本申请实施例提出的剧本执行方法、装置、终端设备以及存储介质,通过接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;根据所述算子配置创建算子,将所述算子组合成算子图;根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。通过在配置剧本时配置剧本的线程数,将算子合并成数量等同于线程数的算子链,将合并成的算子链部署到任务中运行,使得一个剧本是一个进程,进程常驻于内存中,且一个进程可以同时多线程执行,实现在减少数据传输消耗资源的同时,实时处理数据,保障数据的时效性。基于本申请方案,解决了安全剧本执行时的数据处理时效性低以及资源占用过大的问题;此外,本申请方案支持分布式部署来执行剧本,不会因为单台机器的限制而导致资源不足,增强扩展性。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,被控终端,或者网络设备等)执行本申请每个实施例的方法。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种剧本执行方法,应用于选取的代理,其特征在于,所述剧本执行方法包括:
接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
根据所述算子配置创建算子,将所述算子组合成算子图;
根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
2.如权利要求1所述的剧本执行方法,其特征在于,所述算子图包括有向无环图,所述将所述算子组合成算子图的步骤包括:
根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图;
所述根据所述线程数和所述算子图将所述算子合并成算子链的步骤包括:
根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
深度遍历所述有向无环图,根据所述每个算子链包含的算子数划分所述算子链;
判断需要互相通信的算子是否在同一个算子链上;
若存在需要互相通信的算子不在同一个算子链上,则将队列读算子和队列写算子增加至不在同一个算子链但需要相互通信的算子上,以形成算子间的连接。
3.如权利要求2所述的剧本执行方法,其特征在于,所述根据所述剧本配置信息连接所述算子之间的有向边,生成所述有向无环图的步骤之后,还包括:
通过进行拓扑排序校验所述有向无环图是否正常;
若正常,则执行步骤:根据所述线程数和创建的算子数计算得到每个算子链包含的算子数;
若不正常,则获取异常信息并打印,退出剧本执行程序。
4.如权利要求1所述的剧本执行方法,其特征在于,所述接收剧本配置信息的步骤之前,还包括:
通过所述用户编排的剧本得到所述剧本配置信息,具体包括:
获取所述用户编排的剧本;
将所述用户编排的剧本生成剧本配置文件并写入数据库中;
通过剧本调度器从所述数据库中获取所述剧本配置文件;
读取所述剧本配置文件得到所述剧本配置信息,其中,所述剧本配置信息还包括剧本的资源使用情况;
通过资源感知器获取所有代理的资源使用情况;
将所述剧本的资源使用情况和所述代理的资源使用情况进行匹配,得到所述选取的代理;
将所述剧本配置信息发送至所述选取的代理,以告知所述选取的代理启动所述剧本。
5.如权利要求1所述的剧本执行方法,其特征在于,所述根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程的步骤包括:
根据所述剧本配置信息生成所述剧本启动脚本;
发送接收完成信号至剧本调度器,以告知所述剧本调度器已完成所述剧本配置信息的接收和所述剧本的部署;
运行所述剧本启动脚本以启动剧本进程。
6.如权利要求1所述的剧本执行方法,其特征在于,所述运行所述剧本启动脚本以启动剧本进程的步骤之后,还包括:
监控剧本运行状态并上报,具体包括:
获取剧本运行日志;
根据所述剧本运行日志进行判断,得到所述剧本运行状态;
将所述剧本运行状态上报至剧本调度器。
7.如权利要求1所述的剧本执行方法,其特征在于,所述将所述算子链部署到所述任务中并运行的步骤之后,还包括:
为每一个任务添加监听器,通过所述监听器判断任务运行状态;
若所述任务运行状态为异常状态,则调用并执行所述监听器的逻辑;
若所述任务运行状态为正常运行状态,则深度遍历所述算子链处理数据,具体包括:
从所述算子链中的源头算子开始调用数据处理方法获取第一数据;
所述源头算子调用数据转交方法将所述第一数据转交给第一下游算子;
按照预先配置的时间进行睡眠;
所述第一下游算子调用数据处理方法获取第二数据;
所述第一下游算子调用数据转交方法将所述第二数据转交给第二下游算子;
执行步骤:按照预先配置的时间进行睡眠;
以此循环,重复上述步骤进行数据处理,直到将获取的数据转交给最后一个算子处理,剧本执行完成。
8.一种剧本执行装置,其特征在于,所述剧本执行装置包括:
剧本调度模块,用于接收剧本配置信息,其中,所述剧本配置信息通过用户编排的剧本得到,所述剧本配置信息包括线程数、算子配置和任务数;
剧本启动模块,用于根据所述剧本配置信息生成剧本启动脚本,运行所述剧本启动脚本以启动剧本进程;
图形创建模块,用于根据所述算子配置创建算子,将所述算子组合成算子图;
算子合并模块,用于根据所述线程数和所述算子图将所述算子合并成算子链,所述算子链的数量与所述线程数相同;
剧本执行模块,用于根据所述任务数创建任务,将所述算子链部署到所述任务中并运行。
9.一种终端设备,其特征在于,所述终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的剧本执行程序,所述剧本执行程序被所述处理器执行时实现如权利要求1-7中任一项所述的剧本执行方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有剧本执行程序,所述剧本执行程序被处理器执行时实现如权利要求1-7中任一项所述的剧本执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211513004.0A CN115774611A (zh) | 2022-11-29 | 2022-11-29 | 剧本执行方法、装置、终端设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211513004.0A CN115774611A (zh) | 2022-11-29 | 2022-11-29 | 剧本执行方法、装置、终端设备以及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115774611A true CN115774611A (zh) | 2023-03-10 |
Family
ID=85391438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211513004.0A Pending CN115774611A (zh) | 2022-11-29 | 2022-11-29 | 剧本执行方法、装置、终端设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115774611A (zh) |
-
2022
- 2022-11-29 CN CN202211513004.0A patent/CN115774611A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9201693B2 (en) | Quota-based resource management | |
US20160246643A1 (en) | Method and apparatus for scheduling blocking tasks | |
JP3922070B2 (ja) | 分散制御方法及び装置 | |
CN108319495B (zh) | 任务处理方法及装置 | |
CA3168286A1 (en) | Data flow processing method and system | |
WO2019196250A1 (zh) | 一种任务处理方法、存储介质、服务器和装置 | |
CN109710416B (zh) | 资源调度方法及装置 | |
CN109766172B (zh) | 一种异步任务调度方法以及装置 | |
CN102880505A (zh) | 用于后台工作执行的事件聚合 | |
CN110362401A (zh) | 数据跑批方法、装置、存储介质及集群中的成员主机 | |
US11656902B2 (en) | Distributed container image construction scheduling system and method | |
CN113312165B (zh) | 一种任务处理方法及装置 | |
CN115048206B (zh) | 资源调度方法及服务器 | |
CN115617497B (zh) | 线程处理方法、调度组件、监测组件、服务器和存储介质 | |
CN107066339A (zh) | 分布式作业管理器及分布式作业管理方法 | |
CN111240864A (zh) | 异步任务处理方法、装置、设备及计算机可读存储介质 | |
CN114138434A (zh) | 一种大数据任务调度系统 | |
KR102621670B1 (ko) | 부트-업 동안 서비스의 스케줄링을 관리하기 위한 방법 및 장치 | |
CN114461385A (zh) | 线程池调度方法、装置、设备以及可读存储介质 | |
CN109766168B (zh) | 任务调度方法和装置、存储介质以及计算设备 | |
CN115774611A (zh) | 剧本执行方法、装置、终端设备以及存储介质 | |
CN113495787A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN114710454A (zh) | 一种消息处理方法、车载通讯装置、电子设备及存储介质 | |
JP2008225641A (ja) | コンピュータシステム、割り込み制御方法及びプログラム | |
CN114168233B (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 |