专访运维架构师伏晔:小米的自动化运维之路

原创
系统 自动化
在计算机应用的发展历史中,运维工作一直是必不可少的重要环节。本文中,小米运维架构师伏晔在接受51CTO记者采访时,分享了小米运维自动化平台的由来与发展历程,让我们一起走进小米自动化运维之道。

【51CTO专稿】在计算机应用的发展历史中,运维工作一直是必不可少的重要环节。无论在什么年代、什么场景,保证服务的正常可持续运行都是运维的最终目标。随着规模增长,依赖手工管理自然已无力应对。许多互联网公司的服务器早已跨入几百甚至千台规模,脚本化、批量化管理占据非常大的比例,在这个阶段,自动化运维便显得尤为重要。本文中,小米运维架构师伏晔在接受51CTO记者采访时,分享了小米运维自动化平台的由来与发展历程,让我们一起走进小米自动化运维之道。

[[84030]]

(小米运维架构师 伏晔)

以下是采访实录:

51CTO:伏老师您好!首先,请您简单地做一下自我介绍(包括姓名、职位、负责的领域等方面)。

伏晔:我是伏晔,在小米运维部担任运维架构师一职。之前主要负责业务运维方面的工作,在积累了一定经验后,转向到运维自动化的研究与建设。总的来说都是在运维这一领域。

51CTO:小米公司是从什么时候开始实施自动化运维的?能简单介绍下贵公司实施自动化运维之前的一些情况吗?

伏晔:小米公司成立的时间并不长,和很多创业公司一样,最开始并没有专有的运维团队,都是devs同学兼职的,既要兼顾业务开发,又要兼顾运行维护,也很辛苦。那时在运维相关规划上还没有太多的考虑,操作、上线基本都是手工面向单机进行的,且缺少有效的监控。毕竟术业有专攻,于是公司逐渐认识到运维的重要性,并在2012年成立了运维团队,我们的自动化建设是从2012年5月份开始的。

51CTO:在运维自动化的过程中,你们遇到的困难是什么?从这些困难中,你们获得了哪些心得?

伏晔:目标是确定的,其实最大的困难是想清楚如何走,如何保证其灵活性、稳定性。因为这涉及到标准和服务稳定性。一旦定下来并开始实施,再推翻就会非常非常麻烦。

比如我们的agent端,经过了好几次讨论,最终将其分成了三个程序来分别进行命令及状态传递、进程管理、文件部署,为得就是单个功能的简单及稳定。同时明确了每个程序如何自升级。这种讨论很多很多,每周都会有好几次。

至于心得方面,主要总结如下:

1、兼顾现状,理想设计与现实情况的平衡;

2、收益与改造成本兼顾,改造不能太多太复杂;

3、看似一个简单问题,实际需要很多基础设施、开发模式进行改变。

51CTO:针对大批量的服务器的时候,配置文件管理是一件繁琐、工作量较大的工作,你们这边有没有比较好的方案?是如何管理配置的?

伏晔:首先所有机器的系统环境希望是一致的,我们不针对某一台机器的需求进行外置的配置管理。原则上要求业务采用自包含的方式,在部署的时候包含自身所需要的各种依赖和环境,尽量不去污染系统环境。业务本身的配置文件管理,使用我们内部的部署系统进行管理。

Puppet和saltstack在公司内部也有使用,但都是很小范围的。我们有自己的批量操作工具和部署AGENT,能够满足绝大部分需求。

51CTO:从监控的角度来看,你们是怎么配合自动化运维工作的呢?(针对网站应用、数据库;nagios/zabbix相关插件等)

伏晔:我们底层使用的是zabbix系统,并基于此做了上层封装,以简化使用。我们的监控有两种,一种是主动监控监控,一种是被动监控。

主动监控:主要是面向机器资源、域名类监控。由server端主动发起探测,获取信息,进行阈值设定及判断。

被动监控:主要面向业务模块,程序定期主动生成相关counter,我们获取到后再进行阈值判别。业务可以主动push counter信息,或者注册到zk上,我们通过注册信息进行抓取。

51CTO:运维工作经常要干的事情是业务上线或者版本升级更新,你们是如何实现呢?用到自动化的技术了吗?

伏晔:公司快速发展,肯定会有很多线上变更,而一般运维人员与RD的比例是一比十几,光靠人工来做的话肯定不能满足这样的需求,会导致OPS成为发展瓶颈,所以部署自动化是我们重点考虑要做的。部署方面我们主要推PAAS和我们自己开发的部署系统。

51CTO:为了适合和满足业务发展需求,你们采用的负载均衡解决方案是什么?最终效果如何?

伏晔: 市场上的负载均衡设备有很多,但从实际需求及可控性方面考虑,我们还是选择了LVS。而且很多大厂也都在使用、改进,并进行了开源。之前我们使用的方式是LVS+keepalived,但随着流量的增长,我们已经变为了LVS集群服务。

51CTO:您感觉你们现在运维工作,在哪方面需要提升呢,如何才能做的更好?

伏晔:我们的方向是服务不需要人进行运维。有几个部分很重要:

1、标准化

a)发布包结构规范

b)模块结构规范

c)模块依赖规范

2、系统化

a)自动部署

b)监控系统

c)  资源限制

d)调度控制

这几项是有关联的。

1、标准化能够使是程序、环境统一,可程序化处理,使灵活的自动部署成为可能。

2、与周边系统联动,可以保证运维信息的准确性,并自动进行相应部署控制。

3、在调度机制完善后,结合运维的动态信息及自动化部署,即可实现集群的自管理。

当然,我们离目标还有较远的距离,后续我们还会在自动部署、监控这两个方向上持续比较长的时间。进行部署、监控自身功能的完善以及联动功能的完善。比如新模块自动上线过程中,如果出现异常报警,则将当前部署暂停,待人工确认后再继续。

好的,非常感谢伏晔老师的分享!此次专访就到这里。在自动化运维方面,如果您有更多需要解答的问题,欢迎留言讨论。也可以关注小米的技术博客获悉更多内容。

责任编辑:黄丹 来源: 51CTO.com
相关推荐

2012-08-15 14:58:01

运维架构师

2014-08-04 10:10:35

IT运维自动化运维

2014-07-26 15:11:20

WOT2014自动化运维

2018-07-26 13:50:37

IT架构运维

2012-10-22 14:54:48

2017-10-13 13:14:35

互联网

2018-06-23 07:31:05

2012-05-15 10:23:35

架构师运维安全

2014-08-19 10:09:37

2018-05-02 11:16:27

数据中心

2017-07-25 10:53:27

2022-07-29 14:39:17

Ansible运维工具

2015-06-24 10:42:19

云计算运维自动化运维ANSIBLE

2012-11-20 17:22:57

2015-10-08 10:55:23

云服务自动化运维 ANSIBLE

2020-04-30 15:00:17

运维Ansible自动化

2014-09-22 11:24:18

运维

2013-04-16 14:55:21

自动化运维Puppet实战

2019-08-27 08:55:05

2020-07-21 15:53:18

戴尔
点赞
收藏

51CTO技术栈公众号