阿里巴巴运维中台的演进与建设

《阿里巴巴运维中台的演进与建设》要点:
本文介绍了阿里巴巴运维中台的演进与建设,希望对您有用。如果有疑问,可以联系我们。

阿里巴巴运维中台的演进与建设

作者简介:

毛茂德

阿里巴巴 基础架构事业群运维中台负责人

花名如柏,现任阿里巴巴集团基础架构事业群-运维中台负责人,主导架构设计高可靠、高并发、大规模的基础运维平台和应用运维平台,致力于打造行业级的基础运维无人值守解决方案以及数据化、智能化运维解决方案,推动 DevOps 生态.

前言

本文来自于 GOPS 2017 深圳站的演讲“阿里巴巴运维中台的演进与建设”.

我所在的部门是阿里基础架构事业群,负责阿里巴巴的 IDC 建设、网络建设、基础数据库的运维,大数据运维,研发协同,应用运维等等都在我们这个部门里面.

我的团队主要负责运维平台和工具的建设,旨在提升业务交付的效率和运维的自动化、智能化.在去年我们团队名字改成了“运维中台”,名字的改变很重要,他让我们的定位更加清晰,做事更聚焦和专注.

运维平台建设已经很多年,产品比较多,下面我将介绍几个比较重要的产品来呈现阿里运维中台建设的过程.

一、运维基础平台——StarAgent

StarAgent 在阿里已经有五六年,甚至更早的时间.阿里所有的物理机、虚拟机以及容器都会装这个 agent,StarAgent 是管理所有 agent 的系统,基本上要和机器交互都需要通过这个平台.

StarAgent 是一个生态平台,实际上不会做具体的业务,具体的业务还是通过各个业务平台去实现的.它们要和服务器进行交互必须通过我们这个平台.

例如,应用运维平台——诺曼底也是通过 StarAgent 在机器上进行部署发布的.我们希望将 StarAgent 建设成一个平台,而不是所有的业务都是我们来做的.

StarAgent

平台化的项目是2015年底启动的,在此之前机器上运行的 agent 所有的功能整个打包成一个可执行的程序,这导致了研发迭代速度非常缓慢,问题非常多.

我们曾经有一个功能花了一个多月时间开发了一个功能,开始上线,全网做灰度,将近一个时间等快灰度结束的时候,突然发现某些环境下这个功能有 bug,结果又用了一个月的时间回滚.

这个对我们士气是非常伤的,三个月过去了什么业务结果都没拿到.

平台化的改造中,我们把各个业务的功能都变成一个个插件,可以插到这个平台上来.平台只负责最基本的插件维护的功能,以及命令执行的功能,仅此而已.监控、日志采集等功能都变成插件,而不需要都打包在一起.

目前我们平台上已经有了将近90个插件,比如说监控、日志、安全、调度、采集、P2P 文件分发、配置管理类似 puppet, saltstack 等等插件.

而且平台化之前我们必须全网发布,插件化之后,我们可以选择插件的发布范围,开发迭代的速度也有了大幅度提升.

  • 平台化之前整个 agent 都需要放到装机镜像里,装机镜像测试也需要一个月时间,所以更新镜像也非常繁琐.
  • 平台化之后装机镜像里也只要装基本的 agent core 就可以了,核心插件都可以装机后第一次启动时自动更新即可,这样也不需要频繁的更新装机镜像,core 的功能因为非常纯粹简单,core 稳定之后,更新的频率自然就低到了极致.

阿里巴巴运维中台的演进与建设

StarAgent 平台化之后的架构比较简单,整个 agent 最核心的东西就是管理和运行这些插件,基于一个非常简单的交互协议与插件通讯.只要实现这些接口就可以作为一个插件让 agent 帮你去运维.

所以除了之前 StarAgent 的功能插件化外,我们收敛了机器上众多的 agent,在这之前插件都是自己做一个运维系统,要管理自己的状态,要进行版本的更新和迭代.

