本篇文章內(nèi)容來自第10期魅族開放日餓了么高級(jí)運(yùn)維經(jīng)理徐巍的現(xiàn)場(chǎng)分享。
編輯:Cynthia
大家好,首先,先簡(jiǎn)單介紹下自己,我是徐巍,目前在餓了么負(fù)責(zé)基礎(chǔ)設(shè)施的運(yùn)維及開發(fā)工作,早些年就職于PPTV、攜程、游族等公司,也算是一個(gè)運(yùn)維的老兵了。
餓了么成立于2008年,2014年底開始迎來業(yè)務(wù)的大規(guī)模爆發(fā)性增長(zhǎng),2015-2016年餓了么進(jìn)入高速發(fā)展期,業(yè)務(wù)和服務(wù)器的增長(zhǎng)都在數(shù)十倍的規(guī)模,這種大規(guī)模的增長(zhǎng)必然帶來很多挑戰(zhàn),本文將通過餓了么運(yùn)維基礎(chǔ)設(shè)施的進(jìn)化史和大家分享不同時(shí)期應(yīng)對(duì)挑戰(zhàn)的措施和思路。
一、1.0時(shí)代
2014年至2015年被稱為餓了么的1.0時(shí)代,業(yè)務(wù)迎來高速發(fā)展,這時(shí)更多考慮的是業(yè)務(wù)需要什么就趕緊上什么,而不是長(zhǎng)遠(yuǎn)的架構(gòu)等。每個(gè)人或團(tuán)隊(duì)負(fù)責(zé)自己的一部分工作,全力配合業(yè)務(wù)的需求。可想而知,這個(gè)過程中會(huì)有很多的由于考慮不周產(chǎn)生的技術(shù)債,也就是所謂的“痛”點(diǎn)。
網(wǎng)絡(luò)的痛
網(wǎng)絡(luò)的痛主要表現(xiàn)在:
● 沒有標(biāo)準(zhǔn)化:IP亂掛。外網(wǎng)IP直接掛到服務(wù)器上;有的服務(wù)器可能有2個(gè)甚至3個(gè)IP;有的有bonding,有的沒有;
● 攻擊多:業(yè)務(wù)高速增長(zhǎng)的情況下還會(huì)有遭遇大量的攻擊,一遇到攻擊就可能宕機(jī);
● 帶寬收斂比較低。因?yàn)榱髁刻螅缇彺娓邘挼那闆r,交換機(jī)上聯(lián)端口或者服務(wù)器千兆網(wǎng)卡很快被打滿;
● 監(jiān)控缺失:出了問題技術(shù)團(tuán)隊(duì)不知道,騎手或用戶說不能下單了之后各種投訴,由客服反饋過來;
● 單點(diǎn):從業(yè)務(wù)到整體架構(gòu)到每個(gè)業(yè)務(wù)甚至機(jī)器都存在很多單點(diǎn);
● 還有鏈路質(zhì)量不穩(wěn)定的問題。
服務(wù)器的痛
資源的痛主要表現(xiàn)在:
● 服務(wù)器交付不及時(shí):去年到今年我們最高周交付量是3700+臺(tái)邏輯服務(wù)器。平均下來每個(gè)月都是幾千臺(tái)的交付、回收,對(duì)效率要求非常高;
● 資產(chǎn)管理缺失:無標(biāo)準(zhǔn),維護(hù)成本高。這時(shí)處于野蠻增長(zhǎng)時(shí)期,需要服務(wù)器就趕緊買,不會(huì)考慮有多少服務(wù)器。也不知道服務(wù)器都是什么配置的,沒有標(biāo)準(zhǔn)化,可能這一臺(tái)有SSD,另一臺(tái)就沒有。維護(hù)起來成本非常高。
● 交付質(zhì)量無保證:全部都是人肉裝機(jī),2015年底的情況是買進(jìn)一批機(jī)器就臨時(shí)組成一個(gè)裝機(jī)小分隊(duì),一起裝機(jī)。因?yàn)槎际侨巳獠僮鳎医桓顿|(zhì)量無法保證,排查更困難。
基礎(chǔ)服務(wù)缺失
基礎(chǔ)服務(wù)缺失主要體現(xiàn)在:
● 監(jiān)控方面最早是用zabbix,配置不一導(dǎo)致有些硬盤沒有監(jiān)控、IOPS是多少都是缺失的,業(yè)務(wù)層監(jiān)控也沒有覆蓋全;
● 負(fù)載均衡,每個(gè)業(yè)務(wù)自己搞一兩臺(tái)服務(wù)器,掛個(gè)Nginx做反向代理,都是這么隨便做的;
● 集中式文件存儲(chǔ)。每一臺(tái)服務(wù)器會(huì)把很多文件存在本地,這為整個(gè)基礎(chǔ)設(shè)施管理帶來很多問題。舉個(gè)例子,有的東西,比如理論上互聯(lián)網(wǎng)很多的SOA服務(wù)都是無狀態(tài)的,本地除了代碼之外,不應(yīng)該有其他的東西,但發(fā)生故障的時(shí)候,業(yè)務(wù)因?yàn)楸O(jiān)控不成熟無法確認(rèn)問題,需要看日志,這就復(fù)雜了,有人說要保留一周,有人說要保留一個(gè)月,有時(shí)日志一天就是幾十個(gè)G怎么辦?那就加一塊硬盤,怎么加?誰來采購(gòu)和管理?后面的標(biāo)準(zhǔn)化怎么做?集中式日志、集中式文件存儲(chǔ)都是為了解決標(biāo)準(zhǔn)化的問題。
基礎(chǔ)的服務(wù)也非常混亂。
二、我們做了什么
面對(duì)這么多的問題我們?cè)趺崔k?其實(shí)運(yùn)維做三件事情就夠了。
第一是標(biāo)準(zhǔn)化,從硬件到網(wǎng)絡(luò)到操作系統(tǒng)到使用的技術(shù)棧、軟件的安裝方式、日志的存放路徑、名稱、代碼部署方式、監(jiān)控從上到下,要建立一套體系化的標(biāo)準(zhǔn)。有了標(biāo)準(zhǔn)就可以用代碼自動(dòng)化,有了自動(dòng)化和標(biāo)準(zhǔn)化之后就可以實(shí)現(xiàn)良性循環(huán)。
第二是流程化,流程化是把很多的需求通過步驟進(jìn)行規(guī)范化和標(biāo)準(zhǔn)化。
第三是平臺(tái),構(gòu)建一個(gè)平臺(tái)實(shí)現(xiàn)標(biāo)準(zhǔn)化和自動(dòng)化。
我理解的是運(yùn)維需要做兩個(gè)生命周期的管理。
第一是資源的生命周期管理,包括資源的采購(gòu)、上架、部署、代碼、故障處理、服務(wù)器回收、報(bào)廢等。
第二是應(yīng)用的生命周期管理,包括應(yīng)用開發(fā)、測(cè)試、上線、變更,應(yīng)用下線、回收等。
2.1 標(biāo)準(zhǔn)化
關(guān)于標(biāo)準(zhǔn)化有一個(gè)概念,我經(jīng)常和大家強(qiáng)調(diào),就是要讓我們的用戶做選擇提,而不是問答題。
舉個(gè)例子,用戶經(jīng)常會(huì)說我要一臺(tái)24核32G 600G硬盤的機(jī)器,這時(shí)你應(yīng)該告訴用戶:我現(xiàn)在有A、B、C、D四種機(jī)型,分別是計(jì)算型、存儲(chǔ)型、內(nèi)存型、高I/O型,你要哪種?這很重要,很多用戶只是習(xí)慣了兩臺(tái)機(jī)器:一臺(tái)配200G硬盤,一臺(tái)配250G硬盤。用戶的需求千奇百怪,如果沒有標(biāo)準(zhǔn)化很難做到。我們的服務(wù)器型號(hào)是統(tǒng)一的,提供各種型號(hào),你需要和用戶談,收集用戶需求,盡量辨別出來用戶的真實(shí)需求。
機(jī)型采購(gòu)的時(shí)候要做定制化,比如要不要把省電模式關(guān)掉。各個(gè)廠商還有一些坑,包括直通卡的盤符漂移等問題,如何做自動(dòng)化,機(jī)器來了如何自動(dòng)上線。
服務(wù)器出廠和上架也要做定制化。我們把資源標(biāo)成一個(gè)個(gè)模塊,最小的模塊是3個(gè)機(jī)柜,每個(gè)機(jī)柜放多少臺(tái)服務(wù)器是固定的。生產(chǎn)的時(shí)候,比如說我要采購(gòu)一千臺(tái)服務(wù)器,我告訴廠商我已經(jīng)規(guī)劃好了,這一千臺(tái)服務(wù)器放在哪一個(gè)機(jī)房里,哪一個(gè)機(jī)柜,哪一個(gè)U位,廠商會(huì)做定制化,機(jī)器到貨上架之后,廠家人或服務(wù)商把電一接,操作系統(tǒng)自動(dòng)化安裝,甚至是網(wǎng)絡(luò),每一層都是標(biāo)準(zhǔn)化的。
2.2 流程+自動(dòng)化
上圖展示的是餓了么的工作流引擎。
可以理解為資源生命周期中有很多流程,比如服務(wù)器的申請(qǐng),包括物理機(jī)申請(qǐng)、虛擬機(jī)申請(qǐng)、云服務(wù)申請(qǐng)等;比如大量狀態(tài),包括回收等。流程的背后是自動(dòng)化,規(guī)范用戶輸入,讓用戶做選擇題,要什么樣的機(jī)型、什么樣的配置、多少數(shù)量,表單一填好,后臺(tái)就自動(dòng)化地執(zhí)行了。
2.3 自動(dòng)化+平臺(tái)
● 物理服務(wù)器自動(dòng)化裝機(jī)及初始化。比如我有幾千臺(tái)服務(wù)器,能不能一天裝好?360曾經(jīng)一天最高裝了5000臺(tái)服務(wù)器,我們的最高紀(jì)錄是一天裝機(jī)2500臺(tái)物理服務(wù)器。
● 網(wǎng)絡(luò)設(shè)備上線自動(dòng)化。
● 資源管理平臺(tái)。對(duì)所有的資源能做統(tǒng)一化管理,類似資源交付流程的管理后臺(tái)
● 分布式文件系統(tǒng),主要用于數(shù)據(jù)庫備份及圖片處理
● 日志集中平臺(tái),所有的日志集中到elk上,不要上服務(wù)器看日志了
2.4 私有云平臺(tái)(Zstack)
餓了么早期實(shí)行野蠻生長(zhǎng)的方式,虛擬機(jī)就是自己創(chuàng)建。創(chuàng)建完了會(huì)有一個(gè)問題:怎么知道一個(gè)機(jī)器可以再創(chuàng)建呢?比如說我一個(gè)機(jī)器可以創(chuàng)建6臺(tái)虛擬機(jī),已經(jīng)創(chuàng)建5臺(tái)了,怎么知道還有一臺(tái)創(chuàng)建在哪里?需要把一個(gè)業(yè)務(wù)布置到10臺(tái)物理機(jī),甚至是跨機(jī)柜的,避免單點(diǎn)物理機(jī)或單個(gè)機(jī)柜出現(xiàn)故障,影響全局應(yīng)用,這就涉及到了虛擬機(jī)的資源調(diào)度,我們選用了ZStack。
為什么選用ZStack呢?
私有云比較火的三個(gè)開源技術(shù)選型分別是:OpenStack、CloudStack和ZStack。
本著越簡(jiǎn)單越好的原則,我們排除了OpenStack,它太重了,沒有人也沒有時(shí)間去Hold這么大的系統(tǒng)。而且從行業(yè)內(nèi)得到一些反饋,總體來說不是很好。
CloudStack的開發(fā)者也是ZStack的開發(fā)者,當(dāng)時(shí)CloudStack社區(qū)已經(jīng)沒有人維護(hù)了,并且它不支持centos7。
所以我們選用了ZStack,那個(gè)時(shí)候ZStack也有不少bug,但還是比較簡(jiǎn)單的,我們可以做好。
ZStack的特點(diǎn):簡(jiǎn)單、無狀態(tài)、接口化
比較簡(jiǎn)單,安裝一下,就可以跑起來了。當(dāng)然想要用好,后面還是有點(diǎn)難度的。它是一個(gè)中心結(jié)構(gòu),所有的都是基于消息做的,我們的ZStack平臺(tái)看不到什么高大上的頁面,后面都是自定義的接口,前端的流程自動(dòng)調(diào)后端的接口,通過一些消息來進(jìn)行同步。ZStack目前已經(jīng)管理了超過6000臺(tái)虛擬機(jī)。
三、2.0時(shí)代
在1.0時(shí)代我們做了一些標(biāo)準(zhǔn)化、自動(dòng)化的工作,讓我們的東西順暢地跑起來。從2016年開始,我們進(jìn)入了2.0時(shí)代,這個(gè)階段也存在一些痛點(diǎn):SLA是什么?有數(shù)據(jù)嗎?你說效率很高了,如何證明?一天交付1000就是高嗎?數(shù)據(jù)怎么衡量?在IT圈里,除了上帝,所有的東西都要用數(shù)據(jù)說話,一切要可量化,可衡量。
四、我們做了什么
這個(gè)時(shí)期我們解決痛點(diǎn)的措施從兩方面著手:精細(xì)化運(yùn)維和數(shù)據(jù)化運(yùn)營(yíng)。運(yùn)維和運(yùn)營(yíng)是不一樣的。
4.1 精細(xì)化運(yùn)維
精細(xì)化運(yùn)維包括以下方面。
● 網(wǎng)絡(luò)架構(gòu)的持續(xù)升級(jí)
● 服務(wù)器性能基線制定
● 服務(wù)器交付質(zhì)量校驗(yàn)(不合格不交付)
● 硬件故障報(bào)修自動(dòng)化
● 網(wǎng)絡(luò)流量分析
● 服務(wù)器重啟自動(dòng)化
● Bug fix:省電模式、bonding。。。
網(wǎng)絡(luò)架構(gòu)持續(xù)升級(jí)
早期我們有一個(gè)數(shù)據(jù)中心,使用的核心交換機(jī)是華為的5700SE,這意味著什么?在一次流量突發(fā)中,這個(gè)設(shè)備引發(fā)了我們P0級(jí)的事故。所有我們重新定義了網(wǎng)絡(luò)標(biāo)準(zhǔn),并持續(xù)做了大量的網(wǎng)絡(luò)升級(jí),包括核心、負(fù)載均衡、匯聚到核心的帶寬,以及網(wǎng)絡(luò)架構(gòu)優(yōu)化。
還有IDC間鏈路,最早我們一些IDC間鏈路是打的VPN,現(xiàn)在同城的用裸纖,跨城的都是用傳輸。這里也有依稀持續(xù)的投入。
網(wǎng)絡(luò)優(yōu)化
如圖所示,北京和上海的IDC,從辦公室訪問IDC我們都拉了裸纖和專線,全部做到足夠的強(qiáng)壯。還包括到第三方支付的,比如支付寶、微信支付等等。
服務(wù)器的性能基線制定,交付質(zhì)量校驗(yàn)
交付的服務(wù)器是否足夠好,要用數(shù)據(jù)說話。我們所有的服務(wù)器都有一個(gè)基線,比如一種計(jì)算型的機(jī)型,計(jì)算能力、I/O能力是多少、網(wǎng)卡小包的PPS可以達(dá)到多少等都是可以測(cè)試的。在交付的時(shí)候會(huì)進(jìn)行性能測(cè)試,達(dá)到基線才可以交付,否則就不能交付。
網(wǎng)絡(luò)流量分析
我們當(dāng)初遇到過匯聚到接入之間某根光纖帶寬跑滿的情況,因?yàn)樵缙趲捠諗勘炔粔颍?個(gè)10G在上面,由于網(wǎng)絡(luò)流量的算法原因,導(dǎo)致4個(gè)10G端口的其中一個(gè)被跑滿了。我們要知道關(guān)鍵節(jié)點(diǎn)的流量是哪一個(gè)業(yè)務(wù)在跑、跑的怎么樣,有問題要告警出來。
硬件故障保修自動(dòng)化
目前我們的服務(wù)器數(shù)量很多,每周可能存在數(shù)十臺(tái)的故障,怎么第一時(shí)間知道故障,并且在不影響業(yè)務(wù)的情況下快速修復(fù)?
還有一些其他的工作,如服務(wù)器的自動(dòng)化重啟,做運(yùn)維都很辛苦,如果半夜有一個(gè)故障或者服務(wù)器壞了,需要重啟,如果你還得通過遠(yuǎn)程管理卡輸入密碼登錄進(jìn)去重啟,就太low了,要實(shí)現(xiàn)自動(dòng)化重啟。
服務(wù)器自動(dòng)化報(bào)修總體來說是幾個(gè)邏輯。
● 故障發(fā)現(xiàn)
● 故障通知:用戶、IDC、供應(yīng)商
● 故障處理
● 故障恢復(fù)校驗(yàn)
● 故障分析
第一是故障發(fā)現(xiàn),如何發(fā)現(xiàn)資源故障?監(jiān)控,帶內(nèi)、帶外、日志多方位監(jiān)控。所有監(jiān)控的報(bào)警到一個(gè)地方來做初步的收集,最后就會(huì)到這個(gè)系統(tǒng)。
這是9月19日的圖,可以看到有非常多的故障,發(fā)現(xiàn)這些故障之后要通知,通知也是很復(fù)雜的,是短信、電話還是內(nèi)部的工具?我們要多渠道地進(jìn)行通知。有的用戶比較牛,他說你不用給我發(fā)郵件,我這邊有一個(gè)接口,可以做自動(dòng)化的發(fā)送,比如我們的服務(wù)器故障了,自動(dòng)給他發(fā)一個(gè)消息,收到這個(gè)消息之后,業(yè)務(wù)就開始把這個(gè)機(jī)器關(guān)掉,甚至把數(shù)據(jù)操作等一系列操作做完,做完之后返還給報(bào)修系統(tǒng)一個(gè)消息:這個(gè)服務(wù)器你可以去維修了,收到這個(gè)消息之后,通知IDC、供應(yīng)商:哪一個(gè)機(jī)房、哪一個(gè)機(jī)柜、哪一個(gè)U位、序列號(hào)多少的服務(wù)器發(fā)生了什么問題,請(qǐng)于什么時(shí)間段上門維修,同時(shí)通過各種方式告訴IDC:誰身份證號(hào)多少,什么時(shí)間會(huì)帶著什么設(shè)備上門做哪一個(gè)地方的維修。
我們數(shù)以萬計(jì)的服務(wù)器只有兩個(gè)人來進(jìn)行運(yùn)維。供應(yīng)商維修、故障處理是人肉的,處理之后登陸外部系統(tǒng),給我們發(fā)一個(gè)消息,告訴我們這個(gè)服務(wù)器修好了,我們的程序會(huì)自動(dòng)檢查故障有沒有恢復(fù),如果恢復(fù)了,就通知用戶說資源什么時(shí)候修好了,用戶接到消息,會(huì)把服務(wù)器再拉回來。同時(shí)所有的故障信息都會(huì)進(jìn)入我的數(shù)據(jù)庫,自動(dòng)進(jìn)行分析,看到哪一個(gè)品牌的服務(wù)器不好、哪一個(gè)機(jī)型或者是哪一個(gè)配件壞的比較多,在做供應(yīng)商和機(jī)型選擇的時(shí)候就可以有一個(gè)參考。
精細(xì)化運(yùn)維還有各種Bug Fix等很多細(xì)節(jié),細(xì)節(jié)是魔鬼。當(dāng)初被省電模式坑得很慘,包括網(wǎng)卡的問題,從硬件到服務(wù),代碼的Bug就更多了。
運(yùn)維管理平臺(tái)
我們有很多機(jī)柜、機(jī)房,這些數(shù)據(jù)都通過自動(dòng)化的系統(tǒng)進(jìn)行采集和展示。
運(yùn)維重點(diǎn)需要考慮三件事情:質(zhì)量、效率和成本。上圖中可以看到這是一個(gè)模塊,這個(gè)模塊當(dāng)中有很多的機(jī)柜,這些機(jī)柜用電量很大,這就體現(xiàn)出了成本,我們大量的機(jī)柜是黃色,黃色是告警。一個(gè)機(jī)柜的電量是4000W、5000W,我們會(huì)盡量把資源充分利用起來,成本相對(duì)最優(yōu),所以我們的機(jī)柜都是一些比較高電的,比如說47U的機(jī)柜我們會(huì)放很多的設(shè)備。
4.2 數(shù)據(jù)化運(yùn)營(yíng)
IT所有的東西都要用數(shù)據(jù)說話。
資產(chǎn)情況
資產(chǎn)情況包括:我們有多少服務(wù)器,分布在哪些機(jī)房,有多少機(jī)柜,服務(wù)器是什么機(jī)型,品牌和型號(hào),哪些是占用的,哪些是未用的。
網(wǎng)絡(luò)流量分析
網(wǎng)絡(luò)流量分析包括:網(wǎng)絡(luò)流量來自于哪些人,比如說這里有一個(gè)異常突起,我就知道這是在在跨城帶寬傳輸造成的。跨城帶寬大家都知道,是非常貴的10G帶寬一下子跑滿了,擴(kuò)容要三個(gè)月,這個(gè)時(shí)候整體業(yè)務(wù)會(huì)受到嚴(yán)重影響。我們要第一時(shí)間知道誰在用這些流量。
服務(wù)器去哪兒了
我們買了那么多公司的東西,得知道這些機(jī)器誰在用?圖中的這條線是資源利用率,這是大數(shù)據(jù)部門,圖中可以看到大數(shù)據(jù)的資源利用率是很高的。而其他的部門資源利用率不高。通過這個(gè)數(shù)據(jù)我給你發(fā)報(bào)表,告訴你花了多少錢,用了多少服務(wù)器,什么類型的服務(wù)器,分布情況和利用率是多少。這是運(yùn)營(yíng)的思想,而不是運(yùn)維的思想。
資源交付SLA
我們的工作量如何衡量?我們交付了很多服務(wù)器,什么時(shí)間交付的、交付的是什么型號(hào)、交付的效率如何?一定要可衡量。舉個(gè)例子,做年終KPI考核的時(shí)候,你說我們部門做了很多工作,這個(gè)工程、那個(gè)項(xiàng)目,這些都是廢話。只要告訴我,今年做了幾個(gè)項(xiàng)目,這些項(xiàng)目分別部署了多少資源、效率是什么,以前平均交付時(shí)間是2小時(shí),現(xiàn)在是20分鐘,未來是5分鐘。
成本核算
今年我們花了很多錢,這么多錢花在哪里?誰花的?買了什么?給誰用了?用得怎么樣?從各個(gè)維度來看,這些成本的構(gòu)成等等,甚至我們的成本和友商的成本對(duì)比,都通過這些東西可以看出來。
供應(yīng)商的質(zhì)量評(píng)價(jià)
比如每個(gè)配件什么時(shí)候故障了,故障率是多少?自動(dòng)給廠商打分,報(bào)表會(huì)自動(dòng)交到采購(gòu),作為采購(gòu)的一個(gè)技術(shù)評(píng)分,這個(gè)過程沒有人的介入。包括質(zhì)量方面,某一個(gè)廠商這一段時(shí)間的質(zhì)量下降了,可以要對(duì)他進(jìn)行售后管理。
五、總結(jié)
這次分析主要是資源生命周期管理,本文大部分內(nèi)容偏向于底層資源,但思想可以落到所有的模塊,比如日志、不同運(yùn)維系統(tǒng)、監(jiān)控等。
最后談一些感想。
簡(jiǎn)單及可用。我從入行到現(xiàn)在從事互聯(lián)網(wǎng)運(yùn)維差不多十年時(shí)間,早期服務(wù)器的故障需要很懂的人一臺(tái)一臺(tái)地去看,現(xiàn)在的做法是一臺(tái)服務(wù)器出問題了,拉掉,另外一臺(tái)服務(wù)器快速頂上去,成本可控、質(zhì)量可控、效率第一,這種情況下一定要簡(jiǎn)單及可用。
這句話最早是百度傳出來的,這也是我做運(yùn)維的一個(gè)準(zhǔn)則,一切的東西都要簡(jiǎn)單。有一些開源的解決方案具備很多很牛的功能,但你要深刻思考你真的需要嗎?它真的對(duì)你有幫助嗎?真正核心的價(jià)值是什么?所有軟件程序必須要做到高類聚低耦合,避免很強(qiáng)的依賴。
標(biāo)準(zhǔn)化能標(biāo)準(zhǔn)化的,自動(dòng)化可以自動(dòng)化的。標(biāo)準(zhǔn)化一定是未來的趨勢(shì),現(xiàn)在隨著阿里云、騰訊云的發(fā)展,小的公司很多東西都會(huì)遷移到云上,未來混合云的架構(gòu),運(yùn)維可以做什么?怎么做到快速的擴(kuò)容和彈性計(jì)算,彈性計(jì)算包括容量規(guī)劃、壓測(cè)等,這當(dāng)中有很多的點(diǎn),這些點(diǎn)的基石就是標(biāo)準(zhǔn)化、自動(dòng)化。
盡量不要重復(fù)造輪子,自己造輪子。搞開發(fā)的人很喜歡造輪子,總覺得我到一家公司,不寫點(diǎn)東西,顯得我很Low或者沒有績(jī)效。“用好”軟件比用“好”軟件更重要。工具沒有好壞之分,就看你能不能用好,在對(duì)的時(shí)間做對(duì)的事情,不要有對(duì)工具有偏見,它只是一塊磚,我們要做的是把這些磚做好合并,用好這些磚。
先有,后好(80分萬歲)。萬事起頭難,第一步一定要先有。不要說我想一個(gè)東西想得很宏大,各個(gè)方面設(shè)計(jì)特別牛,要考慮的是這個(gè)東西能落地嗎?落地是最重要的。那有人會(huì)問做了很多東西,可是很爛怎么辦?先收口,收口之后慢慢優(yōu)化。
互聯(lián)網(wǎng)快速發(fā)展,互聯(lián)網(wǎng)應(yīng)用一定要快速迭代,我們公司每天有數(shù)百次發(fā)布,敏捷式開發(fā)快速更新非常重要。這個(gè)過程一定是螺旋式上升的,甚至有前進(jìn)兩步后退一步的情況。不要說誰家的架構(gòu)就是最牛的,只有適合你才是最好的,而且不同階段適合你的東西是不一樣的,需要不斷重構(gòu)和迭代。
現(xiàn)有用戶和新用戶同等重要。這是亞馬遜提出來的。亞馬遜有一件很有名的事情:當(dāng)年有一個(gè)用戶要將服務(wù)遷移到亞馬遜,預(yù)計(jì)上千萬美金。亞馬遜評(píng)價(jià)說,這個(gè)服務(wù)遷過來,要做什么樣的改造,這個(gè)改造會(huì)對(duì)現(xiàn)有業(yè)務(wù)的穩(wěn)定性造成什么影響。經(jīng)過層層上報(bào),最后的結(jié)論是這個(gè)用戶我不要了。因?yàn)榻邮芎蟋F(xiàn)有用戶得不到保障。
這一點(diǎn)非常重要。2016年9月份,我們的日志系統(tǒng)上線,剛剛上線的時(shí)候,峰值8萬/秒的請(qǐng)求量,到10月份達(dá)到80萬/秒,這時(shí)還不斷有用戶過來說要接入。我當(dāng)時(shí)感覺硬件、架構(gòu)等方面都快Hold不住了,我跟大家說了這件事情,給自己爭(zhēng)取了1個(gè)月的緩沖期,做了大量的技術(shù)改造,現(xiàn)在峰值每天超過260萬條日志,也可以進(jìn)行實(shí)時(shí)的收集、傳輸、存儲(chǔ)、分析。這當(dāng)中一定要找一個(gè)平衡,在服務(wù)好現(xiàn)有用戶的同時(shí),逐步接入新用戶,當(dāng)然也不能很生硬的說“no way”,這樣你的品牌就沒有了。
擁抱變化,不要有玻璃心。我工作了很多年,也去過好幾家公司,可以看到每家公司在不同階段都有不同的變化。比如我的團(tuán)隊(duì)中基本上都是開發(fā)沒有運(yùn)維了,標(biāo)準(zhǔn)化做好了,底層就是一個(gè)硬件軟件,一個(gè)操作系統(tǒng)專家,其他的都是一些程序員。可是很多人本身是做運(yùn)維的怎么辦?要開始學(xué)習(xí)代碼,要有變化和成長(zhǎng)。今年我給團(tuán)隊(duì)的目標(biāo)是2017年要把我們這個(gè)團(tuán)隊(duì)做沒了。意思是要做到無人值守,或者只花10%、20%的時(shí)間和精力做后臺(tái)的bug fix,其他80%的時(shí)間做價(jià)值輸出,現(xiàn)在這個(gè)目標(biāo)已經(jīng)在落地的過程當(dāng)中了。
Q & A
Q:你們會(huì)對(duì)業(yè)務(wù)部門的服務(wù)器需求進(jìn)行指導(dǎo)嗎?
A:我們的服務(wù)器分為好幾種,包括計(jì)算型、存儲(chǔ)型、內(nèi)存型、高I/O型(數(shù)據(jù)庫專用)。存儲(chǔ)型主要是大數(shù)據(jù)在用,計(jì)算型是做虛擬化和計(jì)算的,比如SOA無狀態(tài)服務(wù),在申請(qǐng)機(jī)型的時(shí)候,每個(gè)業(yè)務(wù)的機(jī)型基本上都是一模一樣的。新業(yè)務(wù)起來的時(shí)候會(huì)有架構(gòu)評(píng)審,評(píng)審架構(gòu)有沒有認(rèn)證、有沒有數(shù)據(jù)打點(diǎn)、有沒有日志規(guī)范、有沒有日志規(guī)范、整個(gè)架構(gòu)設(shè)計(jì)是否合理、資源需求是否合理。
Q:日志統(tǒng)一平臺(tái)的是自己做的嗎?
A:我們有集中的管理中心,寫了一套腳本自動(dòng)安裝Flume,也在Flume上也做了二次開發(fā),比如 Java有的是跨行日志,我們要做合并行的處理;比如有的業(yè)務(wù)異常日志2M,我扛不住的,這種異常日志我會(huì)做判斷,丟棄;比如有的可能目錄里有多個(gè)日志,怎么處理?
Q:用戶查看日志,對(duì)各個(gè)業(yè)務(wù)索引是怎么實(shí)現(xiàn)的?比如說我是業(yè)務(wù)方,我只看自己業(yè)務(wù)的日志?
A:目前這個(gè)沒有做到,大家知道kibana的權(quán)限管理是很弱的,目前我們還沒有做這一塊。這里我要提一個(gè)點(diǎn),我們有一個(gè)系統(tǒng),業(yè)務(wù)代碼里面會(huì)埋一個(gè)SDK,把堆棧的調(diào)用鏈的關(guān)系都打到這個(gè)系統(tǒng),最終會(huì)展示出列表,這個(gè)系統(tǒng)會(huì)和我們的日志系統(tǒng)對(duì)接,用戶看到調(diào)用鏈,一點(diǎn)就可以把類似信息拖過去了。現(xiàn)在kibana這個(gè)頁面用的人不多,相當(dāng)于只是后端的服務(wù)了。
Q:您剛剛提到會(huì)有一個(gè)性能測(cè)試跑壓測(cè),你們的壓測(cè)怎么做呢?
A:用系統(tǒng)自帶的一些I/O壓測(cè)。每個(gè)機(jī)型的基本指標(biāo),比如說CPU能力、IOPS、PPS能力。
Q:剛剛說到日志,當(dāng)我的應(yīng)用達(dá)到十幾萬請(qǐng)求的時(shí)候,如果都往Flume上寫,就把服務(wù)器的CPU占滿了。我目前的做法是先把日志放在本地,再通過網(wǎng)上推上去。
A:Flume是很好的工具,但性能不是很強(qiáng)。我們壓測(cè)它的處理能力最高是2萬條/秒,實(shí)際上它是跑不到這么高的,包括它在跑的過程當(dāng)中會(huì)有一些假死,甚至有的時(shí)候sink會(huì)滿掉,這當(dāng)中要做大量的監(jiān)控,你應(yīng)該把Flume做成分布式的。比如說我每個(gè)業(yè)務(wù)服務(wù)器上都有一個(gè)Flume,通過TCP、UDP、日志直接讀文件的方式。這個(gè)要看業(yè)務(wù)的容忍度,我們有一些業(yè)務(wù)堆日志說一條都不能丟,我們測(cè)試下來UDP有30%-50%的丟棄,如果說對(duì)日志完整性要求很高,不建議使用。
Flume1.7版本可以支持基于偏移量的日志,而且是支持多文件的。越簡(jiǎn)單越好,越標(biāo)準(zhǔn)化越好,因?yàn)榇虻奖镜啬愕拇疟P空間也可能有問題,甚至是I/O也可能有問題。
Q:你們開發(fā)和運(yùn)維團(tuán)隊(duì)是如何運(yùn)作的?是放在一起嗎?
A:關(guān)于這個(gè)問題,我和阿里也聊過,他們做了3次探索。第一個(gè)是開發(fā)開發(fā),開發(fā)好了給運(yùn)維用。很多公司都會(huì)這么做,這么做有一個(gè)壞處:運(yùn)維說你開發(fā)的是什么東西,我不愿意用;開發(fā)就說運(yùn)維一天到晚就知道提需求。雙方關(guān)系很不好,最后做出來的東西沒有人用,那就沒有意義了。
阿里做了第二個(gè)嘗試。既然這樣,那所有的開發(fā)自己開發(fā)自己運(yùn)維,運(yùn)維做其他的事情,公司這么大,肯定有事情做。這樣的壞處是:開發(fā)對(duì)運(yùn)維理解不深刻,運(yùn)維系統(tǒng)和線上業(yè)務(wù)開發(fā)是很不一樣的,運(yùn)維系統(tǒng)對(duì)可靠性要求相對(duì)差,但是對(duì)質(zhì)量和效率的要求很高。開發(fā)不懂運(yùn)維,容易出現(xiàn)各種故障。
因此阿里做了第三件嘗試,把開發(fā)和運(yùn)維合在一起。
餓了么有部分專職的開發(fā)和運(yùn)維團(tuán)隊(duì),也有開發(fā)和運(yùn)維合在一起的團(tuán)隊(duì)。
11月9-12日 北京國(guó)家會(huì)議中心 第六屆TOP100全球軟件案例研究峰會(huì)
餓了么資深項(xiàng)目經(jīng)理陳士朋將分享《自我做空-新思維模式下敏捷管理者的供給側(cè)改革》
餓了么 中間件團(tuán)隊(duì)首席架構(gòu)師、異地多活項(xiàng)目總架構(gòu)師李雙濤將分享《餓了么整體服務(wù)異地多活改造》
TOP100全球軟件案例研究峰會(huì)已舉辦六屆,甄選全球軟件研發(fā)優(yōu)秀案例,每年參會(huì)者達(dá)2000人次。包含產(chǎn)品、團(tuán)隊(duì)、架構(gòu)、運(yùn)維、大數(shù)據(jù)、人工智能等多個(gè)技術(shù)專場(chǎng),現(xiàn)場(chǎng)學(xué)習(xí)谷歌、微軟、騰訊、阿里、百度等一線互聯(lián)網(wǎng)企業(yè)的最新研發(fā)實(shí)踐。
TOP100大會(huì)將于11月9日-12日在北京國(guó)家會(huì)議中心舉辦,在現(xiàn)場(chǎng)通過對(duì)案例的復(fù)盤總結(jié),分享成功者背后的經(jīng)驗(yàn)和方法。大會(huì)開幕式單天體驗(yàn)票免費(fèi)入口。