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