(轉)大規模網站架構探祕

跟朋友聊天的時候,發現不少人對大型網站系統架構很是感興趣,我也很感興趣,常常會在家裏2檯筆記本和1臺服務器組成的局域網環境裏做些實驗。我進 入IT行業的時間,大約是97,98年吧,那時候PC客戶端軟件最爲盛行,作軟件開發是一份很體面也很喜歡的工做。我從Win3.1上的VC1.5開始一 直到VC6.0,而後轉爲.Net開發,基本上都是從事客戶端軟件開發。本人的性格是危機意識向來嚴重,因此深感互聯網必將盛行,傳統軟件必將走向沒落, 因而轉向了WEB開發。記得之前去某Portal網站應聘的時候,主考官就問我:你認爲客戶端開發和互聯網開發有什麼不一樣。我當時的回答是:互聯網開發比 客戶端軟件開發簡單多了,我不再用考慮那麼多的用戶環境因素了,一點部署,什麼時候何地均可用。html

不少年過去了,我再想起當初個人回答,依然以爲那個回答是正確的。就產品開發層面來說,互聯網開發確實簡單多了。這裏首先澄清一個概念,我所說的互 聯網開發並非指全部的B/S應用,例如B/S方式的銀行內部業務系統。我所說的互聯網應用是指在互聯網上服務於公衆的應用。企業級的業務系統,它的特色 是業務邏輯是比較複雜的,但用戶通常不太大;互聯網應用則相反,業務邏輯通常很簡單,但面對的是海量用戶。前端

既然互聯網應用開發的業務邏輯不復雜,但爲何大型網站都投入了那麼多的技術人員呢?主要是由於運營的環境太複雜,這種複雜性造成的緣由如下:程序員

一、公開性apache

網站的服務是公開的,任何人均可以來訪問,因此就會直接面對大量的不良用戶,系統數據的安全面臨很大的風險,一旦系統被攻入,結果將是災難性的。後端

二、訪問量大瀏覽器

訪問量大,就意味着網站必須可以承受高併發大流量的考驗,若是網站的服務能力和健壯性等達不到要求,你的系統就會被沖垮。緩存

三、用戶體驗安全

用戶體驗要好,除了產品設計的因素以外,就要求訪問網站的速度要快,具備高可用性,別用一會就掛。服務器

網站各子系統如何進行部署,如何提升系統的健壯性和高可用性,如何實現網站的安全,如何提升訪問速度,如何進行負載均衡,甚至於採用什麼的硬件設 備,另外,網站發展的不一樣時期會可能會採用不一樣的架構,如何實現架構的平滑過渡,如何使目前的架構具備彈性,具有可擴展的能力,這都是大型網站必須解決的 問題,也是小網站成長過程當中早晚會遇到的問題。我後面的文章將會逐步就這個話題展開。網絡

網站機構包括網站的軟件架構和系統架構兩部分,軟件架構主要是指子系統和邏輯層的劃分結構;系統架構,通常是系統部署結構。

系統架構師的知識體系比較龐雜,所謂的見多識廣,多數是由運維工程師成長起來的,他們開發能力不強,編碼很少,但動手能力很強,腳本編寫很是熟練, 常常會作各類類型的實驗,密切跟蹤最新技術最新產品的相關信息。固然,一個大型的網站,須要一個架構師團隊,他們各自承擔擅長領域的架構設計,好比安全架 構、存儲架構等等。

我以爲通常的開發人員仍是很難走上這條路的,這份工做須要經驗,須要不斷實踐,但若是開發人員一旦走上了這條路,會有很大的發展,主要源於開發人員 的思考習慣和技術的深度。個人這系列文章,開發人員能夠做爲參考,好比如何開發可分佈式部署的系統,另外不少朋友都是身兼數職,從開發到實施,到部署所有 包辦。我我的深感精力有限,因此又特地找了幾個朋友從Unix/Linux系統和Windows系統不一樣角度進行探索,以造福正在摸索中的朋友,有興趣的 朋友也能夠參與。

