運維中關鍵技術點解剖:1 大量高并發(fā)網(wǎng)站的設計方案 ;2 高可靠、高可伸縮性網(wǎng)絡架構設計;3 網(wǎng)站安全問題,如何避免被黑?4 南北互聯(lián)問題,動態(tài)CDN解決方案;5 海量數(shù)據(jù)存儲架構
一、什么是大型網(wǎng)站運維?
首先明確一下,全文所講的”運維“是指:大型網(wǎng)站運維,與其它運維的區(qū)別還是蠻大的;然后我們再對大型網(wǎng)站與小型網(wǎng)站進行范圍定義,此定義主要從運維復雜性角度考慮,如網(wǎng)站規(guī)范、知名度、服務器 量級、pv量等考慮,其它因素不是重點;因此,我們先定義服務器規(guī)模大于1000臺,pv每天至少上億(至少國內排名前10),如sina、baidu、 QQ,51.com等等;其它小型網(wǎng)站可能沒有真正意義上的運維工程師,這與網(wǎng)站規(guī)范不夠和成本因素有關,更多的是集合網(wǎng)絡、系統(tǒng) 、開發(fā)工作于一身的“復合性人才”,就如有些公司把一些合同采購都納入了運維職責范圍,還有如IDC網(wǎng)絡規(guī)劃也納入運維職責。所以,非常重要一定需要明白:運維對其它關聯(lián)工種必須非常了解熟悉:網(wǎng)絡、系統(tǒng)、系統(tǒng)開發(fā)、存儲,安全,DB等;我在這里所講的運維工程師就是指專職運維工程師。
我們再來說說一般產品的“出生”流程:
1、首先公司管理層給出指導思想,PM定位市場需求(或copy成熟應用)進行調研、分析、最終給出詳細設計。
2、架構師根據(jù)產品設計的需求,如pv大小預估、服務器規(guī)模、應用架構等因素完成網(wǎng)絡規(guī)劃,架構設計等(基本上對網(wǎng)絡變動不大,除非大項目)
3、開發(fā)工程師將設計code實現(xiàn)出來、測試工程師對應用進行測試。
4、好,到運維工程師出馬了,首先明確一點不是說前三步就與運維工作無關了,恰恰相反,前三步與運維關系很大:應用的前期架構設計、軟/硬件資源評估申請采購、應用設計性能隱患及評估、IDC、服務性能\安全調優(yōu)、服務器系統(tǒng)級優(yōu)化(與特定應用有關)等都需運維全程參與,并主導整個應用上線項目;運維工程師負責產品服務器上架準備工作,服務器系統(tǒng)安裝、網(wǎng)絡、IP、通用工具集安裝。運維工程師還需要對上線的應用系統(tǒng)架構是否合理、是否具備可擴展性、及安全隱患等因素負責,并負責最后將產品(程序)、網(wǎng)絡、系統(tǒng)三者進行拼接并最優(yōu)化的組合在一起,最終完成產品上線提供用戶使用,并周而復使:需求-》開發(fā)(升級)-》測試-》上線(性能、安全問題等之前預估外的問題隨之慢慢就全出來了)在這里提一點:網(wǎng)站開發(fā)模式與傳統(tǒng)軟件開發(fā)完全不一樣,網(wǎng)站一天開發(fā)上線1~5個升級版本是家常便飯,用戶體驗為王嘛,如果某個線上問題像M$ 需要1年解決,用戶早跑光了;應用上線后,運維工作才剛開始,具體工作可能包括:升級版本上線工作、服務監(jiān)控、應用狀態(tài)統(tǒng)計、日常服務狀態(tài)巡檢、突發(fā)故障處理、服務日常變更調整、集群管理、服務性能評估優(yōu)化、數(shù)據(jù)庫管理優(yōu)化、隨著應用PV增減進行應用架構的伸縮、安全、運維開發(fā)工作:
a 、盡量將日常機械性手工工作通過工具實現(xiàn)(如服務監(jiān)控、應用狀態(tài)統(tǒng)計、服務上線等等),提高效率。
b、解決現(xiàn)實中服務存在的問題,如高可靠性、可擴展性問題等。
c、大規(guī)模集群管理工具的開發(fā),如1萬臺機器如何在1分鐘內完成密碼修改、或運行指定任務?2000臺服務器如何快速安裝操作系統(tǒng)?各分布式IDC、存儲集群中數(shù)PT級的數(shù)據(jù)如何快速的存儲、共享、分析?等一系列挑戰(zhàn)都需運維工程師的努力。
在此說明一下其它配合工種情況,在整個項目中,前端應用對于網(wǎng)絡/系統(tǒng)工程師來說是黑匣子,同時開發(fā)工程師職責只是負責完成應用的功能性開發(fā),并對應用本身性能、安全性等應用本身負責,它不負責或關心網(wǎng)絡/系統(tǒng)架構方面事宜,當然軟/硬件采購人員等事業(yè)部其它同事也不會關心這些問題,各司其職,但項目的核心是運維工程師~!所有其它部門的橋梁。
上面說了很多,我想大家應該對運維有一些概念了,在此打個比方吧,如果我們是一輛高速行駛在高速公路上的汽車,那運維工程師就是司機兼維修工,這個司機不簡 單,有時需要在高速行駛過程中換輪胎、并根據(jù)道路情況換檔位、當汽車速度越來越快,汽車本身不能滿足高速度時對汽車性能調優(yōu)或零件升級、高速行進中解決汽 車故障及性能問題、時刻關注前方安全問題,并先知先覺的采取規(guī)避手段。這就是運維工作~!
最后說一下運維工程師的職責:”確保線上穩(wěn)定“,看似簡單,但實屬不容易,運維工程師必須在諸多不利因素中進行權衡:新產品模式對現(xiàn)有架構及技術的沖擊、產品高頻度的升級帶來的線上BUG隱患、運維自動化管理承度不高導致的人為失誤、IT行業(yè)追求的高效率導致流程執(zhí)行上的缺失、用戶增漲帶來的性能及架構上的壓力、IT行業(yè)寬松的技術管理文化、創(chuàng)新風險、互聯(lián)網(wǎng)安全性問題等因素,都會是網(wǎng)站穩(wěn)定的大敵,運維工程師必須把控好這最后一關,需具體高度的責任感、原則性及協(xié)調能力,如果能做到各因素的最佳平衡,那就是一名優(yōu)秀的運維工程師了。
另外在此聊點題外話,我在這里看到有很多人要sina、QQ、baidu,51.com等聊自已的運維方面的經(jīng)驗,其實這對于它們有點免為其難:
a、各公司自已網(wǎng)絡架構、規(guī)模、或多或少還算是公司的核心秘密,要保密,另外,對于大家所熟知的通用軟件、架構,由于很多公司會根據(jù)自已實際業(yè)務需要,同時因為原版性能、安全性、已知bug、功能等原因,進行過二次開發(fā)(如apache,php,mysql ),操作系統(tǒng)內核也會根據(jù)不同業(yè)務類型進行定制的,如某些應用屬于運算型、某些是高IO型、或大存儲大內存型。根據(jù)這些特點進行內核優(yōu)化定制,如sina就在 memcache上進行過二次開發(fā),搞出了一個MemcacheDB,具體做得如何我們不談,但開源了,是值得稱贊的,國內公司對于開源基本上是索取,沒有貢獻;另外,服務器也不是大家所熟知的型號,根據(jù)業(yè)務特點,大部份都是找DELL/HP/ibm進行過定制;另外,在分布式儲存方面都有自已解決方案,要不就是使用現(xiàn)成開源hadoop等解決方案,或自已開發(fā)。但90%都是借鑒google GFS的思想:分布式存儲、計算、大表。
b、各公司業(yè)務方向不一樣,會導致運維模式或方法都不一樣,如51.com和baidu運維肯定區(qū)別很大,因為他們業(yè)務模式?jīng)Q定了其架構、服務器量級、 IDC分布、網(wǎng)絡結構、通用技術都會不一樣,主打新聞門戶的sina與主打sns的51.com運維模式差異就非常大,甚至職責都不大一樣;但有一點,通用技術及大致架構上都大同小異,大家不要太神化,更多的公司只是玩壘積木的游戲罷了,沒什么技術含量。
c、 如上面所講,目前大型網(wǎng)站運維還處于幼年時期理念和經(jīng)驗都比較零散,沒有成熟的知識體系,可能具體什么是運維,大家都要先思索一番,或壓根沒想過,真正討 論也只是運維工作的冰山一角,局限于具體技術細節(jié),或某某著名網(wǎng)站大的框架,真正運維體系化東西沒有,這也許是目前網(wǎng)上運維相關資料 比較少的原故吧?;蛘咭彩菄鴥冗\維人員比較難招,比較牛的運維工程師比較少見的原因之一吧。
二、運維工作師需要什么樣的技能及素質
做為一名運維工程師需要什么樣的技能及素質呢,首先說說技能吧,如大家上面所看到,運維是一個集多IT工種技能與一身的崗位,對系統(tǒng)-》網(wǎng)絡 -》存儲-》協(xié)議-》需求-》開發(fā)-》測試-》安全等各環(huán)節(jié)都需要了解一些,但對于某些環(huán)節(jié)需熟悉甚至精通,如系統(tǒng) (基本操作系統(tǒng)的熟悉使用,*nix,windows 。.)、協(xié)議、系統(tǒng)開發(fā)(日常很重要的工作是自動運維化相關開發(fā)、大規(guī)模集群工具開發(fā)、管理)、通用應用(如lvs、ha、web server 、db、中間件、存儲等)、網(wǎng)絡,IDC拓樸架構;
技能方面總結以下幾點:
1、開發(fā)能力,這點非常重要,因為運維工具都需要自已開發(fā),開發(fā)語言:perl、python、php(其中之一)、shell(awk,sed,expect…。等),需要有過實際項目開發(fā)經(jīng)驗,否則工作會非常痛苦。
2、通用應用方面需要了解:操作系統(tǒng)(目前國內主要是linux、bsd)、webserver相關 (nginx,apahe,php,lighttpd,java。。。)、數(shù)據(jù)庫(mysql,oralce)、其它雜七八拉的東東;系統(tǒng)優(yōu)化,高可靠性;這些只是加分項,不需必備,可以邊工作邊慢慢學,這些東西都不難。當然在運維中,有些是有分工偏重點不一樣。
3、系統(tǒng)、網(wǎng)絡、安全,存儲,CDN,DB等需要相當了解,知道其相關原理。
個人素質方面:
1、溝通能力、團隊協(xié)作:運維工作跨部門、跨工種工作很多,需善于溝通、并且團隊協(xié)作能力要強;這應該是現(xiàn)代企業(yè)的基本素質要求了,不多說。
2、工作中需膽大心細:膽大才能創(chuàng)新、不走尋常路,特別對于運維這種新的工種,更需創(chuàng)新才能促進發(fā)展;心細,運維工程師是網(wǎng)站admin,最高線上權限者,一不小心就會遺憾終生或打入十八層地獄。
3、主動性、執(zhí)行力、精力旺盛、抗壓能力強:由于IT行業(yè)的特性,變化快;往往計劃趕不上變化,運維工作就更突出了,比如國內各大公司服務器往往是全國各地,哪里便宜性價比高,就那往搬,進行大規(guī)模服務遷移(牽扯的服務器成百上千臺),這是一個非常頭痛的問題;往往時間 非常緊迫,如限1周內完成,這種情況下,運維工程師的主動性及執(zhí)行力就有很高的要求了:計劃、方案、服務無縫遷移、機器搬遷上架、環(huán)境準備、安全評估、性能評估、基建、各關聯(lián)部門扯皮,7X24小緊急事故響應等。
4、其它就是一些基本素質了:頭腦要靈光、邏輯思維能力強、為人謙虛穩(wěn)重、親和力、樂于助人、有大局觀。
5、最后一點,做網(wǎng)站運維需要有探索創(chuàng)新精神,通過創(chuàng)新型思維解決現(xiàn)實中的問題,因為這是一個處于幼年的職業(yè)(國外也一樣,但比國內起步早點),沒有成熟體系或方法論可以借鑒,只能靠大家自已摸索努力。
三、怎樣才算是一個合格的運維工程師
1、保證服務達到要求的線上標準,如99.9%;保證線上穩(wěn)定,這是運維工程師的基本責職所在。
2、不斷的提升應用的可靠性與健壯性、性能優(yōu)化、安全提升;這方面非??简炛鲃有院蛣?chuàng)新思維。
3、網(wǎng)站各層面監(jiān)控、統(tǒng)計的覆蓋度,軟件、硬件、運行狀態(tài),能監(jiān)控的都需要監(jiān)控統(tǒng)計,避免監(jiān)控死角、并能實時了解應用的運轉情況。
4、通過創(chuàng)新思維解決運維效率問題;目前各公司大部份運維主要工作還是依賴人工操作干預,需要盡可能的解放雙手。
5、運維知識的積累與沉淀、文檔的完備性,運維是一個經(jīng)驗性非常強的崗位,好的經(jīng)驗與陷阱都需積累下來,避免重復性范錯。
6、計劃性和執(zhí)行力;工作有計劃,計劃后想法設法達到目標,不找借口。
7、自動化運維;能對日常機械化工作進行提煉、設計并開發(fā)成工具、系統(tǒng),能讓系統(tǒng)自動完成的盡量依靠系統(tǒng);讓大家更多的時間用于思考、創(chuàng)新思維、做自已喜歡的事情。
以上只是技術上的一些層面,當然個人意識也是很重要的。
四、運維職業(yè)的迷惘、現(xiàn)狀與發(fā)展前景
運維崗位不像其它崗位,如研發(fā)工程師、測試工程師等,有非常明確的職責定位及職業(yè)規(guī)劃,比較有職業(yè)認同感與成就感;而運維工作可能給人的感覺是哪方面都了解 一些,但又都比上專職工程師更精通、感覺平時被關注度比較低(除非線上出現(xiàn)故障),慢慢的大家就會迷惘,對職業(yè)發(fā)展產生困惑,為什么會有這種現(xiàn)象呢?除了職業(yè)本身特點外,主要還是因為對運維了解不深入、做得不深入導致;其實這個問題其它崗位也會出現(xiàn),但我發(fā)現(xiàn)運維更典型,更容易出現(xiàn)這個問題;
針對這個問題我談一下網(wǎng)站運維的現(xiàn)狀及發(fā)展前景(也在思考中,可能不太深入全面,也請大家斧正補充)
運維現(xiàn)狀:
1、處于剛起步的初級階段,各大公司有此專職,但重視或重要程度不高,可替代性強;小公司更多是由其它崗位來兼顧做這一塊工作,沒有專職,也不可能做得深入。
2、技術層次比較低;主要處于技術探索、積累階段,沒有型成體系化的理念、技術。
3、體力勞動偏大;這個問題主要與第二點有關系,很多事情還是依靠人力進行,沒有完成好的提練,對于大規(guī)模集群沒有成熟的自動化管理方法,在此說明一下,大規(guī)模集群與運維工作是息息相關的如果只是百十來臺機器,那就沒有運維太大的生存空間了。
4、優(yōu)秀運維人才的極度缺乏;目前各大公司基本上都靠自已培養(yǎng),這個現(xiàn)狀導致行業(yè)內運維人才的流動性非常低,非常多好的技術都局限在各大公司內部,如 google 50萬臺機器科學的管理,或者國內互聯(lián)公司top 10 的一些運維經(jīng)驗,這些經(jīng)驗是非常有價值的東西并決定了一個公司的核心競爭力;這些問題進而導致業(yè)內先進運維技術的流通、貫通、與借簽,并最終將限制了運維發(fā)展。
5、很多優(yōu)秀的運維經(jīng)驗都掌握在大公司手中;這不在于公司的技術實力,而在于大公司的技術規(guī)模、海量PV、硬件規(guī)模足夠大,如baidu可怕的流量、 51.com海量數(shù)據(jù)~~~~這些因素決定了他們遇到的問題都是其它中/小公司還沒有遇到的,或即將遇到。但大公司可能已有很好的解決方案或系統(tǒng)。
發(fā)展前景:
1、從行業(yè)角度來看,隨著中國互聯(lián)網(wǎng)的高速發(fā)展(目前中國網(wǎng)民已躍升為全球第一)、網(wǎng)站規(guī)模越來越來大、架構越來越復雜;對專職網(wǎng)站運維工程師、網(wǎng)站架構師的要求會越來越急迫,特別是對有經(jīng)驗的優(yōu)秀運維人才需求量大,而且是越老越值錢;目前國內基本上都是選擇畢業(yè)生培養(yǎng)(限于大公司),培養(yǎng)成本高,而且沒有經(jīng)驗人才加入會導致公司技術更新緩慢、影響公司的技術發(fā)展;當然,畢業(yè)生也有好處:白紙一張,可塑性強,比較認同并容易融入企業(yè)文化。
2、從個人角度,運維工程師技術含量及要求會越來越高,同時也是對公司應用、架構最了解最熟悉的人、越來越得到重視。
3、網(wǎng)站運維將成為一個融合多學科(網(wǎng)絡、系統(tǒng)、開發(fā)、安全、應用架構、存儲等)的綜合性技術崗位,給大家提供一個很好的個人能力與技術廣度的發(fā)展空間。
4、運維工作的相關經(jīng)驗將會變得非常重要,而且也將成為個人的核心競爭力,具備很好的各層面問題的解決能力及方案提供、全局思考能力等。
5、特長發(fā)揮和興趣的培養(yǎng);由于運維崗位所接觸的知識面非常廣闊,更容易培養(yǎng)或發(fā)揮出個人某些方面的特長或愛好,如內核、網(wǎng)絡、開發(fā)、數(shù)據(jù)庫等方面,可以做得非常深入精通、成為這方面的專家。
6、如果真要以后不想做運維了,轉到其它崗位也比較容易,不會有太大的局限性。當然了,你得真正用心去做。
7、技術發(fā)展方向:網(wǎng)站/系統(tǒng)架構師。
五、運維關鍵技術點解剖
1、 大規(guī)模集群管理問題
首先我們先要明確集群的概念,集群不是泛指各功能服務器的總合,而是指為了達到某一目的或功能的服務器、硬盤 資源的整合(機器數(shù)大于兩臺),對于應用來說它就是一個整體,目前常規(guī)集群可分為:高可用性集群(HA),負載均衡集群(如lvs),分布式儲、計算存儲集群(DFS,如google gfs ,yahoo hadoop),特定應用集群(某一特定功能服務器組合、如db、cache層等),目前互聯(lián)網(wǎng)行業(yè)主要基于這四種類型;對于前兩種類似,如果業(yè)務簡單、應用上post操作比較少,可以簡單的采用四層交換機 解決(如f5),達到服務高可用/負責均衡的作用,對于資源緊張的公司也有一些開源解決辦法如lvs+ha,非常靈活;對于后兩種,那就考驗公司技術實力及應用特點了,第三種DFS主要應用于海量數(shù)據(jù)應用上,如郵件、搜索等應用,特別是搜索要求就更高了,除了簡單海量存儲,還包括數(shù)據(jù)挖掘、用戶行為分析;如 google、yahoo就能保存分析近一年的用戶記錄數(shù)據(jù),而baidu應該少于30天、soguo就更少了。。。這些對于搜索準備性、及用戶體驗是至關重要的。
接下來,我們再談談如何科學的管理集群,有以下關鍵幾點:
I、監(jiān)控
主要包括故障監(jiān)控和性能、流量、負載等狀態(tài)監(jiān)控,這些監(jiān)控關系到集群的健康運行,及潛在問題的及時發(fā)現(xiàn)與干預;
a、服務故障、狀態(tài)監(jiān)控:主要是對服務器自身、上層應用、關聯(lián)服務數(shù)據(jù)交互監(jiān)控;例如針對前端web server,我們就可以有很多種類型的監(jiān)控,包括應用端口 狀態(tài)監(jiān)控,便于及時發(fā)現(xiàn)服務器或應用本身是否crash、通過icmp包探測服務器健康狀態(tài),更上層可能還包括應用各頻道業(yè)務的監(jiān)控,常用方法是采用面業(yè)特征碼進行判斷,或對重點頁面進行簽名,以網(wǎng)站被黑篡改(報警、并自動恢復被篡改數(shù)據(jù))等等,這些只是一部份,還有N多監(jiān)控方式,依應用特點而定,還有一些問題需解決,如集群過大,如何高性能的進行監(jiān)控也是一個現(xiàn)實問題。
b、其它就是集群狀態(tài)類的監(jiān)控或統(tǒng)計,為我們合理管理調優(yōu)集群提供數(shù)據(jù)參考、包括服務瓶頸、性能問題、異常流量、攻擊等問題。
II、故障管理
a、硬件故障問題;對于成百上千或上萬機器的N多 集群,服務器死機、硬件故障概率是非常大的,幾乎每時每刻都有服務硬件問題,死機、硬盤損壞、電源、內存、交換機。針對這種情況,我們在設計網(wǎng)站架構時需 要充分考慮到這些問題,并將其視為常態(tài);更多的依靠應用的冗余機制來規(guī)避這種風險,但給系統(tǒng)工程師足夠寬裕的處理時間。(如google不是號稱同時死800臺機器,服務不會受到任何影響嗎);這就是考驗運維工程師及網(wǎng)站架構師功能的地方了,好的設計能達到google所描述自恢復能力,如gfs,糟糕的設計那就是一臺服務器的死機可能會造成大面積服務的連鎖故障反映,直接對用戶拒絕響應。
b、應用故障問題;可能是某一bug被觸發(fā)、或某一性能閥值被超越、攻擊等情況不一而定,但重要的一點,是要有對這些問題的預防性措施,不能想當然,它不會出問題,如真出問題了,如何應對?這需要運維工程師平時做足功夫,包括應急響應速度、故障處理的科學性、備用方案的有效等。
III、自動化
自動化:簡而言之,就是將我們日常手動進行的一些工作通過工具,系統(tǒng)自動來完成,解放我們的雙手及枯燥的重復性勞動,例如:沒有工具前,我們安裝系統(tǒng)需要一臺一臺裸機安裝,如2000臺,可能需要10人/10天,搞爛N張光盤,人力成本更大。。。而現(xiàn)在通過自動化工具,只需幾個簡單命令 就能搞定、還有如機器人類程序,自動完成以往每天人工干預的工作,使其自動完成、匯報結果,并具備一定的專家系統(tǒng)能力,能做一些簡單的是/非判斷、優(yōu)化選擇等。。。這些好處非常明顯不再多說。。。應該說,自動化運維是運維工程師職業(yè)化的一個追求,利已利公,雖然這是一個異常艱巨的任務:不斷變更的業(yè)務、不規(guī)范化的應用設計、開發(fā)模式、網(wǎng)絡架構變更、IDC變更、規(guī)范變動等因素,都可能會對現(xiàn)有自動化系統(tǒng)產生影響,所以需要模塊化、接口化、變因參數(shù)化等因此,自動化相關工作,是運維工程師的核心重點工作之一,也是價值的體現(xiàn)。
-
運維工程師
+關注
關注
4文章
39瀏覽量
8255
發(fā)布評論請先 登錄
相關推薦
評論