一种DevOps平台自反馈任务调度方法技术

技术编号:31795686 阅读:13 留言:0更新日期:2022-01-08 10:55
本发明专利技术特别涉及一种DevOps平台自反馈任务调度方法。该DevOps平台自反馈任务调度方法,构建任务池和线程池,以缓冲DevOps平台任务高峰请求对DevOps平台后端性能造成的冲击,起到动态削峰作用;对Jenkins实例运行状态监听,为Jenkins任务分配提供最优的调度策略,实现前端请求任务调度和基于反馈的负载弹性伸缩,从而提高Jenkins任务的整体处理效率,提高DevOps服务的稳定性。该DevOps平台自反馈任务调度方法,根据Jenkins实例当前正在执行的任务数量作为反馈因子,动态修正Jenkins实例对外提供服务的能力,保证了DevOps平台面对任务高峰时的健壮性,使用最小任务数的调度策略,使得任务可以调度科学,避免任务堆积,提升了DevOps平台的整体服务效率。DevOps平台的整体服务效率。DevOps平台的整体服务效率。

【技术实现步骤摘要】
一种DevOps平台自反馈任务调度方法


[0001]本专利技术涉及软件开发
,特别涉及一种DevOps平台自反馈任务调度方法。

技术介绍

[0002]在基于Jenkins的DevOps平台对外提供服务的过程中,对于DevOps平台的任务请求后端做出基本的处理后直接交给了Jenkins实例去处理。在出现大批量的集中请求时,大量的任务堆积增加了Jenkins的压力,很容易由于资源不足出现死锁的情形。同时,对于常用的轮转法、散列法和最少链接法的任务调度策略,其不能根据Jenkins实例的实时任务状态做出改变调整,做出的任务调度无法达到全局最优的情况。针对上述情况,本专利技术提出了一种DevOps平台自反馈任务调度方法。

技术实现思路