其實,這部份內容我一直在寫,好比PHP深度探索系列,寫了大量的關於apache的內容,我已經大致把apache代碼閱讀了一遍,很費時間,進度緩慢,但我想這有助於咱們理解apache的配置和調優。

在介紹網站架構以前,咱們先介紹一些網站架構中最基礎和常見的概念,以便更好的理解後面的有關負載均衡和分佈式存儲等技術。第一個,首先講講CDN。

一、CDN是什麼

CDN(Content Delivery Network),就是內容發佈網或者內容分發網,它的主要目的:經過在現有的Internet中增長一層新的網絡架構,將網站的內容發佈到最接近用戶的 網絡邊緣,使用戶能夠就近取得所需的內容,從而提升用戶訪問網站的響應速度,提高用戶體驗,同時可以分散訪問壓力,把原本用戶集中訪問分散到各地去。網站 的內容提供商(好比新浪、搜狐、網易等等)使用CDN,就能夠在宏觀層解決一部分大流量、海量用戶併發等使人頭疼的問題。

二、CDN的組成

內容發佈網(CDN)是一個經策略性部署的總體系統,包括分佈式存儲、負載均衡、網絡請求的重定向和內容管理4個要件,而內容管理和全局的網絡流量 管理是CDN的核心所在。經過用戶就近性和服務器負載的判斷,CDN確保內容以一種極爲高效的方式爲用戶的請求提供服務,達到用戶所要求的服務距用戶僅 有"一跳"(Single Hop)之遙。

咱們一般的內容發佈模式都是將網站數據放到一處,而後應對來自世界各地的訪問,咱們多數考慮的是軟件部署架構,不多考慮網絡硬件架構。與之造成對比 的是,CDN則強調了網絡在內容發佈中的重要性。經過引入主動的內容管理層的和全局負載均衡,CDN從根本上區別於傳統的內容發佈模式。

內容提供商承擔了他們不應幹也幹很差的內容發佈服務。

三、互聯網服務的產業鏈

縱觀整個寬帶服務的價值鏈,內容提供商和用戶位於整個價值鏈的兩端,中間依靠網絡服務提供商將其串接起來。隨着互聯網工業的成熟和商業模式的變革, 在這條價值鏈上的角色愈來愈多也愈來愈細分,出現了內容運營商、託管服務提供商、骨幹網絡服務提供商、接入服務提供商等等。在這一條價值鏈上的每個角色 都要分工合做、各司其職才能爲客戶提供良好的服務,從而帶來多贏的局面。從內容與網絡的結合模式上看,內容的發佈已經走過了ICP的內容(應用)服務器和 IDC這兩個階段。IDC的熱潮也催生了託管服務提供商這一角色。可是,IDC並不能解決內容的有效發佈問題。內容位於網絡的中心並不能解決骨幹帶寬的佔 用和創建IP網絡上的流量秩序。所以將內容推到網絡的邊緣,爲用戶提供就近性的邊緣服務,從而保證服務的質量和整個網絡上的訪問秩序就成了一種顯而易見的 選擇,這就是CDN服務模式。CDN的創建解決了困擾內容運營商的內容"集中與分散"的兩難選擇,無疑對於構建良好的互聯網價值鏈是有價值的,也是不可或 缺的最優網站加速服務。

四、CDN服務提供商

ChinaCache是中國最大的CDN服務提供商,是否是惟一未可知也。要想成爲CDN服務提供商,恐怕要擺平電信、網通、鐵通等等運營商,這得 須要什麼樣的能力和背景不得而知。它的服務節點在全球已經超過130個,其中國內節點超過80個,覆蓋全國主要6大網絡(所謂6線機房,就是這麼來的)的 主要省份,象各大門戶網站,好比新浪、網易等等都是租用了他們的服務。因此,你不管是在南方,或者北方,仍是在北美,訪問這些門戶網站,感受速度都很快, 最主要的緣由之一就是CDN發揮了效果。通常小網站是用不起這服務的,因此慢點就慢點了吧,能夠租用互聯互通的6線機房,若是網絡足夠寬的話,用戶也能夠 忍受。若是想繼續提高用戶體驗的話,就須要作一些網站鏡像,部署在具備表明性的幾個大城市,好比華南能夠部署在廣州,華東能夠部署在上海,華北能夠部署在 北京,不過內容鏡像的過程,就須要本身去部署和維護。還有的網站,採用內容分割的方式,好比創建針對各地的分站,業務狀況不一樣,可能部署的策略不一樣。 CDN能夠認爲是基礎網絡建設的一種策略。

