业务部署(熟称上线)是运维领域最常见的业务类型,主要涉及线上代码变更、配置文件变更。一般的业务上线具有不定时操作、业务部署情况复杂、单机启停策略复杂等特点。在手工运维时代,运维人员需要花费大量精力进行此类重复性工作,且易于出错。从公布的数据显示,Google 70%的生产事故由上线变更触发,如何减少变更过程中人为误操作,提供一个灵活、稳定的部署系统是运维平台研发人员所亟需解决的问题。
基本介绍
在运维自动化的大潮下,百度运维管理平台 Noah 发布了一键上线部署系统——Archer。Archer 致力于提供一套产品线全过程的可迁移发布解决方案,实现一键完成机器初始化、服务部署、添加模块监控、添加 CT 任务、动态数据文件的分发等全过程的自动操作。在操作方面,Archer 提供了命令行工具作为发起一次上线的操作入口,这种设计模式也决定了其易于集成的特点。在 DevOps 流水线作业中,Archer 可以作为一个环节结合进整条测试发布流水线中。另外,Archer 也可作为上层服务托管平台的底层工具链,为 PaaS 平台提供稳定的底层部署服务。
图 1 Archer 与持续部署
通用场景
在百度内部,通用的部署系统需要适用于以下场景:
各业务线拥有各自的包规范,语言、框架不统一,部署策略不一致;
支持分级发布,及时拦截部署引入的线上故障;
业务的多地域部署;
多种网络环境及大包部署;
提高自动化效率,能够集成测试发布自动化流水线。
后面,我们将结合上面场景,向大家介绍百度持续部署是如何实现的。
服务架构
整个系统由命令行工具、web 服务、中转服务及单机 agent+部署插件几部分组成(如图 2 所示)。用户通过命令行工具触发一次变更,在 web 端进行参数解析及任务分发,对应执行机器 agent 通过心跳获取任务后,调用部署插件执行实际任务。涉及大包及不同网络环境的部署会进行中转下载。
图 2 服务整体架构
解决方案
各业务线拥有各自的包规范,语言、框架不统一,部署策略不一致
为避免杂乱无章又不规范的服务代码及配置文件的目录结构,Archer 规定了一套既灵活又完整的包规范。Archer 的配置文件路径、服务的启停脚本及运维命令具有固定的标准并且支持定制化,使用 Archer 进行部署的服务具有统一的包结构;
支持分级发布,及时拦截部署引入的线上故障
针对分级发布的使用场景,Archer 支持串并行上线及暂停点功能,可按照单实例、单机房、单地域等级别设置暂停点,并支持部署过程中进行暂停、继续、重试、撤销等操作;
业务的多地域部署
服务的多地域部署主要需要解决不同地域配置不同的问题。Archer 提供了配置派生功能以支持多地域部署的场景。Archer 支持在同一份配置文件中设置配置变量,并在特定地域(机房)中生成特定配置值;
多种网络环境及大包部署
针对多种网络环境及大包部署的使用场景,Archer 提供了部署数据中转传输。采用中转的上线在发起任务后,部分代码将首先被转存至中转机上。后面任务下发至具体机器,具体机器再从中转机拉取需要被部署的文件;中转机服务也为跨网络环境的部署提供了可能,隔离网段中的机器无法访问内网机器,通过中转服务的“搭桥”完成了跨网段的数据传输;
提高自动化效率,能够集成测试发布自动化流水线
自动化效率方面,Archer 提供了命令行工具,可接入各种脚本、平台。另外,Archer 也可定制化单机流程:针对不同的业务场景,Archer 提供了名为“operation_list” 的配置文件,采用 YAML 语法。单机执行流程步骤被定制化成固定几个种类。用户通过简单的配置,即可实现“启停监控”、“启停服务”、“数据传输”、“执行某些命令或脚本”、“启停定时任务”等上线过程中的常见操作的自由组织及编排。这种形式大大扩展了 Archer 的适用范围。在了解 Archer 使用方法的情况下,OP 几分钟内即可配置出适用于数十条不同产品的上线方案。
其他设计点
每次的部署流程通过 web 总控端的参数解析后,就被作为任务下发到每台被部署的目标机器。当部署任务从总控端发到被部署机器上时,任务的具体执行依赖 agent 及一系列脚本。因此,在部署系统的开发后期,自身的功能变更主要集中于单机部署工具。为了提高自身开发迭代效率,脚本未采用全网部署的方案,只部署到特定插件集群。每次执行时,单机 agent 会从插件集群下载最新 MD5,如果有变更,将重新下载最新插件进行任务的执行。这种设计形式增强了执行端功能的可横向扩展性,并且极大降低了每次自身升级的成本。每次升级只需更新一个集群的插件代码,在全部机器上即可生效。
总结
百度部署服务经历了手工上线->Web 化->开放化一系列发展进程,目前正在向智能化逐步发展。Archer 作为开放化一代的运维产品,在百度内部具有极高的使用率。期待本文的介绍能为您提供一些思路,也欢迎同行们与我们进行交流,共同促进 AIOps 的发展!
作者介绍:
运小博,百度高级研发工程师,负责百度通用部署系统研发工作,在部署系统架构、单机 agent 方面有着较为广泛的实践经验。
本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。
原文链接:
https://mp.weixin.qq.com/s/KNYzS0h_e17AB9U38kf9fA
评论