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

2019 年 9 月 10 日

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

业务部署(熟称上线)是运维领域最常见的业务类型,主要涉及线上代码变更、配置文件变更。一般的业务上线具有不定时操作、业务部署情况复杂、单机启停策略复杂等特点。在手工运维时代,运维人员需要花费大量精力进行此类重复性工作,且易于出错。从公布的数据显示,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

2019 年 9 月 10 日 14:25 551

评论

发布
暂无评论
发现更多内容

漫画:15张图,帮你看懂布隆算法

Java小咖秀

算法 面试题 布隆过滤器

漫画:对象是如何被找到的?句柄 OR 直接指针?

王磊

Java Java 面试

计算机操作系统基础(七)---作业管理之死锁

书旅

php laravel 线程 操作系统 进程

极客大学算法训练营第一课

落曦

架构师训练营第四周总结

suke

极客大学架构师训练营

消息队列(四)如何处理消息丢失的问题?

奈何花开

Java MQ 消息队列

架构师训练营 第4周学习总结

Glowry

极客大学架构师训练营

架构师是怎样炼成的 04-1互联网分布式系统架构演化

闷骚程序员

极客大学架构师训练营

Week4-Homework

架构师训练营 Week04 学习心得

极客大学架构师训练营

「架构师训练营」第 4 周 学习总结

guoguo 👻

极客大学架构师训练营

Python多重继承问题之MRO和C3算法

王坤祥

Python MRO C3算法 多继承

架构师训练营总结-20200627

caibird1984

极客大学架构师训练营

一张PDF了解JDK9 GC调优秘籍-附PDF下载

程序那些事

性能调优 GC JDK9 cheatsheet 秘籍

架构师训练营:第四周作业

zcj

极客大学架构师训练营

极客时间架构师训练营 - week4 - 作业 1

jjn0703

极客大学架构师训练营

架构师训练营第四周作业

W_T

架构师训练营作业-20200627

caibird1984

极客大学架构师训练营

聊聊Hystrix中的命令模式

老胡爱分享

Java 设计模式 Java 面试 命令模式

戴尔Latitude 9510 雅典娜计划标准的英特尔移动超能版笔记本

飞天鱼2017

企业级业务架构设计读书总结

hiqian

使用 Python 制作酷炫多彩的 Jenkins 插件词云图

donghui2020

jenkins wordcloud

万文长字JVM总结,面试必备

java金融

Java CMS JVM 垃圾回收

Elasticsearch从入门到放弃:分词器初印象

Jackey

elasticsearch

【架构师训练营 - 周总结 -4】互联网系统架构演进

小动物

总结 极客大学架构师训练营 第四周

系统架构的一些思考

jason

Golang中的Interface(接口),全面解析

Eriol

golang 接口 interface

【6月】本月读书学到了什么

Neco.W

读书感悟 阅读量

ARTS - Week Six

shepherd

JavaScript algorithm

架构师训练营 第4周作业

Glowry

极客大学架构师训练营

架构师训练营第四周作业

Melo

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