软件产品的生命力在于不断的功能迭代。一个新功能从需求产生到完整地呈现给终端用户,中间经过了调研、立项、需求分析、设计、开发、测试等一系列步骤,而发布变更则是整个流程的最后一步。具体来说,发布变更是指将产品功能的修改内容发布到一组服务器上的过程。
变更过程可以简单到由一个研发人员手工将代码上传到一台服务器上,也可以复杂到上万台机器的数据传输和命令执行。如果我们深入地考查整个变更过程,可以发现无论变更过程本身如何变化,其中有些组成部分是不可或缺的,这里将其总结为变更三要素,即变更源、变更策略、变更目标。
变更源:描述变更涉及的具体内容,可以是程序、数据或者命令;
变更策略:描述变更过程如何执行,包括但不限于顺序、并发度、失败容忍度等;
变更目标:描述落地变更内容的一个或者多个目标机器,也可能是虚拟机或容器。
图1给出了变更三要素在迭代过程中扮演的角色。
![image.png image.png](https://data.ciozj.com/2018UploadFiles/12/6367944520163137507219187.png)
变更面临的问题
其实我们对变更的需求并不复杂,作为迭代的最后一公里,我们只关注两点:
操作过程足够快捷(效率)
变更结果符合预期(安全)
但是,在具有一定规模企业的生产环境中,用户往往要面对比单台机器手工上线更加复杂的状况,在这些状况下上述两点要求通常难以满足:
大批量机器的操作步骤繁琐,较依赖人的经验,变更操作效率低下;
由于缺少可靠的检查机制,变更效果无法保证,甚至引发线上较大异常。
我们在百度各核心产品的大规模变更实践中积累了丰富的经验,发现通过自动化部署可以有效提升变更效率,在变更过程中严格执行分级发布流程可以确保检查机制得到执行,并且能够有效限制异常影响范围,加速异常恢复。在两者基础之上,融入AIOps智能变更策略,可以进一步降低管理成本,提升检查效果。下面将从三个方面详细介绍我们的解决方案。
我们的解决方案
1自动化部署
自动化部署包含变更策略和批量机器执行能力两部分。具体来说,用户通过UI/API配置整个变更过程的执行策略,例如先执行A地域机器的变更,再执行B地域机器的变更;执行失败的机器超过10台就自动中止等。然后由专门的执行系统解析策略,并自动执行批量机器的变更,如开源的Ansible、SaltStack和百度内部的CCS系统。整个执行过程自动进行,用户只需要查看执行进度即可。另一方面,执行系统也提供了干预能力,用户可以手动暂停乃至撤销一个部署任务的执行。图2给出了自动化部署的示意图。
![image.png image.png](https://data.ciozj.com/2018UploadFiles/12/6367944518878762506942568.png)
2分级发布
分级发布是指将变更过程以实例组为单位划分成多个阶段,每个阶段引入自动化的检查用例,只有检查通过才能执行下个阶段的变更。分级发布不能完全避免变更异常,但是可以有效限制异常影响范围。通过把变更版本管理和历史审计与分级发布结合,可以有效增强对变更过程的管控,降低异常影响,加快异常恢复速度。整个分级发布规范的构成可以参考图3。
![image.png image.png](https://data.ciozj.com/2018UploadFiles/12/6367944518060012506078142.png)
3智能变更策略
采用自动化部署和分级发布之后,用户已经可以获得较好的变更效率,并且能够在相当程度上提升变更安全性,但是使用更高标准来审视,其中仍存在改进的空间:变更模板需要人工配置,使用门槛较高,复用性低;变更效果检查强依赖人的经验,可能出现异常没被及时检查出来的问题。
得益于在AIOps上的充分实践,我们发现通过将智能策略引入到变更流程中,可以进一步提升变更效率和安全。具体的落地点在以下两个方面:
智能模板生成:分析变更对象属性特点并自动填充
智能变更检查:关联异常检测,及早发现并输出干预命令
其具体的实现思路为:
智能模板生成:使用运维知识库充分收集变更目标对象的属性,然后基于这些对象属性特点自动生成变更模板,例如变更对象的最小可用度可以用于生成变更失败容忍度;
智能变更检查:我们已经有成熟的智能监控方案,可以全方位监控目标服务的状态并及时汇报异常。通过订阅变更目标的服务监控,可以实现变更过程中的实时检查,从而及时发现变更引起的异常,进而自动执行干预命令。
智能变更策略的实现机制可以参考图4。
![image.png image.png](https://data.ciozj.com/2018UploadFiles/12/6367944517094387505526810.png)
图4 智能模板生成与变更检查
总结
发布变更作为产品迭代的最后一公里,其执行效率和执行结果将直接影响功能迭代的效果。当把目光投向实际的生产环境,我们发现,在很多企业中变更的执行效果并不能得到保障。
CIO之家 www.ciozj.com 公众号:imciow