加快云原生技术转型, 智能调度登陆华为云 DevOps: 增速,节源
本文分享自华为云社区《加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源》,作者: DevAI。
1. 背景
随着云计算、微服务、容器等技术的蓬勃发展,以及云原生的敏捷,适应性强,易监视,云原生技术的落地成为了各团队重点关注和亟待解决的问题。DevOps 作为一站式平台,将云原生开发模式融合到产品中,为广大开发者提供好用易用的云原生研发管理解决方案。开箱即用的敏捷项目管理、代码管理、自动化测试管理,CICD 流水线等功能,让开发、测试、部署全流程与云原生底座平台无缝结合,进一步降低开发者上手云原生技术的门槛,加快云原生技术转型,大幅提升软件生产效率。DevOps 各环节如下图所示:

2. 云化 DevOps 面临的痛点问题:
1)高峰任务突增,威胁系统可靠性
整点定时任务突增,排队数量过万,容易导致任务超时失败,同时威胁代码仓、构建系统、包仓库及测试系统可靠性。

2)资源平均空闲时间长,利用率整体偏低
① 资源池平均利用率低,抽样统计 CPU 利用率低, RAM 利用率低。
② 虚拟机数目以峰值任务做静态配备,未按需做动态调整,容易导致大量机器在非峰值时段空闲。
③ 任务调度未充分利用虚拟机 CPU、RAM 等实时信息与任务实时信息,导致机器利用率低。

3. 云化 DevOps 资源调度各环节场景分析及解决方案
场景一:代码托管服务资源调度
问题描述:分布式版本控制代码仓服务将大大提高开发者协同开发,支撑项目代码托管,支撑大规模并发作业,千人团队协作,亿级代码下载,支撑大规模团队写协同作业,高并发 MR 代码提交,其中高并发,负载不均等问题将会对系统稳定性造成致命的影响。

解决方案:副本均衡,分布策略,提高下载速率
代码仓弹性调度,根据用户流量建立模型进行提前动态副本注入,综合考虑 IO,CPU 负载,并发,磁盘大小等多因素,探究目标因子与优化目标的关联性(仓库大小、并发下载对机器性能的影响)及有限空间装箱问题(磁盘空间有限),改善负载均衡、安全性、性能和管理,以提供快速、不间断的应用访问。如下图所示:

与此同时,为提升系统稳定性,减少系统 GC 对用户行为造成的冲突影响,我们开发了基于智能 GC 时间段推荐系统,如下图所示,在合理时间段进行 GC,减少系统 GC 对用户操作造成的冲突,提升系统稳定性,有效减少冲突率。

场景二:代码检查,编译构建服务资源调度
问题描述:虚拟机数目以峰值任务做静态配备,容易导致大量机器在非峰值时段空闲,任务调度未充分利用虚拟机 CPU、RAM 等实时信息与任务实时信息,导致机器利用率低, 虚拟机数目配置较低又容易造成任务排队数过多,严重影响用户体验。为此我们提出了共享资源池的弹性伸缩调度服务。
解决方案一: 虚拟机环境下资源池共享的弹性调度
通过弹性伸缩调控资源水位和任务智能调度实时最优化调整资源消费,闲时将资源释放到共享资源池,忙时从资源池中进行资源扩充,提升构建/代码检查资源使用效率。如图所示:

其中采取的弹性伸缩模式:
定时模式:配置定时任务,根据产品线不同配置不同的定时任务进行弹性扩张和缩容
动态模式:根据实时任务数及监控数据,进行自动的资源增加或减少
混合模式:定时及动态模式兼容,按需按时分配。

解决方案二:基于容器的智能化预测弹性资源调度
虚拟机的启动时间可能是分钟级的,而 Docker 容器创建是秒级别同时容器化的环境隔离,资源控制,文件系统,使得更加灵活及轻量级,与此同时云上资源使用预测算法面临如下挑战:波形的多样性(平稳型、突发型、随机型、条形码型等),任务规格多样性,业务周期不断变化,周期性不明确。如下图所示:

通过挖掘连续时间维度上的变化特征,如任务特征,阻塞情况,CPU 使用情况,MEM 使用情况等,采用预测模型预测下一阶段需要的资源数,同时增加模型峰值检测能力,应峰能力,提前进行资源分配,减少阻塞同时,降低资源浪费情况,如图所示:

场景三:部署环节版本包资源调度
问题描述:产品软件包放置地域与多数开发者地域不一致会导致大量广域网传输,占用出口带宽,造成网络拥塞和仓库性能问题。
解决方案一:资源调度中的流量分析
通过分析业务日志,考虑仓库负载、开发者地域等多种因素来建模,推荐软件包最佳地域,节约带宽资源,同时平衡仓库负载。如下图所示,监测某版本包流量主要来源于上海,经过对仓库各因素模型分析,推荐部署地为廊坊,可提升速度 XX%。

解决方案二:资源调度中的经典装箱算法
从云服务提供商来说,降低 1%资源碎片 = 成百上千万美元的成本下降, 因此如何提升分配率将大大降低成本,提升竞争力,从提升分配率上看,资源调度中可以应用经典的装箱算法,与传统的装箱算法相比我们提供了多种约束条件共存的装箱优化算法,解决了单一难以满足可持续资源效能优化要求,有效提升资源利用率。

4. 小结
本文对智能资源调度服务在 DevOps 各环节中的应用问题进行了分析并给出了相应的解决方案,致力于使用智能算法,实现“合理调度资源,最优供给”目标,在提高资源利用率,降低成本,提升软件生产效率,降低风险等方面起到显著作用。
作者:华为云 PaaS 技术创新 Lab
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/d165605b0a6f5b9b1c3fb331d】。文章转载请联系作者。
评论