一键上线Archer | 百度持续部署的瑞士军刀

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

作者简介

运小博    百度高级研发工程师

640?wx_fmt=png&wxfrom=5&wx_lazy=1

负责百度通用部署系统研发工作,在部署系统架构、单机agent方面有着较为广泛的实践经验。


干货概览

业务部署(熟称上线)是运维领域最常见的业务类型,主要涉及线上代码变更、配置文件变更(数据变更由于其高频、大量的特点,我们已在数据传输文章《嗖的一下,让数据自动生效!》中专门讨论过)。一般的业务上线具有不定时操作、业务部署情况复杂、单机启停策略复杂等特点。在手工运维时代,运维人员需要花费大量精力进行此类重复性工作,且易于出错。从公布的数据显示,Google 70%的生产事故由上线变更触发,如何减少变更过程中人为误操作,提供一个灵活、稳定的部署系统是运维平台研发人员所亟需解决的问题。

基本介绍

在运维自动化的大潮下,百度运维管理平台Noah发布了一键上线部署系统——Archer。Archer致力于提供一套产品线全过程的可迁移发布解决方案,实现一键完成机器初始化、服务部署、添加模块监控、添加CT任务、动态数据文件的分发等全过程的自动操作。在操作方面,Archer提供了命令行工具作为发起一次上线的操作入口,这种设计模式也决定了其易于集成的特点。在DevOps流水线作业中,Archer可以作为一个环节结合进整条测试发布流水线中。另外,Archer也可作为上层服务托管平台的底层工具链,为PaaS平台提供稳定的底层部署服务。

一键上线Archer | 百度持续部署的瑞士军刀_第1张图片

图1  Archer与持续部署

通用场景

在百度内部,通用的部署系统需要适用于以下场景:

  • 各业务线拥有各自的包规范,语言、框架不统一,部署策略不一致;

  • 支持分级发布,及时拦截部署引入的线上故障;

  • 业务的多地域部署;

  • 多种网络环境及大包部署;

  • 提高自动化效率,能够集成测试发布自动化流水线。

后面,我们将结合上面场景,向大家介绍百度持续部署是如何实现的。

服务架构

整个系统由命令行工具、web服务、中转服务及单机agent+部署插件几部分组成(如图2所示)。用户通过命令行工具触发一次变更,在web端进行参数解析及任务分发,对应执行机器agent通过心跳获取任务后,调用部署插件执行实际任务。涉及大包及不同网络环境的部署会进行中转下载。

一键上线Archer | 百度持续部署的瑞士军刀_第2张图片

图2  服务整体架构

解决方案

各业务线拥有各自的包规范,语言、框架不统一,部署策略不一致

为避免杂乱无章又不规范的服务代码及配置文件的目录结构,Archer规定了一套既灵活又完整的包规范。Archer的配置文件路径、服务的启停脚本及运维命令具有固定的标准并且支持定制化,使用Archer进行部署的服务具有统一的包结构;

支持分级发布,及时拦截部署引入的线上故障

针对分级发布的使用场景,Archer支持串并行上线暂停点功能,可按照单实例、单机房、单地域等级别设置暂停点,并支持部署过程中进行暂停、继续、重试、撤销等操作;

业务的多地域部署

服务的多地域部署主要需要解决不同地域配置不同的问题。Archer提供了配置派生功能以支持多地域部署的场景。Archer支持在同一份配置文件中设置配置变量,并在特定地域(机房)中生成特定配置值;

多种网络环境及大包部署

针对多种网络环境及大包部署的使用场景,Archer提供了部署数据中转传输。采用中转的上线在发起任务后,部分代码将首先被转存至中转机上。后面任务下发至具体机器,具体机器再从中转机拉取需要被部署的文件;中转机服务也为跨网络环境的部署提供了可能,隔离网段中的机器无法访问内网机器,通过中转服务的“搭桥”完成了跨网段的数据传输;

提高自动化效率,能够集成测试发布自动化流水线

自动化效率方面,Archer提供了命令行工具,可接入各种脚本、平台。另外,Archer也可定制化单机流程:针对不同的业务场景,Archer提供了名为“operation_list” 的配置文件,采用YAML语法。单机执行流程步骤被定制化成固定几个种类。用户通过简单的配置,即可实现“启停监控”、“启停服务”、“数据传输”、“执行某些命令或脚本”、“启停定时任务”等上线过程中的常见操作的自由组织及编排。这种形式大大扩展了Archer的适用范围。在了解Archer使用方法的情况下,OP几分钟内即可配置出适用于数十条不同产品的上线方案。

其他设计点

每次的部署流程通过web总控端的参数解析后,就被作为任务下发到每台被部署的目标机器。当部署任务从总控端发到被部署机器上时,任务的具体执行依赖agent及一系列脚本。因此,在部署系统的开发后期,自身的功能变更主要集中于单机部署工具。为了提高自身开发迭代效率,脚本未采用全网部署的方案,只部署到特定插件集群。每次执行时,单机agent会从插件集群下载最新MD5,如果有变更,将重新下载最新插件进行任务的执行。这种设计形式增强了执行端功能的可横向扩展性,并且极大降低了每次自身升级的成本。每次升级只需更新一个集群的插件代码,在全部机器上即可生效。

总结

百度部署服务经历了手工上线->Web化->开放化一系列发展进程,目前正在向智能化逐步发展。Archer作为开放化一代的运维产品,在百度内部具有极高的使用率。期待本文的介绍能为您提供一些思路,也欢迎同行们与我们进行交流,共同促进AIOps的发展!

一键上线Archer | 百度持续部署的瑞士军刀_第3张图片

一键上线Archer | 百度持续部署的瑞士军刀_第4张图片

↓↓↓ 点击"阅读原文" 【了解更多精彩内容】 

你可能感兴趣的:(一键上线Archer | 百度持续部署的瑞士军刀)