天天看點

運維工程師的發展和前景

運維工程師的職責和前景

運維中關鍵技術點解剖:1 大量高并發網站的設計方案 ;2 高可靠、高可伸縮性網絡架構設計;3 網站安全問題,如何避免被黑?4 南北互聯問題,動态CDN解決方案;5 海量資料存儲架構

一、什麼是大型網站運維?

首先明确一下,全文所講的”運維“是指:大型網站運維,與其它運維的差別還是蠻大的;然後我們再對大型網站與小型網站進行範圍定義,此定義主要從運維複雜 性角度考慮,如網站規範、知名度、伺服器 量級、pv量等考慮,其它因素不是重點;是以,我們先定義伺服器規模大于1000台,pv每天至少上億(至少國内排名前10),如sina、baidu、 QQ,51.com等等;其它小型網站可能沒有真正意義上的運維工程師,這與網站規範不夠和成本因素有關,更多的是集合網絡、系統 、開發工作于一身的“複合性人才”,就如有些公司把一些合同采購都納入了運維職責範圍,還有如IDC網絡規劃也納入運維職責。是以,非常重要一定需要明 白:運維對其它關聯工種必須非常了解熟悉:網絡、系統、系統開發、存儲,安全,DB等;我在這裡所講的運維工程師就是指專職運維工程師。

我們再來說說一般産品的“出生”流程:

1、首先公司管理層給出指導思想,PM定位市場需求(或copy成熟應用)進行調研、分析、最終給出詳細設計。

2、架構師根據産品設計的需求,如pv大小預估、伺服器規模、應用架構等因素完成網絡規劃,架構設計等(基本上對網絡變動不大,除非大項目)

3、開發工程師将設計code實作出來、測試工程師對應用進行測試。

4、好,到運維工程師出馬了,首先明确一點不是說前三步就與運維工作無關了,恰恰相反,前三步與運維關系很大:應用的前期架構設計、軟/ 硬體資源評估申請采購、應用設計性能隐患及評估、IDC、服務性能\安全調優、伺服器系統級優化(與特定應用有關)等都需運維 全程參與,并主導整個應用上線項目;運維工程師負責産品伺服器上架準備工作,伺服器系統安裝、網絡、IP、通 用工具集安裝。運維工程師還需要對上線的應用系統架構是否合理、是否具備可擴充性、及安全隐患等因素負責,并負 責最後将産品(程式)、網絡、系統三者進行拼接并最優化的組合在一起,最終完成産品上線提供使用者使用,并周而複使:需 求->開發(更新)->測試->上線(性能、安全問題等之前預估外的問題随之慢慢就全出來了)在這裡提一點:網站開發模式與傳統軟 件開發完全不一樣,網站一天開發上線1~5個更新版本是家常便飯,使用者體驗為王嘛,如果某個線上問題像M$ 需要1年解決,使用者早跑光了;應用上線後,運維工作才剛開始,具體工作可能包括:更新版本上線工作、服務監控、應用狀态統計、日常服務狀态巡檢、突 發故障處理、服務日常變更調整、叢集管理、服務性能評估優化、資料庫管理優化、随着應用PV增減進行應用架構的伸縮、安全、運維開發工作:

a 、盡量将日常機械性手工工作通過工具實作(如服務監控、應用狀态統計、服務上線等等),提高效率。

b、解決現實中服務存在的問題,如高可靠性、可擴充性問題等。

c、大規模叢集管理工具的開發,如1萬台機器如何在1分鐘内完成密碼修改、或運作指定任務?2000台伺服器如何快速安裝操作 系統?各分布式IDC、存儲叢集中數PT級的資料如何快速的存儲、共享、分析?等一系列挑戰都需運維工程師的努力。

在此說明一下其它配合工種情況,在整個項目中,前端應用對于網絡/系統工程師來說是黑匣子,同時開發工程師職責隻是負責完成應用的功能性開發,并對應用本 身性能、安全性等應用本身負責,它不負責或關心網絡/系統架構方面事宜,當然軟/硬體采購人員等事業部其它同僚也不會關心這些問題,各司其職,但項目的核心是運維工程師~!所有其它部門的橋梁。

