一种DevOps平台自反馈任务调度方法与流程

文档序号:28391324发布日期:2022-01-08 00:26阅读:97来源:国知局
一种DevOps平台自反馈任务调度方法与流程
一种devops平台自反馈任务调度方法
技术领域
1.本发明涉及软件开发技术领域,特别涉及一种devops平台自反馈任务调度方法。


背景技术:

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


技术实现要素:

3.本发明为了弥补现有技术的缺陷,提供了一种简单高效的devops平台自反馈任务调度方法。
4.本发明是通过如下技术方案实现的:
5.一种devops平台自反馈任务调度方法,其特征在于:包括以下步骤:
6.第一步、构建任务池和线程池,以缓冲devops平台任务高峰请求对devops平台后端性能造成的冲击,起到动态削峰作用;
7.devops平台接收到执行jenkins任务的请求后,根据当前任务池中现存的任务的数量决定任务是否插入任务池;
8.第二步、对jenkins实例运行状态监听,为jenkins任务分配提供最优的调度策略,实现前端请求任务调度和基于反馈的负载弹性伸缩;
9.将当前jenkins实例的运行状态作为依据增加或减少jenkins实例个数,扩大或者缩小任务池和线程池的容量,从而提高jenkins任务的整体处理效率,提高devops服务的稳定性。
10.所述第一步中,任务池和线程池的构建过程如下:
11.s1.获取后端jenkins实例的个数m以及每一个jenkins实例能够并行执行的并发任务数n;
12.s2.使用go语言生成指定数量的常驻线程,线程数量t为m*n,一条线程对应jenkins实例的一条并发任务;
13.s3.通过map数据结构创建任务池,任务池中能容纳的任务数量s为(m+1)*n,任务池中所能容纳的数量比线程的数量多n;
14.s4.当任务池中的任务数量s达到当前支持的最高任务数量时,前端发送的jenkins任务请求返回繁忙提示。
15.s5.开启监听任务,当监听到任务池中有新的任务到来时,从线程池中调用空闲线程做任务的调度处理。
16.所述步骤s5中,线程池实时监听任务池的动作,发现前端有执行jenkins任务请求时,查询当前任务池的容量,若插入后任务池的任务数量s不超过任务池容量上限则将任务插入到任务池中。
17.所述步骤s5中,线程池中的线程实时监听任务池,发现任务池中有任务数据时,从线程池中随机选取一条空闲线程执行jenkins的调度任务。
18.所述第二步中,devops平台后端设有jenkins实例监听模块,从当前所有jenkins实例当中获取jenkins实例的运行状态,并将获取到运行状态作为重要影响因子反作用于负载弹性伸缩和调度策略;
19.jenkins实例的运行状态的监控过程如下:
20.s1.获取环境中在使用的jenkins实例信息,包括jenkins运行状态和当前在运行的任务数量,并存储入mysql数据库中;
21.s2.对每一个jenkins实例的守护线程进行定时登陆操作,若登陆成功则说明jenkins实例运行良好,若登陆失败则说明对应jenkins实例服务终止,同时修改mysql数据库中对应jenkins实例的运行状态属性;
22.s3.获取每一个运行的jenkins实例正在运行的任务数量,并将对应的信息更新入mysql数据库中。
23.s4.当新启动一个jenkins实例时,将新启动的jenkins实例信息同步到mysql数据库中,初始状态下jenkins实例的运行中任务数量为0;
24.s5.当删除一个jenkins实例时,将该jenkins实例的信息从mysql数据库中删除。
25.所述第二步中,前端请求任务调度过程如下:
26.s1.将前端jenkins任务存储在任务池中,线程池中的线程从任务池中取得任务进行调度;
27.s2.从mysql数据库中获取当前所有jenkins实例中的任务数量,并按照其任务数量对jenkins实例从低到高进行排列;
28.s3.如果最低任务数的jenkins实例的任务量小于n,则将任务调度到对应jenkins实例中进行执行;
29.s4.如果最低任务数的jenkins实例的任务数量等于n,则使用go协程监听所有jenkins实例中的任务数量,若发现有正在进行的任务数量小于n的jenkins实例,则将认为调度到对应jenkins实例上执行;
30.s5.获取任务池中堆积的任务的数量,当任务池中堆积的任务数量大于等于n时,重新开启一个jenkins实例,对外提供服务;
31.s6.获取任务池中堆积的任务的数量,当所有jenkins实例中运行中的任务数量均小于等于n时,关闭一台jenkins实例释放资源。
32.所述第二步中,后端jenkins的实例数量将随着负载的变化增多和减少,这种数量的变化反过来作用于任务池和线程池的容量的大小,通过任务池和线程池容量的大小来控制后端处理负载的能力;
33.当后端jenkins实例的数量增加1时,任务池的容量在原来的基础上增加n,线程池的容量在原来的基础上增加1;
34.当后端jenkins实例的数量减少1时,任务池的容量在原来的基础上减少n,线程池
的容量在原来的基础上减少1。
35.更具体的,基于反馈的负载弹性伸缩过程如下:
36.s1.获取当前任务池中的任务总数n,如果n《(m+1)*n则直接将任务插入到任务池中;
37.s2.如果n=(m+1)*n,则devops平台新开一个jenkins实例,并将新的jenkins实例存入mysql到数据库中;
38.s3.如果n《n,则devops平台关闭多余的jenkins实例,并将对应的jenkins实例信息从mysql数据库中删除;
39.s4.若jenkins实例增加a个,则任务池的容量扩大a*n个,线程池的线程数目扩大a个;
40.s5.若jenkins实例减少a个,则任务池的容量减少a*n个,线程池的线程数目减少a个;
41.s6.jenkins实例的减少以基准jenkins实例个数为限,不能少于jenkins实例最低个数的限制。
42.本发明的有益效果是:该devops平台自反馈任务调度方法,根据jenkins实例当前正在执行的任务数量作为反馈因子,动态修正jenkins实例对外提供服务的能力,保证了devops平台面对任务高峰时的健壮性,使用最小任务数的调度策略,使得任务可以调度科学,避免任务堆积,提升了devops平台的整体服务效率。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
44.附图1为本发明devops平台自反馈任务调度方法示意图。
45.附图2为本发明jenkins任务调度策略流程示意图。
46.附图3为本发明基于反馈的负载弹性伸缩流程示意图。
具体实施方式
47.为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
48.通过任务池和线程池可以有效的对前端任务请求起到缓冲和削峰的作用,同时对jenkins状态的实时监听结果作用于任务调度策略有助于得到调度的全局最优解,根据监听结果动态调整任务池和线程池容量有助于devops动态的调整负载能力。
49.该devops平台自反馈任务调度方法,包括以下步骤:
50.第一步、构建任务池和线程池,以缓冲devops平台任务高峰请求对devops平台后端性能造成的冲击,起到动态削峰作用;
51.devops平台接收到执行jenkins任务的请求后,根据当前任务池中现存的任务的数量决定任务是否插入任务池;
52.第二步、对jenkins实例运行状态监听,为jenkins任务分配提供最优的调度策略,实现前端请求任务调度和基于反馈的负载弹性伸缩;
53.将当前jenkins实例的运行状态作为依据增加或减少jenkins实例个数,扩大或者缩小任务池和线程池的容量,从而提高jenkins任务的整体处理效率,提高devops服务的稳定性。
54.所述第一步中,任务池和线程池的构建过程如下:
55.s1.获取后端jenkins实例的个数m以及每一个jenkins实例能够并行执行的并发任务数n;
56.s2.使用go语言生成指定数量的常驻线程,线程数量t为m*n,一条线程对应jenkins实例的一条并发任务;
57.s3.通过map数据结构创建任务池,任务池中能容纳的任务数量s为(m+1)*n,任务池中所能容纳的数量比线程的数量多n;
58.s4.当任务池中的任务数量s达到当前支持的最高任务数量时,前端发送的jenkins任务请求返回繁忙提示。
59.s5.开启监听任务,当监听到任务池中有新的任务到来时,从线程池中调用空闲线程做任务的调度处理。
60.所述步骤s5中,线程池实时监听任务池的动作,发现前端有执行jenkins任务请求时,查询当前任务池的容量,若插入后任务池的任务数量s不超过任务池容量上限则将任务插入到任务池中。
61.所述步骤s5中,线程池中的线程实时监听任务池,发现任务池中有任务数据时,从线程池中随机选取一条空闲线程执行jenkins的调度任务。
62.所述第二步中,devops平台后端设有jenkins实例监听模块,从当前所有jenkins实例当中获取jenkins实例的运行状态,并将获取到运行状态作为重要影响因子反作用于负载弹性伸缩和调度策略;
63.jenkins实例的运行状态的监控过程如下:
64.s1.获取环境中在使用的jenkins实例信息,包括jenkins运行状态和当前在运行的任务数量,并存储入mysql数据库中;
65.s2.对每一个jenkins实例的守护线程进行定时登陆操作,若登陆成功则说明jenkins实例运行良好,若登陆失败则说明对应jenkins实例服务终止,同时修改mysql数据库中对应jenkins实例的运行状态属性;
66.s3.获取每一个运行的jenkins实例正在运行的任务数量,并将对应的信息更新入mysql数据库中。
67.s4.当新启动一个jenkins实例时,将新启动的jenkins实例信息同步到mysql数据库中,初始状态下jenkins实例的运行中任务数量为0;
68.s5.当删除一个jenkins实例时,将该jenkins实例的信息从mysql数据库中删除。
69.所述第二步中,前端请求任务调度过程如下:
70.s1.将前端jenkins任务存储在任务池中,线程池中的线程从任务池中取得任务进
行调度;
71.s2.从mysql数据库中获取当前所有jenkins实例中的任务数量,并按照其任务数量对jenkins实例从低到高进行排列;
72.s3.如果最低任务数的jenkins实例的任务量小于n,则将任务调度到对应jenkins实例中进行执行;
73.s4.如果最低任务数的jenkins实例的任务数量等于n,则使用go协程监听所有jenkins实例中的任务数量,若发现有正在进行的任务数量小于n的jenkins实例,则将认为调度到对应jenkins实例上执行;
74.s5.获取任务池中堆积的任务的数量,当任务池中堆积的任务数量大于等于n时,重新开启一个jenkins实例,对外提供服务;
75.s6.获取任务池中堆积的任务的数量,当所有jenkins实例中运行中的任务数量均小于等于n时,关闭一台jenkins实例释放资源。
76.所述第二步中,后端jenkins的实例数量将随着负载的变化增多和减少,这种数量的变化反过来作用于任务池和线程池的容量的大小,通过任务池和线程池容量的大小来控制后端处理负载的能力;
77.当后端jenkins实例的数量增加1时,任务池的容量在原来的基础上增加n,线程池的容量在原来的基础上增加1;
78.当后端jenkins实例的数量减少1时,任务池的容量在原来的基础上减少n,线程池的容量在原来的基础上减少1。
79.更具体的,基于反馈的负载弹性伸缩过程如下:
80.s1.获取当前任务池中的任务总数n,如果n《(m+1)*n则直接将任务插入到任务池中;
81.s2.如果n=(m+1)*n,则devops平台新开一个jenkins实例,并将新的jenkins实例存入mysql到数据库中;
82.s3.如果n《n,则devops平台关闭多余的jenkins实例,并将对应的jenkins实例信息从mysql数据库中删除;
83.s4.若jenkins实例增加a个,则任务池的容量扩大a*n个,线程池的线程数目扩大a个;
84.s5.若jenkins实例减少a个,则任务池的容量减少a*n个,线程池的线程数目减少a个;
85.s6.jenkins实例的减少以基准jenkins实例个数为限,不能少于jenkins实例最低个数的限制。
86.以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1