【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

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

  • 2019-09-10
  • 本文字数:2027 字

    阅读完需:约 7 分钟

一键上线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-09-10 14:251138

评论

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

字节Pico走“小”路

科技新知

InfoQ 极客传媒 15 周年庆征文|Vim 常用快捷键

耳东@Erdong

vim 运维 快捷键 6月月更 InfoQ极客传媒15周年庆

有爱无碍,科技为他们点亮漫天星光

脑极体

A16Z : Web3生态全景概览

Dream

Web3.0

uni-app进阶之模版语法与数据绑定【day7】

恒山其若陋兮

6月月更

微服务稳定性保障

阿泽🧸

微服务 6月月更

C#入门系列(十九) -- 作用域、生命期和析构函数

陈言必行

C# 6月月更

流数据操作

Damon

6月月更

连续居家办公68天后——我的2022居家办公所感所想| 社区征文

No Silver Bullet

居家办公 6月月更 初夏征文 心得体会

JVM调优简要思想及简单案例-对象的回收与保留

zarmnosaj

6月月更

Apipost=Postman+Swagger+Mock+流程测试?

Xd

Java 后端 接口测试

作为神经搜索生态的开创者,Jina AI 在做什么?

Jina AI

Python 深度学习 开源 云原生 搜索

如何利用 RPA 实现自动化获客?

程序员泥瓦匠

RPA

如何为 SAP 电商云每个不同的 JavaScript Storefront 分别配置 API endpoint

Jerry Wang

SAP Hybris commerce 电商云 6月月更

Java Core 「11」AQS-AbstractQueuedSynchronizer

Samson

学习笔记 Java core 6月月更

读书笔记之:如何有效阅读

甜甜的白桃

读书笔记 读书 笔记 6月月更

读书笔记之:你当象鸟飞往你的山

甜甜的白桃

读书笔记 读书 笔记 6月月更

周末来学集合论

坚果

6月月更

力扣每日一练之数组上篇Day1

京与旧铺

6月月更

市场冷空气来袭,SeekTiger如何逆流而上?

股市老人

DOM核心——Document类型

大熊G

JavaScript 前端 6月月更

leetcode 64. Minimum Path Sum 最小路径和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

BOM

Jason199

js BOM 6月月更

【Spring 学习笔记(十三)】Spring AOP 五大通知类型

倔强的牛角

Java spring spring aop 6月月更

linux常用命令

乌龟哥哥

6月月更

spring4.1.8扩展实战之八:Import注解

程序员欣宸

Java spring Spring Framework 6月月更

☕️Java11 中基于嵌套关系的访问控制优化

看山

Java Java11

【Python技能树共建】with...as... 实战

梦想橡皮擦

Python 6月月更

Docker 实用技巧三

Nick

Docker 容器 实用技巧 6月月更 实操

硬核干货:6000字 30张图,带你彻底搞懂BGP动态路由!

wljslmz

BGP 网络技术 动态路由 6月月更

学生管理系统的考试试卷存储方案

爱晒太阳的大白

一键上线Archer | 百度持续部署的瑞士军刀_文化 & 方法_运小博_InfoQ精选文章