上面說了很多,我想大家應該對運維有一些概念了,在此打個比方吧,如果我們是一輛高速行駛在高速公路上的汽車,那運維工程師就是司機兼維修工,這個司機不 簡單,有時需要在高速行駛過程中換輪胎、并根據道路情況換檔位、當汽車速度越來越快,汽車本身不能滿足高速度時對汽車性能調優或零件更新、高速行進中解決 汽車故障及性能問題、時刻關注前方安全問題,并先知先覺的采取規避手段。這就是運維工作~!

最後說一下運維工程師的職責:”確定線上穩定“,看似簡單,但實屬不容易,運維工程師必須在諸多不利因素中進行權衡: 新産品模式對現有架構及技術的沖擊、産品高頻度的更新帶來的線上BUG隐患、運維自動化管理承度不高導緻的人為失誤、IT行業追求的高效率導緻流程執行上 的缺失、使用者增漲帶來的性能及架構上的壓力、IT行業寬松的技術管理文化、創新風險、網際網路安全性問題等因素,都會是網站穩定的大敵,運維工程師必須把控 好這最後一關,需具體高度的責任感、原則性及協調能力,如果能做到各因素的最佳平衡,那就是一名優秀的運維工程師了。

另外在此聊點題外話,我在這裡看到有很多人要sina、QQ、baidu,51.com等聊自已的運維方面的經驗,其實這對于它們有點免為其難:

a、各公司自已網絡架構、規模、或多或少還算是公司的核心秘密,要保密,另外,對于大家所熟知的通用軟體、架構,由于很多公司會根據自已實際業務需要,同 時因為原版性能、安全性、已知bug、功能等原因,進行過二次開發(如apache,php,mysql ),作業系統核心也會根據不同業務類型進行定制的,如某些應用屬于運算型、某些是高IO型、或大存儲大記憶體型。根據這些特點進行核心優化定制,如sina 就在 memcache上進行過二次開發,搞出了一個MemcacheDB,具體做得如何我們不談,但開源了,是值得稱贊的,國内公司對于開源基本上是索取,沒 有貢獻;另外,伺服器也不是大家所熟知的型号,根據業務特點,大部份都是找DELL/HP/ibm進行過定制;另外,在分布式儲存方面都有自已解決方案, 要不就是使用現成開源hadoop等解決方案,或自已開發。但90%都是借鑒google GFS的思想:分布式存儲、計算、大表。

b、各公司業務方向不一樣,會導緻運維模式或方法都不一樣,如51.com和baidu運維肯定差別很大,因為他們業務模式決定了其架構、伺服器量級、 IDC分布、網絡結構、通用技術都會不一樣,主打新聞門戶的sina與主打sns的51.com運維模式差異就非常大,甚至職責都不大一樣;但有一點,通 用技術及大緻架構上都大同小異,大家不要太神化,更多的公司隻是玩壘積木的遊戲罷了,沒什麼技術含量。

c、如上面所講,目前大型網站運維還處于幼年時期理念和經驗都比較零散,沒有成熟的知識體系,可能具體什麼是運維,大家都要先思索一番,或壓根沒想過,真 正讨論也隻是運維工作的冰山一角,局限于具體技術細節,或某某著名網站大的架構,真正運維體系化東西沒有,這也許是目前網上運維相關資料 比較少的原故吧。或者也是國内運維人員比較難招,比較牛的運維工程師比較少見的原因之一吧。

二、運維工作師需要什麼樣的技能及素質

做為一名運維工程師需要什麼樣的技能及素質呢,首先說說技能吧,如大家上面所看到,運維是一個集多IT工種技能與一身的崗位,對系統->網絡 ->存儲->協定->需求->開發->測試->安全等各環節都需要了解一些,但對于某些環節需熟悉甚至精通,如系統 (基本作業系統的熟悉使用,*nix,windows ..)、協定、系統開發(日常很重要的工作是自動運維化相關開發、大規模叢集工具開發、管理)、通用應用(如lvs、ha、web server 、db、中間件、存儲等)、網絡,IDC拓樸架構;

技能方面總結以下幾點:

1、開發能力,這點非常重要,因為運維工具都需要自已開發,開發語言:c/c++(必備其中之一)、perl、python、php(其中之一)、 shell(awk,sed,expect….等),需要有過實際開發經驗,否則工作會非常痛苦。

2、通用應用方面需要了解:作業系統(目前國内主要是linux、bsd)、webserver相關 (nginx,apahe,php,lighttpd,java。。。)、資料庫(mysql,oralce)、其它雜七八拉的東東。。。系統優化,高可 靠性。。。這些隻是加分項,不需必備,可以邊工作邊慢慢學,這些東西都不難。當然在運維中,有些是有分工偏重點不一樣。

3、系統、網絡、安全,存儲,CDN,DB等需要相當了解,知道其相關原理。

個人素質方面:

1、溝通能力、團隊協作:運維工作跨部門、跨工種工作很多,需善于溝通、并且團隊協作能力要強;這應該是現代企業的基本素質要求了,不多說。

2、工作中需膽大心細:膽大才能創新、不走尋常路,特别對于運維這種新的工種,更需創新才能促進發展;心細,運維工程師是網站admin,最高線上權限 者,一不小心就會遺憾終生或打入十八層地獄。

3、主動性、執行力、精力旺盛、抗壓能力強:由于IT行業的特性,變化快;往往計劃趕不上變化,運維工作就更突出了,比如國内各大公司伺服器往往是全國各 地,哪裡便宜成本效益高,就那往搬,進行大規模服務遷移(牽扯的伺服器成百上千台),這是一個非常頭痛的問題;往往時間 非常緊迫,如限1周内完成,這種情況下,運維工程師的主動性及執行力就有很高的要求了:計劃、方案、服務無縫遷移、機器搬遷上架、環境準備、安全評估、性 能評估、基建、各關聯部門扯皮,7X24小緊急事故響應等。

4、其它就是一些基本素質了:頭腦要靈光、邏輯思維能力強、為人謙虛穩重、親和力、樂于助人、有大局觀。

5、最後一點,做網站運維需要有探索創新精神,通過創新型思維解決現實中的問題,因為這是一個處于幼年的職業(國外也一樣,但比國内起步早點),沒有成熟 體系或方法論可以借鑒,隻能靠大家自已摸索努力。

三、怎樣才算是一個合格的運維工程師

1、保證服務達到要求的線上标準,如99.9%;保證線上穩定,這是運維工程師的基本責職所在。

2、不斷的提升應用的可靠性與健壯性、性能優化、安全提升;這方面非常考驗主動性和創新思維。

3、網站各層面監控、統計的覆寫度,軟體、硬體、運作狀态,能監控的都需要監控統計,避免監控死角、并能實時了解應用 的運轉情況。

4、通過創新思維解決運維效率問題;目前各公司大部份運維主要工作還是依賴人工操作幹預,需要盡可能 的解放雙手。

5、運維知識的積累與沉澱、文檔的完備性,運維是一個經驗性非常強的崗位,好的經驗與陷阱都需積累下來,避免重複性範 錯。

6、計劃性和執行力;工作有計劃,計劃後想法設法達到目标,不找借口。

7、自動化運維;能對日常機械化工作進行提煉、設計并開發成工具、系統,能讓系統自動完成的盡量依靠系統;讓大家更多 的時間用于思考、創新思維、做自已喜歡的事情。

以上隻是技術上的一些層面,當然個人意識也是很重要的。

四、運維職業的迷惘、現狀與發展前景

運維崗位不像其它崗位,如研發工程師、測試工程師等,有非常明确的職責定位及職業規劃,比較有職業認同感與成就感;而運維工作可能給人的感覺是哪方面都了 解一些,但又都比上專職工程師更精通、感覺平時被關注度比較低(除非線上出現故障),慢慢的大家就會迷惘,對職業發展産生困惑,為什麼會有這種現象呢?除 了職業本身特點外,主要還是因為對運維了解不深入、做得不深入導緻;其實這個問題其它崗位也會出現,但我發現運維更典型,更容易出現這個問 題;

針對這個問題我談一下網站運維的現狀及發展前景(也在思考中,可能不太深入全面,也請大家斧正補充)

運維現狀:

繼續閱讀