现在在统一的平台上统一的进行管理、统一做变更的升级.除了节省运维资源外,同时也能收敛重复功能的 agent,从另外一个角度保证了服务器运维的安全.

1.1 StarAgent核心功能

StarAgent 核心功能就是一个命令的通道,它既可以同步执行任务又可以异步执行任务,还可以查询任务状态和插件管理.插件分为两种,一种是静态的,静态的实际上就是脚本、命令之类的.

另一种动态的是一个常驻进程,必须常驻在系统里面.我们会守护这个进程,如果它挂了会重新拉起来,如果其占用内存、CPU 超过设定的范围会删掉它.整个协议是比较简单的,使用起来耦合度也是比较低的.

StarAgent

1.2 StarAgent特性

StarAgent 系统从功能上来讲是比较简单的,我们其实是花了大量时间在做一些非功能上的东西.

例如,高可用、高并发、安全,还有自运维能力,即使是百万级服务器的场景下,我们的运维人力投入可能几乎为0,我们追求的就是无人值守的运维.

阿里巴巴运维中台的演进与建设

目前这套系统的执行成功率差不多有 99.995% 左右,由于执行量非常大,0.005% 失败率的运维成本还是挺高的.我们花了大量的时间做容灾和自恢复的工作.

前两年支付宝官网瘫痪,经过这个事件我们开始做容灾的演练.把网线拔了,看所有系统的反应,过两个小时再把网线插上去,看这个系统是不是能自动恢复.

运维

以前我们都是半夜三点起来去重启服务器,经过自动化的运维,所有的系统断网都可以自动恢复、服务器可以自动进行扩容,保证系统持续的可用性.

1.3 StarAgent 场景

现在的场景会贯穿整个物理机的生命周期,阿里巴巴在物理机装机的过程中就会用到 StarAgent,从生产到下线整个过程都离不开.

应用运维方面,我们在做重启、发布恢复等等,同时还有监控、数据采集及数据库等方面.

StarAgent 是三层的架构,中央的一层,第二层是每个机房都有管控服务器,最下面一层就是每台服务器安装的 agent 及其插件.

agent 会先注册到管控服务器然后上报自己的信息并且每隔一段时间上报自己的心跳.命令是从上往下的,是通过 API 去下发的.

例如,下发一万台服务器执行命令,所有的命令都是同样的中央服务器,所以它是中央式的架构.

阿里巴巴运维中台的演进与建设

阿里现在有很多走国际化,在俄罗斯、美国、印尼等地收购很多公司,它们的机房也需要我们做运维.目前我们在做的就是去单中心走向多中心的架构.

比如说,在印度尼西亚的一个机房还需要回到中央服务器来再下发,这个路径会非常曲折,我们需要做个多组型.

在国外的我们会多布一个中心,这样的话在单元内可以自制,不需要跑到杭州或上海来再下发到国外机房.

1.4 StarAgent 指标

目前内部访问量每天在一亿多次,但是阿里的服务器还在不断增长,而且随着阿里云的业务逐步扩大,以及阿里本身业务的不断壮大,我们不得不提前考虑未来三年的发展会不会成为瓶颈.

所以去年我们花了半年的时间在架构上做了比较大的升级,目前集群的QPS已经达到55万次/分钟,这个量实际上已经差不多可以支撑未来3年服务器的发展和业务的发展.

以前这些数据都没有,我觉得做运维系统需要把度量这个事情做起来.

阿里巴巴运维中台的演进与建设

 

在架构里面有句话叫没有度量就没有改善,度量是非常重要的.如果产品的核心指标(稳定性、性能、内存占用等)没有定出来,或者无法度量,怎样去架构和优化系统就比较困难,无从下手.

产品的亮点、竞争力、差异性也无从谈起.

实际上系统稳定性以前根本就没有.一个系统指令发过去了就告诉你失败了,不知道什么原因,根本没有错误的分类.然后一堆人开始查问题,查半天发现这台机器磁盘满了.

