門戶網(wǎng)站運維經(jīng)驗談
原文地址:http://bbs2.chinaunix.net/viewthread.php?tid=1281178 (51CTO編輯進行了部分整理)
對于網(wǎng)站運維,感覺大家還是比較迷惘與不解,確實,這是一個新興崗位;近來閑而無事,在此結(jié)合自已以往的一些經(jīng)歷,與大家先共同探討一下“什么是門戶網(wǎng)站運維”? 以下是自已的一些經(jīng)驗和感受請大家斧正,希望和大家一起探討,共同進步。
51CTO編輯推薦:SA,神仙與裝機男:運維的工作到底啥樣兒?
一、什么是門戶網(wǎng)站運維?
首先明確一下,全文所講的”運維“是指:門戶網(wǎng)站應(yīng)用運維,與其它運維如網(wǎng)絡(luò)、系統(tǒng)的區(qū)別還是蠻大的;然后我們再對大型網(wǎng)站與小型網(wǎng)站進行范圍定義,此定義主要從運維復(fù)雜性角度考慮,如網(wǎng)站規(guī)范、知名度、服務(wù)器量級、pv量等考慮,其它因素不是重點;因此,我們先定義服務(wù)器規(guī)模大于1000臺,pv每天至少上千萬(至少國內(nèi)排名前20),如sina、alibaba、sohu、baidu、網(wǎng)易等等。
其它小型網(wǎng)站可能沒有真正意義上的運維工程師,這與網(wǎng)站規(guī)范不夠和成本因素有關(guān),更多的是集合網(wǎng)絡(luò)、系統(tǒng)、開發(fā)工作于一身的“復(fù)合性人才”,就如本版有些同僚將公司的合同采購都納入了運維職責范圍,還有如IDC網(wǎng)絡(luò)規(guī)劃也納入運維職責,這是網(wǎng)絡(luò)工程師的工作,我們就不要搶人家飯碗了,但是,有件事非常重要一定需要明白:網(wǎng)站應(yīng)用運維對其它關(guān)聯(lián)工種必須非常了解熟悉:網(wǎng)絡(luò)運維、系統(tǒng)運維、應(yīng)用開發(fā)、內(nèi)容;但這些非自已的本職工作,我在這里所講的運維工程師就是指專職應(yīng)用運維工程師。
我們再來說說一個般產(chǎn)品的“出生”流程:
1、首先公司BOSS層給出指導思想,PM定位市場需求(或copy成熟應(yīng)用)進行調(diào)研、分析、最終給出詳細設(shè)計
2、開發(fā)工程師將設(shè)計code實現(xiàn)出來、測試工程師對應(yīng)用進行測試(同一產(chǎn)品事業(yè)部)
3、網(wǎng)絡(luò)\系統(tǒng)工程師根據(jù)產(chǎn)品設(shè)計的需求,如pv大小預(yù)估、服務(wù)器規(guī)模、應(yīng)用架構(gòu)等因素完成網(wǎng)絡(luò)規(guī)劃及設(shè)備上的調(diào)整(基本上對網(wǎng)絡(luò)變動不大,除非大項目)、SA系統(tǒng)工程師負責產(chǎn)品服務(wù)器上架準備工作,服務(wù)器系統(tǒng)安裝、網(wǎng)絡(luò)、IP、通用工具集安裝
4、好,到運維工程師出馬了。
首先明確一點不是說前三步就與運維工作無關(guān)了,恰恰相反,前三步與運維關(guān)系很大:應(yīng)用的前期架構(gòu)設(shè)計、軟/硬件資源評估申請采購、應(yīng)用設(shè)計性能隱患及評估、IDC、服務(wù)性能\安全調(diào)優(yōu)、服務(wù)器系統(tǒng)級優(yōu)化(與特定應(yīng)用有關(guān))等都需運維全程參與,并主導整個應(yīng)用上線項目;運維工程師需要對上線的應(yīng)用系統(tǒng)架構(gòu)是否合理、是否具備可擴展性、及安全隱患等因素負責,并負責最后將產(chǎn)品(程序)、網(wǎng)絡(luò)、系統(tǒng)三者進行拼接并最優(yōu)化的組合在一起,最終完成產(chǎn)品上線提供用戶使用,并周而復(fù)使:需求->開發(fā)(升級)->測試->上線(性能、安全問題等之前預(yù)估外的問題隨之慢慢就全出來了)在這里提一點:網(wǎng)站開發(fā)模式與傳統(tǒng)軟件開發(fā)完全不一樣,網(wǎng)站一天開發(fā)上線1~5個升級版本是家常便飯,用戶體驗為王嘛,如果某個線上問題像M$需要1年解決,用戶早跑光了。
應(yīng)用上線后,運維工作才剛開始,具體工作可能包括:升級版本上線工作、服務(wù)監(jiān)控、應(yīng)用狀態(tài)統(tǒng)計、日常服務(wù)狀態(tài)巡檢、突發(fā)故障處理、服務(wù)日常變更調(diào)整、集群管理、服務(wù)性能評估優(yōu)化、數(shù)據(jù)庫管理優(yōu)化(大于50臺)、隨著應(yīng)用PV增減進行應(yīng)用架構(gòu)的伸縮、安全、運維開發(fā)工作:
a 、盡量將日常機械性手工工作通過工具實現(xiàn)(如服務(wù)監(jiān)控、應(yīng)用狀態(tài)統(tǒng)計、服務(wù)上線等等),提高效率
b 、解決現(xiàn)實中服務(wù)存在的問題,如高可靠性、可擴展性問題等,
c、大規(guī)模集群管理工具的開發(fā),如1萬臺機器如何在1分鐘內(nèi)完成密碼修改、或運行指定任務(wù)?2000臺服務(wù)器如何快速安裝操作系統(tǒng)?各分布式IDC、存儲集群中數(shù)BT級的數(shù)據(jù)如何快速的存儲、共享、分析?等一系列挑戰(zhàn)都需運維工程師的努力。
在此說明一下其它配合工種情況,在整個項目中,前端應(yīng)用對于網(wǎng)絡(luò)/系統(tǒng)工程師來說是黑匣子,同時開發(fā)工程師職責只是負責完成應(yīng)用的功能性開發(fā),并對應(yīng)用本身性能、安全性等應(yīng)用本身負責,它不負責或關(guān)心網(wǎng)絡(luò)/系統(tǒng)架構(gòu)方面事宜,當然軟/硬件采購人員等事業(yè)部其它同事也不會關(guān)心這些問題,各司其職,但項目的核心是運維工程師~!所有其它部門的橋梁
上面說了很多,我想大家應(yīng)該對運維有一些概念了,在此打個比方吧,如果我們是一輛高速行駛在高速公路上的汽車,那運維工程師就是司機兼維修工,這個司機不簡單,有時需要在高速行駛過程中換輪胎、并根據(jù)道路情況換檔位、當汽車速度越來越快,汽車本身不能滿足高速度時對汽車性能調(diào)優(yōu)或零件升級、高速行進中解決汽車故障及性能問題、時刻關(guān)注前方安全問題,并先知先覺的采取規(guī)避手段……這就是運維工作~!
最后說一下運維工程師的職責:“確保線上穩(wěn)定”,看似簡單,但實屬不容易。運維工程師必須在諸多不利因素中進行權(quán)衡:新產(chǎn)品模式對現(xiàn)有架構(gòu)及技術(shù)的沖擊、產(chǎn)品高頻度的升級帶來的線上BUG隱患、運維自動化管理承度不高導致的人為失誤、IT行業(yè)追求的高效率導致流程執(zhí)行上的缺失、用戶增漲帶來的性能及架構(gòu)上的壓力、IT行業(yè)寬松的技術(shù)管理文化、創(chuàng)新風險、互聯(lián)網(wǎng)安全性問題等因素,都會是網(wǎng)站穩(wěn)定的大敵,運維工程師必須把控好這最后一關(guān),需具體高度的責任感、原則性及協(xié)調(diào)能力,如果能做到各因素的最佳平衡,那就是一名優(yōu)秀的運維工程師了。
另外在此聊點題外話,我在本版看到有很多人要sina、網(wǎng)易、sohu、baidu等聊自已的運維方面的經(jīng)驗,其實這對于它們有點免為其難:
a、各公司自已網(wǎng)絡(luò)架構(gòu)、規(guī)模、或多或少還算是公司的核心秘密,要保密;另外,對于大家所熟知的通用軟件、架構(gòu),由于很多公司會根據(jù)自已實際業(yè)務(wù)需要,同時因為原版性能、安全性、已知bug、功能等原因,進行過二次開發(fā)(如apache,php,mysql...),操作系統(tǒng)內(nèi)核也會根據(jù)不同業(yè)務(wù)類型進行定制的,如某些應(yīng)用屬于運算型、某些是高IO型、或大儲存大內(nèi)存型……根據(jù)這些特點進行內(nèi)核優(yōu)化定制,如sina就在memcache上進行過二次開發(fā),搞出了一個memcache DB,具體做得如何我們不談,但開源了,是值得稱贊的,國內(nèi)公司對于開源基本上是索取,沒有貢獻;另外,服務(wù)器也不是大家所熟知的型號,根據(jù)業(yè)務(wù)特點,大部份都是找DELL/HP/sun/ibm進行過定制;另外,在分布式儲存方面都有自已解決方案,要不就是使用現(xiàn)成開源hadoop等解決方案,或自已開發(fā)。但90%都是借鑒google GFS的思想:分布式存儲、計算、大表。
b、各公司業(yè)務(wù)方向不一樣,會導致運維模式或方法都不一樣,如alibaba和baidu運維肯定區(qū)別很大,因為他們業(yè)務(wù)模式?jīng)Q定了其架構(gòu)、服務(wù)器量級、IDC分布、網(wǎng)絡(luò)結(jié)構(gòu)、通用技術(shù)都會不一樣,主打新聞門戶的sina與主打網(wǎng)游的盛大運維模式差異就非常大,甚至職責都不大一樣;但有一點,通用技術(shù)及大致架構(gòu)上都大同小異,大家不要太神化,更多的公司只是玩壘積木的游戲罷了,沒什么技術(shù)含量。
c、如我上面所講,目前門戶網(wǎng)站運維還處于幼年時期理念和經(jīng)驗都比較零散,沒有成熟的知識體系,我相信大家也講不出所以然來(我現(xiàn)在也中抓破腦袋擠出這點字,呵呵),可能具體什么是運維,大家都要先思索一番,或壓根沒想過,真正討論也只是運維工作的冰山一角,局限于具體技術(shù)細節(jié),或某某著名網(wǎng)站大的框架,真正運維體系化東西沒有,這也許是目前網(wǎng)上運維相關(guān)資料比較少的原故吧。
#p#
二、運維工作師需要什么樣的技能及素質(zhì)
做為一名運維工程師需要什么樣的技能及素質(zhì)呢,首先說說技能吧,如大家上面所看到,運維是一個集多IT工種技能與一身的崗位,對系統(tǒng)->網(wǎng)絡(luò)->存儲->協(xié)議->需求->開發(fā)->測試->安全等各環(huán)節(jié)都需要了解一些,但對于某些環(huán)節(jié)需熟悉甚至精通,如系統(tǒng)(基本操作系統(tǒng)的熟悉使用,*nix,windows..)、協(xié)議、開發(fā)(日常很重要的工作是自動運維化相關(guān)開發(fā)、大規(guī)模集群工具開發(fā)、管理)、通用應(yīng)用(如lvs、ha、web server、db、中間件、存儲等。。。)、網(wǎng)絡(luò)(至少要對應(yīng)用所處網(wǎng)絡(luò)環(huán)境非常了解);
技能方面總結(jié)以下幾點:
1、開發(fā)能力,這點非常重要,因為運維工具都需要自已開發(fā),開發(fā)語言:c/c++(必備其中之一)、perl、python、php(其中之一)、shell(awk,sed,expect....等),需要有過實際開發(fā)經(jīng)驗,否則工作會非常痛苦
2、通用應(yīng)用方面需要了解:操作系統(tǒng)(目前國內(nèi)主要是linux、bsd)、webserver相關(guān)(highttp,apahe,php,tomcat,java。。。)、數(shù)據(jù)庫(mysql,oralce)、其它雜七八拉的東東,如系統(tǒng)優(yōu)化,高可靠性等等。這些只是加分項,不需必備,可以邊工作邊慢慢學,這些東西都不難。當然在運維中,有些是有分工偏重點不一樣。如可能有專門的運維DBA
3、系統(tǒng)、網(wǎng)絡(luò)、安全等需要有所了解,至少知道其原理
(51CTO編輯注:本站鮮橙加冰的《運維人員應(yīng)該掌握哪些常用技術(shù)》一文也寫得相當不錯,值得閱讀)
個人素質(zhì)方面:
1 溝通能力、團隊協(xié)作:運維工作跨部門、跨工種工作很多,需善于溝通、并且團隊協(xié)作能力要強;這應(yīng)該是現(xiàn)代企業(yè)的基本素質(zhì)要求了,不多說了。。。
2 工作中需膽大心細:膽大才能創(chuàng)新、不走尋常路,特別對于運維這種新的工種,更需創(chuàng)新才能促進發(fā)展;心細,運維工程師是網(wǎng)站admin,最高線上權(quán)限者,一不小心就會遺憾終生或打入十八層地獄……
3 主動性、執(zhí)行力、精力旺盛、抗壓能力強:由于IT行業(yè)的特性,變化快;往往計劃趕不上變化,運維工作就更突出了,比如國內(nèi)各大公司服務(wù)器往往是全國各地,哪里便宜性價比高,就那往搬,進行大規(guī)模服務(wù)遷移(牽扯的服務(wù)器成百上千臺),這是一個非常頭痛的問題;往往時間非常緊迫,如限1周內(nèi)完成,要命~~~,這種情況下,運維工程師的主動性及執(zhí)行力就有很高的要求了:計劃、方案、服務(wù)無縫遷移、機器搬遷上架、環(huán)境準備、安全評估、性能評估、基建、各關(guān)聯(lián)部門扯皮……7X24小緊急事故響應(yīng)等。
4 其它就是一些基本素質(zhì)了:頭腦要靈光、邏輯思維能力強、為人謙虛穩(wěn)重、親和力、樂于助人、有大局觀
5 最后一點,做網(wǎng)站運維需要有探索創(chuàng)新精神,通過創(chuàng)新型思維解決現(xiàn)實中的問題,因為這是一個處于幼年的職業(yè)(國外也一樣,但比國內(nèi)起步早點),沒有成熟體系或方法論可以借鑒,只能靠大家自已摸索努力
#p#
三、運維工程師的職責
1、保證服務(wù)達到要求的線標準,如99.9%;保證線上穩(wěn)定,如,網(wǎng)絡(luò)/系統(tǒng)運維工程師對網(wǎng)絡(luò)、系統(tǒng)穩(wěn)定負責,那應(yīng)用運維就需對線上應(yīng)用的穩(wěn)定負責。
2、不斷的提升應(yīng)用的可靠性與健壯性、性能優(yōu)化、安全提升;這方面非常考驗主動性、和創(chuàng)新思維
3、網(wǎng)站各層面實時狀態(tài)的監(jiān)控、統(tǒng)計的覆蓋度;軟件、硬件、運行狀態(tài),能監(jiān)控的都需要監(jiān)控統(tǒng)計,避免監(jiān)控死角、并能實時了解應(yīng)用的運轉(zhuǎn)情況。
4、通過創(chuàng)新思維解決運維效率問題;目前各公司大部份運維主要工作還是依賴人工操作干預(yù),需要盡可能的解放雙手
5、運維知識的積累與沉淀、文檔的完備性,運維是一個經(jīng)驗性非常強的崗位,好的經(jīng)驗與陷阱都需積累下來,避免重復(fù)性范錯。
6、成本控制;通過技術(shù)手段提升硬件承載、架構(gòu)優(yōu)化,如虛擬化技術(shù),節(jié)省硬件開支。
7、自動化運維;能對日常機械化工作進行提煉、設(shè)計并開發(fā)成工具、系統(tǒng),能讓系統(tǒng)自動完成的盡量依靠系統(tǒng);讓大家更多的時間用于思考、創(chuàng)新思維、做自已喜歡的事情。
#p#
四、運維職業(yè)的迷惘、現(xiàn)狀與發(fā)展前景
應(yīng)用運維不像其它崗位,如網(wǎng)絡(luò)、系統(tǒng)、安全運維崗位及研發(fā)工程師、測試工程師等,有非常明確的職責定位、職業(yè)規(guī)劃、社會認同、比較有職業(yè)成就感;而應(yīng)用運維工作可能給人的感覺是系統(tǒng)/應(yīng)用哪方面都了解一些,但又都比上專職工程師更精通、感覺平時被關(guān)注度比較低(除非線上出現(xiàn)故障),慢慢的大家就會迷惘,對職業(yè)發(fā)展產(chǎn)生困惑,為什么會有這種現(xiàn)象呢? 除了職業(yè)本身特點外,主要還是因為對運維了解不深入、做得不深入導致、新職位還沒得到社會廣泛認知及認同;其實這個問題其它崗位也會出現(xiàn),但我發(fā)現(xiàn)運維更典型,更容易出現(xiàn)這個問題;
針對這個問題我談一下網(wǎng)站運維的現(xiàn)狀及發(fā)展前景(也在思考中,可能不太深入全面,也請大家斧正補充)
運維現(xiàn)狀:
1、處于剛起步的初級階段,各大公司有此專職,但重視或重要承度不高,可替代性強,工作職責也有所不同;小公司更多是由其它崗位來兼顧做這一塊工作,沒有專職,也不可能做得深入
2、技術(shù)層次比較低;主要處于技術(shù)探索、積累階段,沒有型成體系化的理念、技術(shù)。
3、體力勞動偏大;這個問題主要與第二點有關(guān)系,很多事情還是依靠人力進行,沒有完成好的提練,對于大規(guī)模集群沒有成熟的自動化管理方法,在此說明一下,大規(guī)模集群與運維工作是息息相關(guān)的如果只是百十來臺機器,那就沒有運維太大的生存空間了
4、優(yōu)秀運維人才的極度缺乏;目前各大公司基本上都靠自已培養(yǎng),這個現(xiàn)狀導致行業(yè)內(nèi)運維人才的流動性非常低,非常多好的技術(shù)都局限在各大公司內(nèi)部,如google 50萬臺機器如果科學的管理?或者國內(nèi)top 10 的一些經(jīng)驗,這些經(jīng)驗是非常有價值的東西并決定了一個公司的核心競爭力;這些問題進而導致業(yè)內(nèi)先進運維技術(shù)的流通、貫通、與借簽,并最終將限制了運維發(fā)展。
5、很多優(yōu)秀的運維經(jīng)驗都掌握在大公司手中;這不在于公司的技術(shù)實力,而在于大公司的技術(shù)規(guī)模、海量PV、硬件規(guī)模足夠大,如baidu可怕的流量、海量數(shù)據(jù)~~~~這些因素決定了他們遇到的問題都是其它中/小公司還沒有遇到的,或即將遇到。但大公司可能已有很好的解決方案或系統(tǒng)
發(fā)展前景:
1、從行業(yè)角度來看,隨著中國互聯(lián)網(wǎng)的高速發(fā)展(目前中國網(wǎng)民已躍升為全球第一)、網(wǎng)站規(guī)模越來越來大、架構(gòu)越來越復(fù)雜;對專職網(wǎng)站運維工程師、網(wǎng)站架構(gòu)師的要求會越來越急迫,特別是對有經(jīng)驗的優(yōu)秀運維人才需求量大,而且是越老越值錢;目前國內(nèi)基本上都是選擇畢業(yè)生培養(yǎng)(限于大公司),培養(yǎng)成本高,而且沒有經(jīng)驗人才加入會導致公司技術(shù)更新緩慢、影響公司的技術(shù)發(fā)展;當然,畢業(yè)生也有好處:白紙一張,可塑性強,比較認同并容易融入企業(yè)文化
2、從個人角度,運維工程師技術(shù)含量及要求會越來越高,同時也是對公司應(yīng)用、架構(gòu)最了解最熟悉的人、越來越得到重視
3、網(wǎng)站運維將成為一個融合多學科(網(wǎng)絡(luò)、系統(tǒng)、開發(fā)、安全、應(yīng)用架構(gòu)、存儲等)的綜合性技術(shù)崗位,給大家提供一個很好的個人能力與技術(shù)廣度的發(fā)展空間
4、運維工作的相關(guān)經(jīng)驗將會變得非常重要,而且也將成為個人的核心競爭力,具備很好的各層面問題的解決能力及方案提供、全局思考能力等
5、特長發(fā)控和興趣的培養(yǎng);由于運維崗位所接觸的知識面非常廣闊,更容易培養(yǎng)或發(fā)揮出個人某些方面的特長或愛好,如內(nèi)核、網(wǎng)絡(luò)、開發(fā)、數(shù)據(jù)庫等方面,可以做得非常深入精通、成為這方面的專家
6、如果真要以后不想做運維了,轉(zhuǎn)到其它崗位也比較容易,不會有太大的局限性。當然了,你得真正用心去做
7、技術(shù)發(fā)展方向、網(wǎng)站/系統(tǒng)架構(gòu)師
#p#
五、運維關(guān)鍵技術(shù)點解剖
1、 大規(guī)模集群管理問題
首先我們先要明確集群的概念,集群不是泛指各功能服務(wù)器的總合,而是指為了達到某一目的或功能的服務(wù)器、硬盤資源的整合(機器數(shù)大于兩臺),對于應(yīng)用來說它就是一個整體,目前常規(guī)集群可分為:高可用性集群(HA),負載均衡集群(如lvs),分布式儲、計算存儲集群(DFS,如google gfs ,yahoo hadoop),特定應(yīng)用集群(某一特定功能服務(wù)器組合、如db、cache層等),目前互聯(lián)網(wǎng)行業(yè)主要基于這四種類型;對于前兩種類似,如果業(yè)務(wù)簡單、應(yīng)用上post操作比較少,可以簡單的采用四層交換機解決(如f5、foundly),達到服務(wù)高可用/負責均衡的作用,對于資源緊張的公司也有一些開源解決辦法如lvs+ha,非常靈活;對于后兩種,那就考驗公司技術(shù)實力及應(yīng)用特點了,第三種DFS主要應(yīng)用于海量數(shù)據(jù)應(yīng)用上,如郵件、搜索等應(yīng)用,特別是搜索要求就更高了,除了簡單海量存儲,還包括數(shù)據(jù)挖掘、用戶行為分析;如google、yahoo就能保存分析近一年的用戶記錄數(shù)據(jù),而baidu應(yīng)該少于30天、soguo就更少了。。。這些對于搜索準備性、及用戶體驗是至關(guān)重要的。
接下來,我們再談?wù)勅绾慰茖W的管理集群,有以下關(guān)鍵幾點:
I、監(jiān)控
主要包括故障監(jiān)控和性能、流量、負載等狀態(tài)監(jiān)控,這些監(jiān)控關(guān)系到集群的健康運行,及潛在問題的及時發(fā)現(xiàn)與干預(yù);
a、服務(wù)故障、狀態(tài)監(jiān)控:主要是對服務(wù)器自身、上層應(yīng)用、關(guān)聯(lián)服務(wù)數(shù)據(jù)交互監(jiān)控;例如針對前端web server,我們就可以有很多種類型的監(jiān)控,包括應(yīng)用端口狀態(tài)監(jiān)控,便于及時發(fā)現(xiàn)服務(wù)器或應(yīng)用本身是否crash、通過icmp包探測服務(wù)器健康狀態(tài),更上層可能還包括應(yīng)用各頻道業(yè)務(wù)的監(jiān)控,常用方法是采用面業(yè)特征碼進行判斷,或?qū)χ攸c頁面進行簽名,以網(wǎng)站被黑篡改(報警、并自動恢復(fù)被篡改數(shù)據(jù))。。。這些只是一部份,還有N多監(jiān)控方式,依應(yīng)用特點而定,還有一些問題需解決,如集群過大,如何高性能的進行監(jiān)控也是一個現(xiàn)實問題。。。。。
b、其它就是集群狀態(tài)類的監(jiān)控或統(tǒng)計,為我們合理管理調(diào)優(yōu)集群提供數(shù)據(jù)參考、包括服務(wù)瓶頸、性能問題、異常流量、攻擊等問題
II、故障管理
a、硬件故障問題;對于成百上千或上萬機器的N多集群,服務(wù)器死機、硬件故障概率是非常大的,幾乎每時每刻都有服務(wù)硬件問題,死機、硬盤損壞、電源、內(nèi)存、交換機。。。針對這種情況,我們在設(shè)計網(wǎng)站架構(gòu)時需要充分考慮到這些問題,并將其視為常態(tài);更多的依靠應(yīng)用的冗余機制來規(guī)避這種風險,但給系統(tǒng)工程師足夠?qū)捲5奶幚頃r間。(如google不是號稱同時死800臺機器,服務(wù)不會受到任何影響嗎);這就是考驗運維工程師及網(wǎng)站架構(gòu)師功能的地方了,好的設(shè)計能達到google所描述自恢復(fù)能力,如gfs,糟糕的設(shè)計那就是一臺服務(wù)器的死機可能會造成大面積服務(wù)的連鎖故障反映,直接對用戶拒絕響應(yīng)。
b、應(yīng)用故障問題;可能是某一bug被觸發(fā)、或某一性能閥值被超越、攻擊。。。情況不一而定,但重要的一點,是要有對這些問題的預(yù)防性措施,不能想當然,它不會出問題,如真出問題了,如何應(yīng)對? 這需要運維工程師平時做足功夫,包括應(yīng)急響應(yīng)速度、故障處理的科學性、備用方案的有效等
III、自動化
自動化:簡而言之,就是將我們?nèi)粘J謩舆M行的一些工作通過工具,系統(tǒng)自動來完成,解放我們的雙手及枯燥的重復(fù)性勞動,例如:沒有工具前,我們安裝系統(tǒng)需要一臺一臺裸機安裝,如2000臺,可能需要10人/10天,搞爛N張光盤,人力成本更大。。。而現(xiàn)在通過自動化工具,只需幾個簡單命令就能搞定、還有如機器人類程序,自動完成以往每天人工干預(yù)的工作,使其自動完成、匯報結(jié)果,并具備一定的專家系統(tǒng)能力,能做一些簡單的是/非判斷、優(yōu)化選擇等。。。這些好處非常明顯不再多說。。。應(yīng)該說,自動化運維是運維工程師職業(yè)化的一個追求,利私利公,雖然這是一個異常艱巨的任務(wù):不斷變更的業(yè)務(wù)、不規(guī)范化的應(yīng)用設(shè)計、開發(fā)模式、網(wǎng)絡(luò)架構(gòu)變更、IDC變更、規(guī)范變動等因素,都可能會對現(xiàn)有自動化系統(tǒng)產(chǎn)生影響,所以需要模塊化、接口化、變因參數(shù)化等。。。。。。因此,自動化相關(guān)工作,是運維工程師的核心重點工作之一,也是價值的體現(xiàn)
2 大并發(fā)網(wǎng)站的設(shè)計
網(wǎng)站架構(gòu)設(shè)計中,非常重要的一個要素,就是確保架構(gòu)的可擴展性、這是高并發(fā)網(wǎng)站的基石。往往,一個網(wǎng)站的大流量不是與生具來的,而是有一個積累過程~~最后變成巨無霸,包括google、yahoo這種全球流量大戶,而在這個成長過程中所積累的經(jīng)驗才是最值得我們學習的,包括思考方式、問題解決、改進過程。沒有最好的架構(gòu)設(shè)計方案,只有更好。。。,因此在此不會給大家一個終極方案。。。,在此介紹的這些經(jīng)驗,更多的是讓大家真正掌握架構(gòu)設(shè)計方法、理念、靈魂,并真正的能利用到實際中。為了讓大家更易理解,我在此主題討論中將會借用本版”jiang2798 “貼的"google架構(gòu)、youtube架構(gòu)"等經(jīng)典案例和大家分析一下,再談?wù)勔恍┩ㄓ眯栽瓌t及技巧。
高并發(fā)架構(gòu)需滿足的一些因素、要點:
I負載均衡架構(gòu)
首先網(wǎng)站前端需要采用負載均衡群集解決用戶高并發(fā)的響應(yīng),目前常用方法包括
a、squid反向代理,這也是各大網(wǎng)站常用的方法,包括sohu、sina...;
b、DNS輪循;
c、采四層硬件設(shè)備,包括google、baidu使用這種方式。。。對于lvs,小頻道或不重要應(yīng)用可以嘗試使用,對于大流量、實時性要求高的網(wǎng)站目前還不成熟。
II 高性能中間件選擇、優(yōu)化
中間件選擇、優(yōu)化非常重要,當服務(wù)流量大于一定承度時,性能的稍微提升,對于整體硬件成本控制、服務(wù)的整體性能提升都是非常可觀的。對于web server 目前常用的屬apache,但apache 多進程(線程池)架構(gòu)有一些缺點,進程頻繁生成\注銷系統(tǒng)開銷大,特別當流量大時更是明顯,對于應(yīng)用邏輯簡單的可以考慮lighttpd 采用單進程+epoll并發(fā)模式,效率高,但對多CPU支持有問題,但可采用啟多服務(wù)解決這個問題;如果由于應(yīng)用架構(gòu)原因必須使用apache,可考慮apache module 性能比普通CGI成倍提升。。。其它原則,包括各中間件各版本測試、包括性能、安全上的考良,找到平衡點,不要太關(guān)注某一點因素,導致整體架構(gòu)上出現(xiàn)隱患,另外一點非常重要,那就中間件的參數(shù)優(yōu)化,這些方面大家可以google、baidu上找找,比較多,但有個原則那就是需要根據(jù)服務(wù)器實際資源情況進行優(yōu)化,如httpd最大進程數(shù)設(shè)多大合適呢?有些朋友,就隨手來個2048,覺得這樣肯定不會再出現(xiàn)httpd由于進程閥值過低導致拒絕服務(wù),但這有個隱患,因為生成進程,是需要硬件資源的,當進程數(shù)達到一定承度,可能服務(wù)器內(nèi)存會溢出,導致服務(wù)器crash,特別是內(nèi)存消耗量大的應(yīng)用。。。這樣的案例很多,需謹記
III擴展性問題
擴展性對于高速發(fā)展期間的網(wǎng)站非常重要,大家可以經(jīng)常在網(wǎng)上看到某某網(wǎng)站的發(fā)展勵途,那簡直就是一部進化史,過程曲折而痛苦~~。因此成熟的經(jīng)驗就非常重要了,擴展性可以從兩個方面來看:網(wǎng)絡(luò)系統(tǒng)上的擴展性及應(yīng)用本身的擴展性,首先在網(wǎng)絡(luò)上需層次分明,盡量扁平化,全網(wǎng)冗余不能存在故障點,盡量按業(yè)務(wù)類型進行劃分網(wǎng)絡(luò)結(jié)構(gòu)(pv大小、優(yōu)先級)防止互擾,重要的一點:網(wǎng)絡(luò)設(shè)計中,簡單就是美~~,在不影響擴展性的前提下,不要搞得太復(fù)雜;網(wǎng)絡(luò)硬件資源、機架位、IDC都需提前至少半年進行規(guī)劃,這些規(guī)劃的重要依據(jù)是公司業(yè)務(wù)發(fā)展的前景評估,這就體現(xiàn)公司的戰(zhàn)略眼光了,包括是否需要外地IDC(依用戶群體而定)。。。;另外,選一個好點的IDC是非常必要的,否則就得疲于IDC遷移了,北京地區(qū)好IDC還是不少的:皂君廟(有點老了。)、土城、聯(lián)通、酒仙橋、愛立信、互聯(lián)世紀、奧運官方機房數(shù)字北京據(jù)說馬上也能入駐了。。。當然了,有錢也能像google一樣自已搞個IDC,國內(nèi)誰有這個實力?
另一點就是應(yīng)用本身的擴展性了,原則其實很簡單,應(yīng)用設(shè)計時應(yīng)盡量確保應(yīng)用的層次化、采用高性能的中間件、邏輯復(fù)雜及大數(shù)據(jù)量交互的功能盡量做成獨立模塊\后臺、cache層、數(shù)據(jù)庫分層(讀/寫操作分離),不要圖前期簡單直接將功能全部揉進前端CGI中,這很致命,隨時都可能會遇到性能瓶頸、而且毫無擴展性。。。
當以上兩點很好的解決后,現(xiàn)在唯一的問題就是每半年根據(jù)業(yè)務(wù)的PV增漲、新業(yè)務(wù)發(fā)展,預(yù)購服務(wù)器了……;當然了,對現(xiàn)有架構(gòu)優(yōu)化,性能提升才是根本解決之道,特別是現(xiàn)在全球經(jīng)濟不景氣,大家都不好過,這就是運維工程師的責任了,優(yōu)化再優(yōu)化~~
IV應(yīng)用設(shè)計、開發(fā)中的注意點
架構(gòu)層設(shè)計好后,應(yīng)用層設(shè)計就是我們重點關(guān)注對象了,這也是一個項目成功的關(guān)鍵,好的設(shè)計主要體現(xiàn)在:性能(高并發(fā)承載能力)、可擴展性、可維護、安全性(數(shù)據(jù)完整性、應(yīng)用穩(wěn)定性、前端應(yīng)用安全如SQL注入)、模塊冗余、負載均衡等等,技術(shù)點:線程池、epoll、TCP(長/短)連接的選擇、功能模塊的細化及后臺化、模塊冗余/負載均衡考慮(可擴展性)、高頻數(shù)據(jù)cache緩存、數(shù)據(jù)分層、應(yīng)用單故障點的解決(數(shù)據(jù)唯一性問題)等。有兩點要注意:
1、應(yīng)用設(shè)計時要允分考慮服務(wù)器、硬件設(shè)備甚基于IDC的不可靠性;也就是說我們在應(yīng)用設(shè)計時需要考慮到應(yīng)用運行過程中,隨時都可能會有1~2臺服務(wù)器或更多服務(wù)器出現(xiàn)故障情況(網(wǎng)絡(luò)故障、災(zāi)難、攻擊、停電((整個IDC全掛))),如google GFS就是一個典型,我們不能將應(yīng)用的穩(wěn)定性寄托于硬件的穩(wěn)定上,特別是門戶型公司大部份采用的都是X86普通機型,服務(wù)器crash是家常便飯、隨時隨刻(當總量到一定量級時),所以我們在做應(yīng)用架構(gòu)設(shè)計時需允分考慮這些問題發(fā)生時的對策,做到允分的冗余/負載均衡(這兩點可統(tǒng)一),如多IDC間通過智能CDN的流控、單IDC應(yīng)用模塊多節(jié)點冗余/負載均衡等,即使某些應(yīng)用由于特殊原因無法做到這點,也需允分考慮應(yīng)急預(yù)案。。好的設(shè)計在這些突發(fā)情況下可以做到不用人工干預(yù),當然難度也很大。。。記得前年李開復(fù)在北大演講時說過:google一個IDC同時故障800臺機器,不會影響到任何應(yīng)用的正常響應(yīng)(有點懷疑,可能是他挑選的某類服務(wù)器,呵呵)
2、大流量應(yīng)用/模塊中能不使用數(shù)據(jù)庫就不要使用數(shù)據(jù)庫。
(本部分內(nèi)容缺失,包括V 數(shù)據(jù)庫問題;VI 用戶分地域優(yōu)化;3 高可靠性問題解決)
4 網(wǎng)站安全問題
網(wǎng)站安全是一個系統(tǒng)性工作,影響安全的因素也很多,如DDOS(最常見的)、應(yīng)用漏洞、系統(tǒng)層面漏洞、內(nèi)部安全流程漏洞等(人為失誤),可以從以下幾方面著手考慮:
1、網(wǎng)絡(luò)層
首先在網(wǎng)絡(luò)設(shè)計時需考慮到安全因素;在主干出口處,對非業(yè)務(wù)端口進行屏蔽(如非80端口全部屏蔽),對于非常規(guī)數(shù)據(jù)包進行限速,如icmp,udp等,但是需考慮主干設(shè)備性能,不能因為安全限制導致設(shè)備性能明顯下降,需要做到平衡,否則又會出現(xiàn)一個新的隱患點;另一方面就是主干帶寬要足夠富余,做到冗余互備(vrrp、hsrp),以抵抗DDOS的所帶來的帶寬消耗(對于大型網(wǎng)站DOS隨時都存在,只是規(guī)模大小不一樣),另外,現(xiàn)在部份4~7l硬件具有一定的syn 代理功能,可以抵御一定規(guī)模的flood,但主要還得拼資源、帶寬、硬件性能;另外,需做好主干數(shù)據(jù)鏡像分析,對于一些有規(guī)律的攻擊定位到特征、甚至是攻擊源,進行針對性的防御。對于公司重點業(yè)務(wù)可以在網(wǎng)絡(luò)層進行物理隔離,增強關(guān)鍵性業(yè)務(wù)的健壯性,甚至是將業(yè)務(wù)冗余分布至不同IDC,做到跨地域容災(zāi)(如地震)
2、系統(tǒng)層
系統(tǒng)層主要是操作系統(tǒng)安全加固、系統(tǒng)安全BUG解決、對非業(yè)務(wù)端口進行屏蔽、非業(yè)務(wù)軟件清除、跟蹤系統(tǒng)工具軟件最新安全動態(tài),并做到及時更新。特別是直接對外提供服務(wù)的服務(wù)器(處于外網(wǎng)),更需做好定期安全審查評估,由于一般公司服務(wù)器內(nèi)網(wǎng)都是相通過,攻占一臺外網(wǎng)機器可能會導致公司整個內(nèi)網(wǎng)全暴露,很恐怖
3、應(yīng)用層面
應(yīng)用方面安全就不多說了,主要是開發(fā)細節(jié)上需把好關(guān),不留邏輯上的漏洞,并對上傳接口嚴格控制、越界檢查、SQL安全性考慮等,特別是對于用戶具備上傳接口的應(yīng)用(如mail、bbs、blog、云計算等應(yīng)用),漏洞是很多的;系統(tǒng)應(yīng)用,如中間件也需做好相應(yīng)的安全配置。。。不多說了,大家上網(wǎng)能餿到一大堆。需要多關(guān)注網(wǎng)上關(guān)于自身網(wǎng)站安全漏洞方面的信息(或定期搜索),因為往往應(yīng)用上的漏洞,都是用戶先發(fā)現(xiàn)的,用戶是最好的測試人員,發(fā)現(xiàn)后需第一時間修復(fù),并對同類業(yè)務(wù)進行全面排查;對于特定重點頁面也可以進行監(jiān)控,并采用程序自動恢復(fù)主要頁面(功能上如有問題,可顯示業(yè)務(wù)升級提示),以免應(yīng)用被攻破后對公司形象造成影響
4、內(nèi)網(wǎng)安全管理
對于日常內(nèi)網(wǎng)準入方面需有嚴格流程,統(tǒng)一入口,技術(shù)方面如vpn、rsa,securID(如sina就用的動態(tài)密鑰)等,沒有條件的也需定期更新入口密碼
5、安全巡查
偶爾由于人為失誤會導致一些漏洞的出現(xiàn),如由于工作需要臨時變更了某些安全參數(shù),但忘記開啟。。。這個問題其實是最大的,往往出問題也多是人為失誤,需要定期對全網(wǎng)關(guān)鍵安全點進行巡查;而且這也是404審計的一個重點,想必在sohu、sina、網(wǎng)易等美國上市公司里做安全的兄弟應(yīng)該很有感觸吧