管中窥豹看百度的自动化运维平台:持续部署系统

转载 AIOps智能运维  2018-04-18 09:37 
干货概览

业务部署(熟称上线)是运维领域最常见的业务类型,主要涉及线上代码变更、配置文件变更(数据变更由于其高频、大量的特点,我们已在数据传输文章《嗖的一下,让数据自动生效!》中专门讨论过)。一般的业务上线具有不定时操作、业务部署情况复杂、单机启停策略复杂等特点。在手工运维时代,运维人员需要花费大量精力进行此类重复性工作,且易于出错。从公布的数据显示,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方面有着较为广泛的实践经验。

《Linux云计算及运维架构师高薪实战班》2018年05月14日即将开课中,120天冲击Linux运维年薪30万,改变速约~~~~

*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

本文地址:https://www.newdun.com/news/278.html
关注我们:请关注一下我们的微信公众号: NiudunX
温馨提示:文章内容系作者个人观点,不代表牛盾网络Newdun.com®对观点赞同或支持。
版权声明:本文为转载文章,来源于 AIOps智能运维 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情