对于这种方式,我们觉得是不可持续的.我们需要从日志和标准化等方面一定要说清楚系统本身到底有没有问题.

对于第三方依赖,可能是数据库、也可能是一个配置等等,一定要搞清楚第三方依赖的稳定性到底怎么样.对于环境的问题,网络是不是断了,磁盘是不是满了.

这些也都需要在错误码日志里面体现出来,这样才能从各个方面逐步完善系统的指标,否则是没有办法完成的.系统的稳定性非常重要,有了这些数据,系统就可以进行数据化运维.

1.5 StarAgent 插件系统

StarAgent 插件系统,协议很简单.可实现启动、停止,配置如何重新加载等.我们对 CPU 会做一些守护,同时会做一些一键部署的事情.

原来我们升级插件是非常多的,服务器数据很大,再加上插件数量和插件各种版本,这个量是非常巨大的.

以前全网升级插件差不多要六个小时,经过优化之后现在大约10分钟就可以了.

 插件系统

二、文件分发系统——蜻蜓

对于全网都需要用到的,这些就不是一个个性化的需求,这些这插件是我们自己来开发.比如蜻蜓(P2P文件分发系统)就是我们自己开发的.

文件分发其实是我们做部署系统的优化时候去做的,当时比较纠结,是自己开发还是用现成的系统.我们对比了业界很多类似的技术.

