【51CTO专稿】在计算机应用的发展历史中,运维工作一直是必不可少的重要环节。无论在什么年代、什么场景,保证服务的正常可持续运行都是运维的最终目标。随着规模增长,依赖手工管理自然已无力应对。许多互联网公司的服务器早已跨入几百甚至千台规模,脚本化、批量化管理占据非常大的比例,在这个阶段,自动化运维便显得尤为重要。本文中,小米运维架构师伏晔在接受51CTO记者采访时,分享了小米运维自动化平台的由来与发展历程,让我们一起走进小米自动化运维之道。
(小米运维架构师 伏晔)
以下是采访实录:
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、在调度机制完善后,结合运维的动态信息及自动化部署,即可实现集群的自管理。
当然,我们离目标还有较远的距离,后续我们还会在自动部署、监控这两个方向上持续比较长的时间。进行部署、监控自身功能的完善以及联动功能的完善。比如新模块自动上线过程中,如果出现异常报警,则将当前部署暂停,待人工确认后再继续。
好的,非常感谢伏晔老师的分享!此次专访就到这里。在自动化运维方面,如果您有更多需要解答的问题,欢迎留言讨论。也可以关注小米的技术博客获悉更多内容。