前面介紹了cdn的一些原理和概念,以及提供cdn基礎網絡服務的途徑。cdn看起來對於靜態內容的,好比html,js,image是很是合適的,經過cdn的部署,用戶只須要一跳就能夠訪問到網站的內容。那對於動態內容怎麼辦呢?我回答一下:

動態內容按照存在形態能夠分爲三類。

第一類:內容長時間不需變化,這類內容通常是經過網頁靜化技術,實現動態內容轉換成靜態內容,從而達到cdn部署,典型的就是內容類網站,好比新浪、搜狐、網易等等的內容發佈系統cms,內容的增刪改等管理工做被準實時同步到各個節點。

第二類:內容可能會短期內發生變更,可是最終會穩定。好比論壇、博客等應用,這類服務提供的內容按照必定的時間間隔,實現批量靜化,固然也有實時靜化,像Mop的大雜燴、網易社區就是使用了這樣的策略。

第三類:內容會實時變化,很是個性化。好比郵箱應用,這類服務提供的內容沒法實現靜化,只能經過實行分區域部署和負載均衡等手段進行優化。

對於提供cdn服務的廠商來說,靜態內容的cdn天然沒有問題,對於第三類服務,只能從通訊鏈路層進行相應的優化。

對於不少網站的僞靜化,有的出於Seo的考慮,有的出於安全性的考慮,手段基本上是rewrite Url。它只不過是一種外在的表現形式,與Html靜化是兩回事,它依然是一種動態內容。

1. 負載均衡的分類

負載均衡技術在網站運營過程當中應用很是廣泛,技術也很成熟。負載均衡技術按照軟硬件形式分爲軟均衡和硬均衡。軟均衡就是基於軟件技術的均衡,硬均衡是基於硬件技術的均衡;

按照網絡協議劃分又分爲四層均衡和七層均衡。四層均衡就是基於OSI網絡層的數據均衡,七層均衡是基於OSI應用層的數據均衡。

各類均衡方式在大型網站中均有采用,並且大多數狀況下,是多種均衡方式的組合。

2. DNS輪詢均衡

這種方式,算是比較獨立的一種方式,不在上述劃分之列,但使用比較普遍,通常用在網站最前端。你能夠作個試驗,在dos命令行中運行nslook命 令。好比:nslookup www。163。com,你會看到命令給出了一堆解析後的IP地址。這些地址就是www.163.com這個域名綁定的多條A記錄。咱們從瀏覽器發起的訪 問請求http://www.163.com/,那麼你輸入的域名首先須要通過DNS服務器進行解析,Dns服務器的解析的過程就是按照A記錄的順序,依 次分配IP地址。Dns輪詢方式實現均衡就是利用這個原理,在一個域名下面綁定N個IP地址,訪問請求被均衡到不一樣的設備。Dns輪詢方式提供的IP地 址,在大型網站中每每是一個集羣的地址,多是均衡交換機也多是均衡服務器。對於小網站的話,掛接多臺服務器也沒有問題。

DNS輪詢均衡的優勢:

一、零成本:只是在Dns服務器上綁定幾個A記錄,域名註冊商通常都提供;

二、部署簡單:就是在網絡拓撲進行設備擴增,而後在Dns服務器上添加記錄。

DNS輪詢均衡的缺點:

