專訪運維架構師伏曄:小米的自動化運維之路
原創【51CTO專稿】在計算機應用的發展歷史中,運維工作一直是必不可少的重要環節。無論在什么年代、什么場景,保證服務的正??沙掷m運行都是運維的最終目標。隨著規模增長,依賴手工管理自然已無力應對。許多互聯網公司的服務器早已跨入幾百甚至千臺規模,腳本化、批量化管理占據非常大的比例,在這個階段,自動化運維便顯得尤為重要。本文中,小米運維架構師伏曄在接受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、在調度機制完善后,結合運維的動態信息及自動化部署,即可實現集群的自管理。
當然,我們離目標還有較遠的距離,后續我們還會在自動部署、監控這兩個方向上持續比較長的時間。進行部署、監控自身功能的完善以及聯動功能的完善。比如新模塊自動上線過程中,如果出現異常報警,則將當前部署暫停,待人工確認后再繼續。
好的,非常感謝伏曄老師的分享!此次專訪就到這里。在自動化運維方面,如果您有更多需要解答的問題,歡迎留言討論。也可以關注小米的技術博客獲悉更多內容。