比如 Facebook 的 wdt (https://github.com/facebook/wdt),Twitter 的 ( https://github.com/lg/murder ),百度的 Ginko 等等,还有包括亚马逊 Apollo 里面的文件分发系统,它们那个和我们的有点不太一样,他们的是基于 S3 做的.

我们发现他们各自或多或少的都有些问题,无法满足我们多种场景下应用需求.这个产品可以不夸张的说已经做到行业第一.

蜻蜓系统是纯碎的 P2P 的文件分发系统.在做 Docker 过程中,如果没有系统解决这些问题,整个 Docker 化的进程就会受到影响.当到了一定量以后根本就支撑不了,所以直接把镜像仓库的协议全部都实现了一遍.

2.1 蜻蜓核心功能

P2P 的文件分发我们做了很多特性,包括多线程下载、一致性校验以及白名单控制等.

有些业务对磁盘是非常敏感的,例如搜索类的业务,所以会要求在写这个智能 IO 的时候会有些控制,我们会把这个参数调出来通过这个参数对磁盘进行管理.

一个 200M 的文件在传输的时候会变得比较小,网络和传输速度都会得到优化.

阿里巴巴运维中台的演进与建设

2.2 蜻蜓业务指标

蜻蜓系统目前是一万个客户端同时下载 500M 的文件平均耗时 5s.阿里集团大部分的文件分发都统一用了这套系统.下载次数是 12万/月到 3亿/月.系统稳定性达6个9.也是自运维的系统.

阿里巴巴运维中台的演进与建设

使用蜻蜓系统和不用该系统进行对比可知,这个模式下载速度会快很多而且不会随着并发数量上升而严重延时.

运维平台

三、应用运维平台——Normandy

Normandy 是运维整个阿里巴巴业务的 PaaS 平台.这个平台实际上提供三大功能,分别是基础设施即代码(Infrastructure as Code)、部署和应用运维支撑.

我们希望能够通过代码描述文件的形式把一个应用需要用到的所有资源,包括机载资源、服务器、网络还有数据库等都描述出来,这样就可以能够快速构建一个应用.

Normandy

应用已经有了,如何把代码部署到线上,让其能够对外提供服务,这就需要部署发布了.在发布部署方面我们做了无人监守的发布,我们和中间件等部分做了整合,只要代码没有出现线上的故障就可以自动发完.

如果出现故障发布就会停下来,此时需要人介入去判断要不要作维稳.亚马逊的发布系统阿波罗,一年的发布量差不多是五千万,据说现在一天的发布量已经能达到50万.

去年在这方面我们也做了很多工作,至少说这个发布系统不会因为业务发布次数比较大导致发布系统挂掉.

另外,现在整套系统已经将阿里巴巴的测试环境和线上环境全部打通,解决了线上系统和测试不统一的情况.

阿里巴巴

目前业务方有很多的平台使用应用运维平台和运维基础平台 StarAgent.从应用数量上来讲,实际上也是最多的,大概 80% 的应用都基本集中在交易.

阿里云稍微有点特殊,有一半对 ECS 的运维,ECS 也是要做发布与运维,ECS 今年努力的方向要尽量做到不影响用户.

以上的产品都是服务于整个阿里巴巴集团的,这些服务都是最基础的,我们的核心能力基本都是通用的,不带业务的特殊性,特殊性的功能可以在我们的平台化上进行扩展.

这就是中台的原义,中台的好处就是让业务能根据自己的特性在中台上快速的发展,而不需要一杆子桶到最底层,同时中台也没有能力去帮助每个业务去实现所有的特性功能.

这个是整个做事方式的转变,每层都想清楚自己的核心能力,做什么,不做什么同样重要.

在满足了集团业务运维的同时,我们这些产品也真正的在打磨极致产品特性,极致的稳定性、极致的性能、极致的体验.

这样能提升产品的竞争力,拉高进入门槛,光是一堆运维功能堆砌的产品是咩有灵魂的,也非常容易被复制.

我们的产品在今年就会完成单元化,国际化,云化,希望能成为云上有竞争力的运维产品.

文章来自微信公众号:高效运维

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


起步 处理器架构,参考 x86是指intel的开发的一种32位指令集 intel和amd早期的cpu都支持这种指令集 AMD比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64 Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64,后来支持AMD64的指令集,
pscp pscp -P 22 C:\work\test.txt root@192.168.1.5:/home/data pscp -P 22 root@192.168.1.5:/home/data/test.txt C://work// 检索 find / -name default.config
文件处理 ls -a # 显示所有文件 ls -l # 显示详细信息 ls -d # 显示路径 mkdir /目录名称 # 创建目录 cd /目录名称 # 切换目录 pwd # 显示当前路径 rmdir /目录名称 # 删除目录 cp -rp [目录名称] [目标目录] # 复制目录到目标目录 cp
准备一台电脑(我就用联想拯救者r7000演示) 参考博客制作启动盘 插上U盘,启动电脑,一直按F2 进入如下页面后,将U盘设置为第一启动项,点击exit,保存并退出 之后进入如下页面,选择第三项 进入如下页面,选择第四项 进入如下页面,选择第一项,选中后,先不要点Enter 按e键,将inst.st
认识 Linux系统是参考了UNIX系统作为模板开发的,但没有使用UNIX的代码;是UNIX的一种,但不是衍生版 在Linux内核的基础上开发是发行版 分区 逻辑分区永远从5开始 步骤 挂载:可理解为分配盘符,挂载点即是盘符名;不同之处:Linux中是以空目录名称作为盘符 Hda 第一块硬盘 Hda
文件处理命令 以 . 开头的文件是隐藏文件 以 - 开头表示这是一个文件 以 d 开头表示是一个目录 以 l 开头表示是一个软链接 第一个root是所有者,第二个root是所属组 ls -h 以文件默认大小后缀 显示 ls -i 查看i节点(唯一标识) 所有者:只能有一个,可变更 所属组:只能有一个
参考 01 02 03 前提环境 本地安装VirtualBox,并安装CentOS8,配置网络后,window系统上putty能连接到CentOS8服务器 配置步骤 右键服务器复制 启动复制后的服务器,查看ip和hostname发现和原来的服务器一样,需要修改 hostname # 查看主机名 vi
文件搜索命令 星号匹配任意字符,问号匹配任意单个字符 -iname 根据文件名查找且不区分大小写 -ok 命名会有一个询问的步骤 如果没有找到指定文件,可输入命令:updatedb 更新文件资料库;除tmp目录不在文件资料库收录范围之内 locate -i 文件名 # 检索时不区分大小写 which
安装环境 安装最新版的Virtual Box,点击安装 下载centos8镜像 创建虚拟机,可参考 选择下载到本地的镜像 设置启动顺序 点击启动 启动过程中报错:“FATAL:No bootable medium found!” 1.没有选择iso镜像 2.光驱没有排在第一位置 3.镜像只能选择x8
Linux严格区分大小写 所有内容文件形式保存,包括硬件 Linux不靠扩展名区分文件类型 挂载:将设备文件名和挂载点(盘符)连接的过程 Linux各个目录的作用 bin表示二进制 服务器注意事项 远程服务器不允许关机,只能重启 重启时应该关闭服务 不要在服务器访问高峰运行高负载命令 远程配置防火墙
IDE连接Linux,上传下载文件 参考1 参考2 连接Linux 上传下载文件 本地项目打包后上传 查看是否上传成功,右键下载 补充 后端项目开发完成后,需clean掉临时文件target文件夹,且只推送修改过的文件 前端项目开发的过程中,需要在每个子组件中使用scoped,确保每个子组件中的编码
起步 LTS与普通版本的区别 LTS版本的发布周期更长,更加稳定 安装jdk sudo mkdir /usr/lib/jvm # 在Ubuntu中创建目录 pscp D:\安装包\linux源码包\jdk-8u291-linux-x64.tar.gz chnq@192.168.0.102:/tmp
前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就尝试不使用虚拟机的方式安装Linux系统 安装步骤 制作启动盘 下载ISO镜像,我这里下载的是Cen
新建虚拟电脑 设置内存和处理器 设置硬盘大小 完成 设置 查看光驱 设置启动顺序 点击启动 选择第1项 进入图形安装界面 选择安装位置,开始安装 设置root密码 重启 登录 查看本地文件夹 配置网络,点击设置 查看宿主机ip C:\Users\ychen λ ipconfig 无线局域网适配器 W
源码包安装需手动下载后安装 二进制包则在package目录下 rpm命令管理rpm包 若某个rpm包依赖于某个模块,需要到网站www.rpmfind.net查询该模块依赖的包,安装这个包后自动安装模块,之后就能安装rpm包了 安装升级时使用包全名 查询卸载时使用包名 虚拟机中的Linux系统安装rp
首先进入命令模式,再输入以下命令 命令模式用于输入命令 插入模式可对文件编写操作 编辑模式下的命令是在冒号后输入 :12, 15d # 删除指定范围的行,这里是删除12到15行 :n1,n2s/old/new/g ## 表示从n1行到n2行,old表示旧的字符串 vim使用小技巧:自定义快捷键,如快
使用源码包安装,需要自己指定安装位置,通常是 /usr/local/软件名/ linux中要想启动执行文件,应使用绝对路径 /绝对路径/rpm包名 start ## 执行方式一 service rpm包名 start ## 执行方式二 使用源码包安装后,由于自定义安装路径,就不能使用service命
网络命令 在收邮件的用户中,输入 mail 可查看邮件信息,输入序列号查看详细信息 在mail命令下,输入h 查看所有邮件的列表 输入:d 序列号 # 删除邮件 last # 统计所有用户登录或重启时间,用于日志查询 lastlog # 显示包括未登录用户的登录时间 lastlog -u 用户id
若要使用yum管理,必须能连接网络,首先配置网络IP 进入yum源文件中启动容器 使用yum源头安装rpm包不需要进入package路径,同时也不需要使用包全名,会有yum自动管理 安装软件组
简介 client即是本机安装的docker,相当于git Docker_host相当于centos系统 registry则是docker仓库,相当于GitHub 镜像用于创建docker容器,一个镜像可以创建多个docker容器 容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象)