[0003]本专利技术为了弥补现有技术的缺陷,提供了一种简单高效的DevOps平台自反馈任务调度方法。
[0004]本专利技术是通过如下技术方案实现的:
[0005]一种DevOps平台自反馈任务调度方法,其特征在于:包括以下步骤:
[0006]第一步、构建任务池和线程池,以缓冲DevOps平台任务高峰请求对DevOps平台后端性能造成的冲击,起到动态削峰作用;
[0007]DevOps平台接收到执行Jenkins任务的请求后,根据当前任务池中现存的任务的数量决定任务是否插入任务池;
[0008]第二步、对Jenkins实例运行状态监听,为Jenkins任务分配提供最优的调度策略,实现前端请求任务调度和基于反馈的负载弹性伸缩;/>[0009]将当前Jenkins实例的运行状态作为依据增加或减少Jenkins实例个数,扩大或者缩小任务池和线程池的容量,从而提高Jenkins任务的整体处理效率,提高DevOps服务的稳定性。
[0010]所述第一步中,任务池和线程池的构建过程如下:
[0011]S1.获取后端Jenkins实例的个数M以及每一个Jenkins实例能够并行执行的并发任务数N;
[0012]S2.使用Go语言生成指定数量的常驻线程,线程数量T为M*N,一条线程对应Jenkins实例的一条并发任务;
[0013]S3.通过Map数据结构创建任务池,任务池中能容纳的任务数量S为(M+1)*N,任务池中所能容纳的数量比线程的数量多N;
[0014]S4.当任务池中的任务数量S达到当前支持的最高任务数量时,前端发送的Jenkins任务请求返回繁忙提示。
[0015]S5.开启监听任务,当监听到任务池中有新的任务到来时,从线程池中调用空闲线程做任务的调度处理。
[0016]所述步骤S5中,线程池实时监听任务池的动作,发现前端有执行Jenkins任务请求时,查询当前任务池的容量,若插入后任务池的任务数量S不超过任务池容量上限则将任务插入到任务池中。
[0017]所述步骤S5中,线程池中的线程实时监听任务池,发现任务池中有任务数据时,从线程池中随机选取一条空闲线程执行Jenkins的调度任务。
[0018]所述第二步中,DevOps平台后端设有Jenkins实例监听模块,从当前所有Jenkins实例当中获取Jenkins实例的运行状态,并将获取到运行状态作为重要影响因子反作用于负载弹性伸缩和调度策略;
[0019]Jenkins实例的运行状态的监控过程如下:
[0020]S1.获取环境中在使用的Jenkins实例信息,包括Jenkins运行状态和当前在运行的任务数量,并存储入Mysql数据库中;
[0021]S2.对每一个Jenkins实例的守护线程进行定时登陆操作,若登陆成功则说明Jenkins实例运行良好,若登陆失败则说明对应Jenkins实例服务终止,同时修改Mysql数据库中对应Jenkins实例的运行状态属性;
[0022]S3.获取每一个运行的Jenkins实例正在运行的任务数量,并将对应的信息更新入Mysql数据库中。
[0023]S4.当新启动一个Jenkins实例时,将新启动的Jenkins实例信息同步到Mysql数据库中,初始状态下Jenkins实例的运行中任务数量为0;
[0024]S5.当删除一个Jenkins实例时,将该Jenkins实例的信息从Mysql数据库中删除。
[0025]所述第二步中,前端请求任务调度过程如下:
[0026]S1.将前端Jenkins任务存储在任务池中,线程池中的线程从任务池中取得任务进行调度;
[0027]S2.从Mysql数据库中获取当前所有Jenkins实例中的任务数量,并按照其任务数量对Jenkins实例从低到高进行排列;
[0028]S3.如果最低任务数的Jenkins实例的任务量小于N,则将任务调度到对应Jenkins实例中进行执行;
[0029]S4.如果最低任务数的Jenkins实例的任务数量等于N,则使用Go协程监听所有Jenkins实例中的任务数量,若发现有正在进行的任务数量小于N的Jenkins实例,则将认为调度到对应Jenkins实例上执行;
[0030]S5.获取任务池中堆积的任务的数量,当任务池中堆积的任务数量大于等于N时,重新开启一个Jenkins实例,对外提供服务;
[0031]S6.获取任务池中堆积的任务的数量,当所有Jenkins实例中运行中的任务数量均小于等于N时,关闭一台Jenkins实例释放资源。
[0032]所述第二步中,后端Jenkins的实例数量将随着负载的变化增多和减少,这种数量的变化反过来作用于任务池和线程池的容量的大小,通过任务池和线程池容量的大小来控制后端处理负载的能力;
[0033]当后端Jenkins实例的数量增加1时,任务池的容量在原来的基础上增加N,线程池的容量在原来的基础上增加1;
[0034]当后端Jenkins实例的数量减少1时,任务池的容量在原来的基础上减少N,线程池
的容量在原来的基础上减少1。
[0035]更具体的,基于反馈的负载弹性伸缩过程如下:
[0036]S1.获取当前任务池中的任务总数n,如果n<(M+1)*N则直接将任务插入到任务池中;
[0037]S2.如果n=(M+1)*N,则DevOps平台新开一个Jenkins实例,并将新的Jenkins实例存入Mysql到数据库中;
[0038]S3.如果n<N,则DevOps平台关闭多余的Jenkins实例,并将对应的Jenkins实例信息从Mysql数据库中删除;
[0039]S4.若Jenkins实例增加a个,则任务池的容量扩大a*N个,线程池的线程数目扩大a个;
[0040]S5.若Jenkins实例减少a个,则任务池的容量减少a*N个,线程池的线程数目减少a个;
[0041]S6.Jenkins实例的减少以基准Jenkins实例个数为限,不能少于Jenkins实例最低个数的限制。
[0042]本本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种DevOps平台自反馈任务调度方法,其特征在于,包括以下步骤:第一步、构建任务池和线程池,以缓冲DevOps平台任务高峰请求对DevOps平台后端性能造成的冲击,起到动态削峰作用;DevOps平台接收到执行Jenkins任务的请求后,根据当前任务池中现存的任务的数量决定任务是否插入任务池;第二步、对Jenkins实例运行状态监听,为Jenkins任务分配提供最优的调度策略,实现前端请求任务调度和基于反馈的负载弹性伸缩;将当前Jenkins实例的运行状态作为依据增加或减少Jenkins实例个数,扩大或者缩小任务池和线程池的容量,从而提高Jenkins任务的整体处理效率,提高DevOps服务的稳定性。2.根据权利要求1所述的DevOps平台自反馈任务调度方法,其特征在于:所述第一步中,任务池和线程池的构建过程如下:S1.获取后端Jenkins实例的个数M以及每一个Jenkins实例能够并行执行的并发任务数N;S2.使用Go语言生成指定数量的常驻线程,线程数量T为M*N,一条线程对应Jenkins实例的一条并发任务;S3.通过Map数据结构创建任务池,任务池中能容纳的任务数量S为(M+1)*N,任务池中所能容纳的数量比线程的数量多N;S4.当任务池中的任务数量S达到当前支持的最高任务数量时,前端发送的Jenkins任务请求返回繁忙提示。S5.开启监听任务,当监听到任务池中有新的任务到来时,从线程池中调用空闲线程做任务的调度处理。3.根据权利要求2所述的DevOps平台自反馈任务调度方法,其特征在于:所述步骤S5中,线程池实时监听任务池的动作,发现前端有执行Jenkins任务请求时,查询当前任务池的容量,若插入后任务池的任务数量S不超过任务池容量上限则将任务插入到任务池中。4.根据权利要求2所述的DevOps平台自反馈任务调度方法,其特征在于:所述步骤S5中,线程池中的线程实时监听任务池,发现任务池中有任务数据时,从线程池中随机选取一条空闲线程执行Jenkins的调度任务。5.根据权利要求1所述的DevOps平台自反馈任务调度方法,其特征在于:所述第二步中,DevOps平台后端设有Jenkins实例监听模块,从当前所有Jenkins实例当中获取Jenkins实例的运行状态,并将获取到运行状态作为重要影响因子反作用于负载弹性伸缩和调度策略;Jenkins实例的运行状态的监控过程如下:S1.获取环境中在使用的Jenkins实例信息,包括Jenkins运行状态和当前在运行的任务数量,并存储入Mysql数据库中;S2.对每一个Jenkins实例的守护线程进行定时登陆操作,若登陆成功则说明Jenkins实例运行良好,若登陆失败则说明对应Jenkins实例服务终止,同时修改Mysql数据库中对应Jenkins实例的运行状态属性;S3.获取每一个运行的Jenkins实例正在运行的任务数量,并将...

【专利技术属性】
技术研发人员:景壮孙乐恬江燕
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1