基于SPA模型的大规模任务调度平台设计与应用
2013-02-28朱应坚
向 勇,陈 康,朱应坚
(1.中国电信股份有限公司广州研究院 广州510630;2.中国电信股份有限公司广东分公司 广州510081)
1 引言
任务调度,在企业数据生产、运营和管理中具有非常重要的地位,是企业运营数据及时交付、支撑企业进行经营决策和业务活动的重要保障,承担了数据采集、ETL、数据汇总等大量任务的调度工作。然而,当前大部分调度功能都分散在各个IT支撑系统中且任务关联信息不完整,这不仅增大了任务运维、管理人员的工作量和工作难度,而且让相关人员无法便捷、准确地掌握企业数据生产中的所有任务,更谈不上统筹调度。
另外,现有任务调度系统,在处理大规模任务调度时存在一些明显不足,如下所述。
·任务调度、管理智能化程度不足,如任务之间的关系需要人工配置和维护,当需要管理的任务数量较多时,不仅维护工作量大,而且容易操作失误;
·现有调度系统基本都采用静态任务优先级来控制任务的调度顺序,而任务的重要性和紧急性在任务的全生命周期是动态变化的,因此其调度控制合理性较差。
为了解决上述问题,笔者根据多年的数据分析与应用经验,提出了一种基于SPA(single point of access)模型和BSA(browser server agent)架构的大规模统一任务调度设计方案,并在中国电信股份有限公司广东分公司(以下简称广东电信)得到验证和应用。
2 SPA模型
SPA模型,即单点访问信息模型,如图1所示。通过将任务与人员、任务动作、其他任务、输入输出信息、日志和资源关联,使任务调度运维人员只需要访问一个任务,就能了解到与这个任务相关的其他所有信息。
图1 SPA模型
·关联人员:用来关联设置任务的运维者(责任人)、任务的关注者(哪些人会关注该任务)以及任务的信息订阅者(订阅任务告警、任务日志等)。
·关联动作:任务可以关联设置一个或者多个动作。每个动作,对应一段代码或一个程序,负责处理一定的业务逻辑。动作之间只有先后关系,即任务中的多个动作将依次串行调度执行。
·关联任务:任务可以与其他任务关联(依赖关系和互斥关系),用来控制任务与任务之间的调度顺序以及避免任务之间出现干扰。
·关联数据:设置任务的输入输出信息(任务需要哪些输入信息,如数据源文件信息;会产生哪些输出信息,如目标输出文件信息),使任务运维和管理人员可以方便了解到与这个任务有关的输入输出信息。
·关联日志:任务运维人员在任务调度运维过程中,除了关心任务本身的调度日志信息外,还需要关注被调度任务的外部日志信息,如数据采集程序生成的详细日志信息。因此,关联日志,负责建立外部日志的通道,使任务运维人员可以单点看到外部日志内容。
·关联资源:任务调度运维人员在任务调度运维过程中,需要了解任务执行服务器上的CPU、内存、网络等资源占用情况。同时,任务调度平台本身,也需要根据当前任务执行服务器上的资源状况进行合理调度。
3 系统设计
为了满足大规模作业环境下任务的统一调度和管理需求,需满足以下设计原则和目标:
·良好的可扩展性和系统处理能力,能够随时将需要的任务纳入系统统一调度、管理;
·良好的调度优化策略控制,保证任务调度的合理性和高效性;
·良好的任务管理界面,方便任务调度、管理人员查看和维护任务;
·良好的跨平台支持能力和任务兼容性,使任务调度系统能够运行在任何主流操作系统上,并能够对任意可执行的脚本或程序进行调度、管理;
·良好的任务触发机制,使任务调度人员可以根据生产调度需要,灵活地管理任务的调度运行。
为了实现上述目的,本文提出一种基于SPA模型和BSA架构的大规模统一任务调度设计方案——统一任务调度(UTS),具体如下。
3.1 系统架构
统一任务调度架构如图2所示。
大规模统一任务调度平台,主要由任务调度服务端、任务代理和任务配置数据库几部分构成。
·任务调度服务端:负责任务的调度及展现服务,采用纯Java编程,支持Linux、Windows、UNIX等主流操作系统。
·任务代理:负责任务接收、任务执行(外部程序或命令调用)、结果上报等,采用纯Java编程,支持Linux、Windows、UNIX等主流操作系统。
·任务配置数据库:用于存放任务配置信息、调度记录、任务代理监控数据等信息,支持Oracle、MySQL等主流数据库。
3.2 功能框架
从图3可以看出,系统整体上可以划分为任务配置、任务监控与展现、任务查询与统计、任务调度与控制、任务代理以及系统管理等模块。
图2 统一任务调度系统架构
3.2.1 任务配置
包括任务的新建、修改和删除等以及任务关联关系定义、任务类型管理和应用系统管理等功能。
任务属性,如SPA模型所示,主要由任务的基本信息、调度机制、关联动作、关联日志、关联输入输出信息、关联人员等构成。
·任务基本信息:主要包括任务名称、所属应用系统、类型、出错处理策略(继续/结束)、任务描述等。
·任务调度机制:包括定时触发、事件触发。
·任务关联动作:指任务具体要执行的程序或命令,可以有多个;多个动作可以是顺序执行,也可以是并发执行。
·任务关联日志:可以设置需要关联查看的其他日志信息,如被调度执行程序或命令所产生的日志信息。
·任务关联输入输出:可以手工设置或自动分析出任务所依赖的输入和输出信息。
图3 统一任务调度功能框架
·任务管理人员:可以设置任务对哪些人可见以及需要对哪些人推动任务调度信息,如调度成功与否等。
3.2.2 任务监控与展现
提供图形化方式、比较直观的任务管理、维护界面,包括任务拓扑图、任务列表等多种展现方式,并提供实时的任务代理状态监控能力。
3.2.3 任务查询与统计
提供任务查询、统计功能,如任务平均耗时统计、耗时最长任务链分析、关键任务分析等。
3.2.4 任务调度与控制
提供丰富的任务控制能力,包括任务开始、暂停、继续、结束等,特别是任务结束功能,可以避免调度人员人工登录到相应任务主机上结束任务对应的进程。
3.2.5 任务代理
与调度服务端保持心跳连接,实时上报其运行状态。同时,接收调度服务端下发的任务,在所在主机本地调用执行任务中的动作(即可执行程序、脚本或命令),并将执行结果上报给调度服务端。
除了满足上述功能外,任务代理还具备以下两大关键能力和指标。
可控的系统负载:一方面是任务代理自身带来的系统开销要尽可能小,从而避免对任务主机造成较大影响;另一方面,任务代理能调度执行的任务也可控,包括任务数量以及执行任务时的系统总负荷(通常指CPU利用率)。
现场恢复能力:当任务代理因各种原因挂起或者关闭时,在重启任务代理后,能够将异常发生前正在执行的任务及任务状态恢复回来,包括任务接续等,从而可以避免重新调度执行这些任务。
3.2.6 系统管理
除了提供了常规的用户管理、角色管理、权限管理、备份与恢复等功能外,还提供现场恢复功能,即当任务调度服务端异常重启后,能够恢复到异常前的状态。
4 调度智能化处理
4.1 自动化任务关联
随着数据库,特别是分布式并行数据库性能的不断提升,越来越多的数据分析任务都在数据库中完成。而这些分析任务基本都采用SQL脚本来实现。通过对SQL脚本涉及的数据输入/输出表、表字段信息的提取,就可以分析出SQL脚本任务之间的依赖关系。例如任务A的SQL脚本中,数据输入表为A、B,数据输出表为C,而任务B的SQL脚本中,数据输入表为C、D,数据输出表为E,那么,则可以得出结论,任务B依赖于任务A的完成,从而避免人工定义任务之间的依赖关系,这样不仅可以显著降低运维人员工作量,同时还可以提高任务依赖关系的准确性。
4.2 调度优先级动态优化
如何更加合理地安排大规模任务调度的优先顺序、提高资源的合理利用、确保紧急且重要的任务能被优先调度等成为任务调度人员目前关注的焦点问题。
目前,现有技术主要通过预先配置好的静态优先级来控制任务调度的优先顺序,但这种方法存在如下不足。
首先,静态优先级包含较多的主观因素,不能真实、客观地反映任务的重要程度。因为每个人都会认为自己负责的那部分任务是最重要和紧急的,这样很容易导致任务优先级失去意义。
其次,任务的重要性在任务的整个生命周期内是动态变化的,今天很重要,但也许明天就不那么重要了,而静态优先级则无法体现这种变化。
当然,也可以通过手工方式及时修改任务的静态优先级,但当任务规模很大的时候,维护工作就会变得比较困难。
为了解决上述问题,本文提出一种动态计算任务优先级的方法。
具体如下。
假设任务的静态优先级为Ps(通常为非零正整数,用Pmax表示静态优先级的最大值),任务输出物利用率(即某个时间范围内任务执行结果,如数据库表、数据文件等,被访问次数,用整数表示,最小值为0,最大值为Vmax)为Fv,任务调度频度(即某个时间范围内被调度的次数,用整数表示,最小值为0,最大值为Smax)为Fs,则任务的动态优先级Pd的计算式为:
其中,Cp为任务静态优先级的权重因子,Cv为任务输出物利用率的权重因子,Cs为任务调度频度的权重因子,并且Cp+Cv+Cs=100%;ceil表示向上取整。
Pmax为静态优先级的最大值,为静态值,通常在任务调度系统程序初始化时就已经确定,例如,1~10表示将任务优先级分为10个等级,10为最高优先级。
Vmax表示当前系统中指定周期内所有任务输出物利用率中的最大值,例如,系统中总共配置了5个任务,在指定周期内(例如1个月)被访问的次数分别为1、2、6、10、30,那么Vmax为30,需要注意的是,Vmax是动态变化的,在下一个指定周期内可能就变成了15或60。
Smax表示当前系统中指定周期(例如1个月)内所有任务被调度次数中的最大值,例如,系统中共配置了5个任务,其1个月内被调度的次数分别为1、3、4、30、720,则Smax为720。同样,Smax也是动态变化的,在下一个指定周期内可能变为1或者30。
下面具体介绍任务动态优先级的计算过程。
任务依赖关系层级示意如图4所示,任务B、C需要等任务A执行完成后才能被调度执行,任务D需要等任务E执行完成后才能被调度执行;而任务A、E都需要等任务F执行完成后才能被调度执行;任务F需要等任务G执行完成后才能被调度执行。
图4 任务依赖关系层级示意
假设任务F被触发,进入调度等待队列并准备分派、调度执行,则将执行以下计算流程。
(1)检查任务F是否已经计算或赋值了动态优先级,如果已处理,则不需要重新计算任务的动态优先级,结束计算过程。
(2)检查任务A当前周期内是否已经计算或赋值动态优先级。如果已处理,则结束该关联分支的处理。
(3)检查任务B、C当前周期内是否已经计算或赋值动态优先级。如果没有,则按上述计算式计算任务B、C的动态优先级,取任务B、C两者中的动态任务优先级最大值赋给任务A。
(4)按照同样方法计算任务D、E的动态任务优先级。
(5)最后,取任务A和E两者中的动态任务优先级最大值赋予任务F,整个计算过程结束。
通过上述计算方法,可以充分反映任务的真实重要性,从而进行更加合理的调度。
5 结束语
本文提出的大规模任务调度技术方案在广东电信大数据处理平台以及营销支撑门户等系统中得到应用,取得了较好的效果。但是,随着电信运营商业务发展规模的不断壮大、集约化程度的不断提高,任务调度将面临更高的要求和挑战。如何提高设备资源的利用率,进一步提高任务调度的合理性及调度智能性,将是下一步研究的重点内容。
1 周学功,梁樑,黄勋章等.可重构系统中的实时任务在线调度与放置算法.计算机学报,2007(11)
2 袁禄来,曾国荪,姜黎立等.网格环境下基于信任模型的动态级调度.计算机学报,2006(7)
3 金锋,吴澄.大规模生产调度问题的研究现状与展望.计算机集成制造系统,2006(2)
4 王永炎,王强,王宏安等.基于优先级表的实时调度算法及其实现.软件学报,2004(3)
5 齐骥,李曦,于海晨等.一种面向动态可重构计算的调度算法.计算机研究与发展,2007(8)
6 刘民.基于数据的生产过程调度方法研究综述.自动化学报,2009(6)