專訪運維架構師伏曄:小米的自動化運維之路
原創(chuàng)【51CTO專稿】在計算機應用的發(fā)展歷史中,運維工作一直是必不可少的重要環(huán)節(jié)。無論在什么年代、什么場景,保證服務的正常可持續(xù)運行都是運維的最終目標。隨著規(guī)模增長,依賴手工管理自然已無力應對。許多互聯(lián)網(wǎng)公司的服務器早已跨入幾百甚至千臺規(guī)模,腳本化、批量化管理占據(jù)非常大的比例,在這個階段,自動化運維便顯得尤為重要。本文中,小米運維架構師伏曄在接受51CTO記者采訪時,分享了小米運維自動化平臺的由來與發(fā)展歷程,讓我們一起走進小米自動化運維之道。
(小米運維架構師 伏曄)
以下是采訪實錄:
51CTO:伏老師您好!首先,請您簡單地做一下自我介紹(包括姓名、職位、負責的領域等方面)。
伏曄:我是伏曄,在小米運維部擔任運維架構師一職。之前主要負責業(yè)務運維方面的工作,在積累了一定經(jīng)驗后,轉向到運維自動化的研究與建設。總的來說都是在運維這一領域。
51CTO:小米公司是從什么時候開始實施自動化運維的?能簡單介紹下貴公司實施自動化運維之前的一些情況嗎?
伏曄:小米公司成立的時間并不長,和很多創(chuàng)業(yè)公司一樣,最開始并沒有專有的運維團隊,都是devs同學兼職的,既要兼顧業(yè)務開發(fā),又要兼顧運行維護,也很辛苦。那時在運維相關規(guī)劃上還沒有太多的考慮,操作、上線基本都是手工面向單機進行的,且缺少有效的監(jiān)控。畢竟術業(yè)有專攻,于是公司逐漸認識到運維的重要性,并在2012年成立了運維團隊,我們的自動化建設是從2012年5月份開始的。
51CTO:在運維自動化的過程中,你們遇到的困難是什么?從這些困難中,你們獲得了哪些心得?
伏曄:目標是確定的,其實最大的困難是想清楚如何走,如何保證其靈活性、穩(wěn)定性。因為這涉及到標準和服務穩(wěn)定性。一旦定下來并開始實施,再推翻就會非常非常麻煩。
比如我們的agent端,經(jīng)過了好幾次討論,最終將其分成了三個程序來分別進行命令及狀態(tài)傳遞、進程管理、文件部署,為得就是單個功能的簡單及穩(wěn)定。同時明確了每個程序如何自升級。這種討論很多很多,每周都會有好幾次。
至于心得方面,主要總結如下:
1、兼顧現(xiàn)狀,理想設計與現(xiàn)實情況的平衡;
2、收益與改造成本兼顧,改造不能太多太復雜;
3、看似一個簡單問題,實際需要很多基礎設施、開發(fā)模式進行改變。
51CTO:針對大批量的服務器的時候,配置文件管理是一件繁瑣、工作量較大的工作,你們這邊有沒有比較好的方案?是如何管理配置的?
伏曄:首先所有機器的系統(tǒng)環(huán)境希望是一致的,我們不針對某一臺機器的需求進行外置的配置管理。原則上要求業(yè)務采用自包含的方式,在部署的時候包含自身所需要的各種依賴和環(huán)境,盡量不去污染系統(tǒng)環(huán)境。業(yè)務本身的配置文件管理,使用我們內部的部署系統(tǒng)進行管理。
Puppet和saltstack在公司內部也有使用,但都是很小范圍的。我們有自己的批量操作工具和部署AGENT,能夠滿足絕大部分需求。
51CTO:從監(jiān)控的角度來看,你們是怎么配合自動化運維工作的呢?(針對網(wǎng)站應用、數(shù)據(jù)庫;nagios/zabbix相關插件等)。
伏曄:我們底層使用的是zabbix系統(tǒng),并基于此做了上層封裝,以簡化使用。我們的監(jiān)控有兩種,一種是主動監(jiān)控監(jiān)控,一種是被動監(jiān)控。
主動監(jiān)控:主要是面向機器資源、域名類監(jiān)控。由server端主動發(fā)起探測,獲取信息,進行閾值設定及判斷。
被動監(jiān)控:主要面向業(yè)務模塊,程序定期主動生成相關counter,我們獲取到后再進行閾值判別。業(yè)務可以主動push counter信息,或者注冊到zk上,我們通過注冊信息進行抓取。
51CTO:運維工作經(jīng)常要干的事情是業(yè)務上線或者版本升級更新,你們是如何實現(xiàn)呢?用到自動化的技術了嗎?
伏曄:公司快速發(fā)展,肯定會有很多線上變更,而一般運維人員與RD的比例是一比十幾,光靠人工來做的話肯定不能滿足這樣的需求,會導致OPS成為發(fā)展瓶頸,所以部署自動化是我們重點考慮要做的。部署方面我們主要推PAAS和我們自己開發(fā)的部署系統(tǒng)。
51CTO:為了適合和滿足業(yè)務發(fā)展需求,你們采用的負載均衡解決方案是什么?最終效果如何?
伏曄: 市場上的負載均衡設備有很多,但從實際需求及可控性方面考慮,我們還是選擇了LVS。而且很多大廠也都在使用、改進,并進行了開源。之前我們使用的方式是LVS+keepalived,但隨著流量的增長,我們已經(jīng)變?yōu)榱薒VS集群服務。
51CTO:您感覺你們現(xiàn)在運維工作,在哪方面需要提升呢,如何才能做的更好?
伏曄:我們的方向是服務不需要人進行運維。有幾個部分很重要:
1、標準化
a)發(fā)布包結構規(guī)范
b)模塊結構規(guī)范
c)模塊依賴規(guī)范
2、系統(tǒng)化
a)自動部署
b)監(jiān)控系統(tǒng)
c) 資源限制
d)調度控制
這幾項是有關聯(lián)的。
1、標準化能夠使是程序、環(huán)境統(tǒng)一,可程序化處理,使靈活的自動部署成為可能。
2、與周邊系統(tǒng)聯(lián)動,可以保證運維信息的準確性,并自動進行相應部署控制。
3、在調度機制完善后,結合運維的動態(tài)信息及自動化部署,即可實現(xiàn)集群的自管理。
當然,我們離目標還有較遠的距離,后續(xù)我們還會在自動部署、監(jiān)控這兩個方向上持續(xù)比較長的時間。進行部署、監(jiān)控自身功能的完善以及聯(lián)動功能的完善。比如新模塊自動上線過程中,如果出現(xiàn)異常報警,則將當前部署暫停,待人工確認后再繼續(xù)。
好的,非常感謝伏曄老師的分享!此次專訪就到這里。在自動化運維方面,如果您有更多需要解答的問題,歡迎留言討論。也可以關注小米的技術博客獲悉更多內容。






