一、流量分配不均:Dns解析過程其實環節不少,並且是一種層層緩存的機制,你的dns服務器雖然進行更新,可是客戶機、以及網絡上其它的dns服 務器不會實時更新,因此流量很難保證100%的平均。目前,dns服務器都提供了多種手段能夠調整dns輪詢分配的策略,可是確實沒法保證很完美的均衡。

二、健康檢查:Dns服務器中A記錄地址中的某一臺服務器宕機,DNS服務器是沒法知道的,仍舊會將訪問分配到此服務器。因此須要人員或者工具進行 實時檢測,在某臺機器宕機以後,把備份機推上生產線,若是想要從A記錄地址摘除某個地址,這個通知過程須要幾個小時甚至更久才能擴散到全部的客戶機。

Dns輪詢方式推到服務的最前端仍是頗有效的,它經過最原始的方式,把訪問用戶映射到不一樣的服務集羣上。對於大型網站來說,對外服務的IP地址是不 可能常常變更的,並且後端的集羣一旦宕掉,能夠迅速推上冗餘集羣。再加上,通常都是通過CDN部署,服務被拆分到各個局部,因此在運營過程當中不會產生太大 的影響。

3. OSI七層模型

咱們接下來說講七層均衡。要理解四七層均衡的原理,就先要回憶一下大學課本里學的網絡七層模型(OSI)。

OSI是一個開放性的通行系統互連參考模型,他是一個定義的很是好的協議規範。OSI模型有7層結構,每層均可以有幾個子層。

OSI七層模型是一個很好的理論模型,可是在實際應用中都作了裁剪。尤爲是TCP/IP的盛行,把7層結構壓成了4層,

因此不少人都批評OSI七層模型過於複雜,可是做爲一個完整的全面的網絡模型,仍是被你們很是承認的。OSI的7層從上到下分別是應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。

OSI 7層的功能描述:

(1)應用層:與其餘計算機進行通信的一個應用,它是對應應用程序的通訊服務的。例如,一個沒有通訊功能的字處理程序就不能執行通訊的代碼,從事字 處理工做的程序員也不關心OSI的第7層。可是,若是添加了一個傳輸文件的選項,那麼字處理器的程序員就須要實現OSI的第7層。示 例:telnet,HTTP,FTP,WWW,NFS,SMTP等。

(2)表示層:這一層的主要功能是定義數據格式及加密。例如,FTP容許你選擇以二進制或ASII格式傳輸。若是選擇二進制,那麼發送方和接收方不 改變文件的內容。若是選擇ASII格式,發送方將把文本從發送方的字符集轉換成標準的ASII後發送數據。在接收方將標準的ASII轉換成接收方計算機的 字符集。示例:加密,ASII等。

(3)會話層:他定義瞭如何開始、控制和結束一個會話,包括對多個雙向小時的控制和管理,以便在只完成連續消息的一部分時能夠通知應用,從而使表示層看到的數據是連續的,在某些狀況下,若是表示層收到了全部的數據,則用數據表明表示層。示例:RPC,SQL等。

(4)傳輸層:這層的功能包括是否選擇差錯恢復協議仍是無差錯恢復協議,及在同一主機上對不一樣應用的數據流的輸入進行復用,還包括對收到的順序不對的數據包的從新排序功能。示例:TCP,UDP,SPX。

(5)網絡層:這層對端到端的包傳輸進行定義,他定義了可以標識全部結點的邏輯地址,還定義了路由實現的方式和學習的方式。爲了適應最大傳輸單元長度小於包長度的傳輸介質,網絡層還定義瞭如何將一個包分解成更小的包的分段方法。示例:IP,IPX等。

(6)數據鏈路層:他定義了在單個鏈路上如何傳輸數據。這些協議與被討論的歌種介質有關。示例:ATM,FDDI等。

(7)物理層:OSI的物理層規範是有關傳輸介質的特性標準,這些規範一般也參考了其餘組織制定的標準。鏈接頭、針、針的使用、電流、電流、編碼及光調製等都屬於各類物理層規範中的內容。物理層經常使用多個規範完成對全部細節的定義。

相關文章
相關標籤/搜索