在很多“外人”的眼中,運(yùn)維工程師的工作不過是搬機(jī)器、調(diào)網(wǎng)絡(luò)、裝軟件、處理故障、7×24小時(shí)值班,簡單而又枯燥至極。但事實(shí)并非如此,運(yùn)維工作涵蓋很多技術(shù)領(lǐng)域,運(yùn)維工程師要掌握硬件、軟件、操作系統(tǒng)、開發(fā)等多方面的知識,核心目標(biāo)是為億萬用戶使用的產(chǎn)品保駕護(hù)航。當(dāng)今互聯(lián)網(wǎng)行業(yè)的發(fā)展日新月異,新技術(shù)層出不窮。為了適應(yīng)發(fā)展趨勢,運(yùn)維工程師只有提升技術(shù)能力才能更好地完成艱巨的運(yùn)維任務(wù),必須要對傳統(tǒng)運(yùn)維發(fā)出自我挑戰(zhàn)。 在360,運(yùn)維團(tuán)隊(duì)由基礎(chǔ)運(yùn)維團(tuán)隊(duì)、網(wǎng)絡(luò)運(yùn)維團(tuán)隊(duì)和應(yīng)用運(yùn)維團(tuán)隊(duì)三部分組成。我們將運(yùn)維從技術(shù)支持領(lǐng)域升級,進(jìn)行產(chǎn)品化改進(jìn),核心目標(biāo)是為了降低運(yùn)維成本、 縮短研發(fā)周期、讓產(chǎn)品試錯(cuò)更廉價(jià)。理想很豐滿,現(xiàn)實(shí)很骨感,從最初服務(wù)少量項(xiàng)目、幾十臺服務(wù)器,發(fā)展到大量具有數(shù)億用戶的項(xiàng)目,我們也在不斷摸索,在試錯(cuò)中成長。在這個(gè)過程中,我們經(jīng)歷了兩次重要的升級。 01 第一次升級:運(yùn)維工具化
在工具化過程中,我們秉著低成本、拿來即用的原則,借鑒業(yè)界成型的方案,同時(shí)將精力用在對開源軟件的研究中,有開源工具就絕不自己憑空創(chuàng)造。初期,我們只圍繞開源軟件做周邊腳本開發(fā),不動(dòng)核心代碼,在實(shí)踐中總結(jié)經(jīng)驗(yàn)。例如,在最基礎(chǔ)的部署軟件環(huán)境中,我們基于YUM搭建了自己的包管理系統(tǒng),將常用軟件打包, 同時(shí)根據(jù)項(xiàng)目做成模板,這樣無論是初始安裝還是擴(kuò)容都能在分分鐘完成。配置文件管理利用Puppet完成,服務(wù)器批量操控依賴SaltStack。就這樣 我們的運(yùn)維兵器譜在不斷地豐富。 另外,運(yùn)維工作離不開監(jiān)控報(bào)警,這是一件讓無數(shù)運(yùn)維人苦不堪言的事情。而會休息才會工作,監(jiān)控體系必須優(yōu)化。我們的監(jiān)控大概分為系統(tǒng)級、應(yīng)用級、項(xiàng)目邏輯和用戶體驗(yàn)四部分。
我們用過的工具很多,開源工具有Nagios、 Cacti、Ganglia、Zabbix等,同時(shí)自己也開發(fā)了一些針對項(xiàng)目場景的監(jiān)控工具,但萬變不離其宗,都是圍繞上述幾個(gè)維度進(jìn)行監(jiān)控,然后再進(jìn)行分級預(yù)警和報(bào)警。 為了減少報(bào)警騷擾,我們分級處理,將報(bào)警分為郵件預(yù)警、短信報(bào)警和瘋狂短信報(bào)警。以磁盤空間監(jiān)控為例:每天下午6點(diǎn),統(tǒng)計(jì) 磁盤使用率超過80%的機(jī)器,發(fā)出郵件預(yù)警,下班前解決;在預(yù)警的基礎(chǔ)上,超過85%觸發(fā)短信報(bào)警;超過90%就要持續(xù)報(bào)警,避免事故的發(fā)生。此外,隨著 服務(wù)器數(shù)量的增多,硬件故障在所難免,架構(gòu)設(shè)計(jì)需要考慮高可用方案,冗余范圍內(nèi)的服務(wù)器故障會以郵件預(yù)警的方式發(fā)出,避免對運(yùn)維工程師的騷擾。 有了監(jiān)控工具和分級機(jī)制,還需要有好的制度。為了大部分人可以安心休息,我們每天有專人負(fù)責(zé)處理常規(guī)報(bào)警,遇到無法解決的問題才要求他人協(xié)助。第二天的負(fù)責(zé) 人要針對第一天的報(bào)警找出根本原因,并盡力解決,因?yàn)槿绻麩o法根治,困擾將持續(xù)發(fā)生。所謂線上無小事,實(shí)際工作中復(fù)雜場景引發(fā)的問題數(shù)不勝數(shù),所以可以寬容第一次錯(cuò)誤,但不能接受同樣問題發(fā)生第二次,要不斷地總結(jié)和完善。 工具化是運(yùn)維的必經(jīng)之路,是向更高層發(fā)展的基礎(chǔ),面對運(yùn)維這樣復(fù)雜的學(xué)科,這樣一個(gè)極其磨煉人意志的工種,運(yùn)維工程師需要用聰明的方式解決復(fù)雜的問題,節(jié)省時(shí)間,去做更有意義的事情。 02 第二次升級:運(yùn)維產(chǎn)品化
有了這個(gè)想法,就需要將無形的技術(shù)轉(zhuǎn)變?yōu)橛行蔚漠a(chǎn)品形態(tài),同時(shí)要賦予它好的寓意。我們的產(chǎn)品取名為HULK——綠巨人,意在讓小伙伴們借助巨人的肩膀成長,輕點(diǎn)鼠標(biāo),運(yùn)籌帷幄。想到做這個(gè)平臺,源于對實(shí)際工作需求的觀察。產(chǎn)品經(jīng)理有了創(chuàng)新點(diǎn)之后,開發(fā)工程師就想以最快的速度上線,但又會很痛苦,因?yàn)楫a(chǎn)品就好比寶塔明珠,塔基需要一 層層地蓋。而開發(fā)工程師是與運(yùn)維工程師合作最緊密的兄弟,“兄弟有難得拔刀相助”,因此我們明確了開發(fā)工程師就是運(yùn)維平臺的用戶,運(yùn)維工程師在平臺的建設(shè) 中扮演了多重角色,是建設(shè)者也是使用者,但目標(biāo)是為用戶解決問題,讓我們的用戶有極致的用戶體驗(yàn)。 基于這些想法,我們勾畫出了宏偉藍(lán)圖,提供一個(gè)塔基, 第一層提供核心基礎(chǔ)服務(wù),如Web、RDB、NoSQL等; 第二層提供通用基礎(chǔ)服務(wù),構(gòu)造一個(gè)完美的平臺,讓開發(fā)工程師受益。 但勾畫的平臺功能大而全,需求都是我們替用戶假想的,這樣做的后果就是進(jìn)展緩慢,但做出的功能沒人用。我們在失敗中反思,意識到需求還得從日常工作中去挖掘,平臺上每個(gè)功能模塊都必須解決用戶的痛點(diǎn)?;ヂ?lián)網(wǎng)精神唯快不破,要圍繞“快”找痛點(diǎn)。早期開發(fā)和運(yùn)維的合作中,更多的是郵件、IM及當(dāng)面溝通,跨團(tuán)隊(duì)的溝通成本是第一個(gè)痛點(diǎn)。初期平臺建設(shè)中,我們從加速流程開始進(jìn)行摸索,以“需求任務(wù)流”為核心,將通用需求規(guī)范流程,統(tǒng)一需求提交頁面,同時(shí)盡量為用戶提供選項(xiàng),而不是隨意填寫,盡量減少溝通成本,同時(shí)為完全自動(dòng)化打好基礎(chǔ)。由于完整的自動(dòng)化流程開發(fā)成本比較高,初期我們還“投機(jī)取巧”,用戶提交需求以后,只是把格式化的郵件發(fā)送給運(yùn)維工程師。運(yùn)維工程師使用半自動(dòng)化工具干活,完成后再通過平臺任務(wù)流告知用戶結(jié)果,手工操作的部分是隱藏在平臺后面的,用戶不得而知。就 用這種方式,我們的平臺積累了不少用戶和口碑。之后我們將日常需求分層、分類:主機(jī)類包括主機(jī)申請、賬號授權(quán)、軟件部署等;Web類包括配置文件管理、域名管理等;DB類包括建庫、建表、SQL審核、授權(quán)等。再攻克技術(shù)難點(diǎn)將一個(gè)個(gè)需求實(shí)現(xiàn)完全自動(dòng)化,點(diǎn)點(diǎn)鼠標(biāo)解決問題。 關(guān)于需求任務(wù)流,還有個(gè)小插曲,標(biāo)準(zhǔn)的任務(wù)流由提交、審核、駁回/通過組成。但這個(gè)流程太死板,例如用戶提交的一個(gè)需求,在審核的過程中有待商榷,運(yùn)維工程師會和開發(fā)工程師 溝通,最終達(dá)成一致意見即可,而如果按標(biāo)準(zhǔn)流程需要駁回再提交。為了讓用戶少一次操作,我們增加了管理員可編譯功能。有些同事反對這樣做,覺得不符合常 理。不過有時(shí)候常理是需要結(jié)合實(shí)際場景打破的,就為了讓用戶使用更簡單。 近期為了進(jìn)一步提升項(xiàng)目試錯(cuò)階段的速度,我們在平臺上推出了一個(gè)新功能:“項(xiàng)目孵化器”。以典型的Web業(yè)務(wù)為例,以往,申請Web Server、賬號、數(shù)據(jù)庫實(shí)例、負(fù)載均衡等是提給運(yùn)維最基本的需求,每一步都是時(shí)間成本。使用“項(xiàng)目孵化器”可以最大限度解決這個(gè)痛點(diǎn),只需在平臺上進(jìn) 行兩個(gè)步驟:第一步填寫業(yè)務(wù)名稱,預(yù)估峰值QPS;第二步選用MySQL、MongoDB、Redis等相關(guān)數(shù)據(jù)庫資源。兩步之后,Web Server、數(shù)據(jù)庫實(shí)例等所需資源會瞬間展示在用戶面前,同時(shí)包管理、配置文件管理、代碼發(fā)布系統(tǒng)、監(jiān)控系統(tǒng)等配套輔助功能隨之開通。 與之前的模式相比,效率和規(guī)范化都有明顯提高。說起來很神奇,但實(shí)現(xiàn)理念很簡單,我們提煉日常項(xiàng)目中的通用方案,構(gòu)建資源池,在項(xiàng)目發(fā)展初期最小量匹配資源。在孵化器的設(shè)計(jì)階段,我們聽到了很多不同的聲音。例如,讓用戶填信息不夠全面,架構(gòu)太簡單不滿足全部需求,諸如此類問題,讓人頭痛欲裂。經(jīng)過過往項(xiàng)目 分析及用戶調(diào)研,發(fā)現(xiàn)項(xiàng)目尚處于試錯(cuò)階段,快速試錯(cuò)是首要需求。至于項(xiàng)目發(fā)展中衍生出來的需求,可以再用平臺擴(kuò)展功能去解決。 當(dāng)利用孵化器建立一個(gè)試錯(cuò)項(xiàng)目之后,用戶進(jìn)入平臺想看見什么?展現(xiàn)形式如何?還能做什么?這些問題隨之而來。 眾所周知,項(xiàng)目中的關(guān)聯(lián)關(guān)系是個(gè)復(fù)雜的問題,解決不好,就像一盤散沙無法聯(lián)動(dòng)。為了解決此問題,首先我們確定平臺各功能模塊以項(xiàng)目名為主鍵,將項(xiàng)目的域名、負(fù)載均衡、Web Server、數(shù)據(jù)庫、通用基礎(chǔ)服務(wù)等相關(guān)聯(lián)。項(xiàng)目后期各功能模塊的擴(kuò)容可以借助關(guān)聯(lián)關(guān)系自動(dòng)化完成。例如增加一臺Web Server,即可自動(dòng)部署軟件環(huán)境,完成相關(guān)節(jié)點(diǎn)授權(quán)、上傳代碼、測試上線。 展現(xiàn)形式上我們借鑒社交網(wǎng)站的實(shí)現(xiàn)方案,以“我的項(xiàng)目”為中心,用戶進(jìn)入平臺以后默認(rèn)頁展示項(xiàng)目在平臺中用到的各功能模塊信息,例如域名、主機(jī)數(shù)量、數(shù)據(jù)庫實(shí)例和監(jiān)控指標(biāo)等。做到信息清晰可見,操控簡單易用。 在平臺建設(shè)中,我們一直遵循兩個(gè)準(zhǔn)則:第一,把事情由復(fù)雜變簡單;第二,給用戶極致的用戶體驗(yàn)。所謂極致,就是要超出用戶的預(yù)期,但只有挖掘用戶潛在的需求,才能做出超出預(yù)期的功能。傳統(tǒng)的運(yùn)維模式,大多是開發(fā)工程師提需求,運(yùn)維工程師滿足需求,運(yùn)維工程師主動(dòng)推進(jìn)的意識不夠。 360的文化中有很重要的一點(diǎn)是Ownership,一個(gè)項(xiàng)目的成功與失敗,運(yùn)維工程師是有責(zé)任的,因此需要在日常工作中時(shí)刻提醒自己“這個(gè)項(xiàng)目是我的,為了讓項(xiàng)目變得更好,我們需要主動(dòng)思考,為開發(fā)工程師提供更多的增值服務(wù)”。例如一個(gè)項(xiàng)目上線前,會默認(rèn)部署日志收集模塊,收集匯總后進(jìn)行訪問日志自動(dòng)化分析,以時(shí)間維度展示訪問量走勢,同時(shí)輔以IP地址分析模塊展示地域及運(yùn)營商分布。同時(shí)基于訪問日志狀態(tài)碼做進(jìn)一步的頁面分析,然后以日、周、月維度生成一份體檢報(bào)告,以及應(yīng)對方案推送給開發(fā)工程師。這些增值服務(wù)是超出預(yù)期的,拉近了開發(fā)工程師和我們的距離,一起去探討、改進(jìn),做出更多有利于項(xiàng)目發(fā)展的功能。 結(jié)束語 運(yùn)維工作在一家公司中至關(guān)重要,但傳統(tǒng)的運(yùn)維模式一定程度上限制了運(yùn)維工程師的技術(shù)發(fā)展,更抑制了創(chuàng)新思維,我們需要利用運(yùn)維“寬泛技術(shù)”定位的優(yōu)勢開拓思路。例如運(yùn)維工作需要和很多開發(fā)團(tuán)隊(duì)合作,協(xié)助架構(gòu)設(shè)計(jì),在這個(gè)過程中會接觸到很多開發(fā)團(tuán)隊(duì)的技術(shù)積累,可以把各家之所長進(jìn)行聚合,將一些基礎(chǔ)服務(wù)進(jìn)行平臺化改造,資源共享。也可以根據(jù)項(xiàng)目的需要,主動(dòng)做技術(shù)研究,將基礎(chǔ)服務(wù)做成一個(gè)個(gè)小產(chǎn)品,提供給開發(fā)團(tuán)隊(duì)使用,幫助項(xiàng)目縮短研發(fā)周期,穩(wěn)定發(fā)展。在當(dāng)今技術(shù)背景下,運(yùn)維工程師應(yīng)該在紅海中尋找藍(lán)海的思維模式,培養(yǎng)產(chǎn)品觀,由外至內(nèi)陸思考,突破傳統(tǒng)運(yùn)維的壁壘,開拓創(chuàng)新。 附:360IT系統(tǒng)建設(shè)與運(yùn)維(白健) Tips:輸入關(guān)鍵字IT運(yùn)維以獲得更多相關(guān)內(nèi)容 CIO之家-踐行,見未來
|
|