国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

高并發(fā)高流量網(wǎng)站架構(gòu)設(shè)計(參考)

目 錄1引言91.1互聯(lián)網(wǎng)的發(fā)展91.2互聯(lián)網(wǎng)網(wǎng)站建設(shè)的新趨勢91.3新浪播客的簡介112網(wǎng)絡(luò)層架構(gòu)122.1鏡像網(wǎng)站技術(shù)122.2 CDN內(nèi)容分發(fā)網(wǎng)絡(luò)132.3應(yīng)用層分布式設(shè)計162.4網(wǎng)絡(luò)層架構(gòu)小

目 錄

1引言9

1.1互聯(lián)網(wǎng)的發(fā)展9

1.2互聯(lián)網(wǎng)網(wǎng)站建設(shè)的新趨勢9

1.3新浪播客的簡介11

2網(wǎng)絡(luò)層架構(gòu)12

2.1鏡像網(wǎng)站技術(shù)12

2.2 CDN內(nèi)容分發(fā)網(wǎng)絡(luò)13

2.3應(yīng)用層分布式設(shè)計16

2.4網(wǎng)絡(luò)層架構(gòu)小結(jié)17

3交換層架構(gòu)17

3.1第四層交換簡介17

3.2硬件實現(xiàn)18

3.3軟件實現(xiàn)18

4服務(wù)器優(yōu)化19

4.1服務(wù)器整體性能考慮19

4.2 Socket優(yōu)化19

4.3硬盤級緩存22

4.4內(nèi)存級緩存24

4.5 CPU與IO 均衡26

4.6讀寫分離26

5應(yīng)用程序?qū)觾?yōu)化28

5.1網(wǎng)站服務(wù)器程序的選擇28

5.2數(shù)據(jù)庫選擇29

5.3服務(wù)器端腳本解析器的選擇30

5.4可配置性32

5.5封裝和中間層思想33

6擴容、容錯處理33

6.1擴容33

6.2容錯34

7總結(jié)及展望35

7.1總結(jié)35

7.2展望36

高并發(fā)高流量網(wǎng)站架構(gòu)

我也來說兩句 查看全部評論 相關(guān)評論

,

*

逆雪寒 (2007-12-17 11:55:26)

1 引言

1.1 互聯(lián)網(wǎng)的發(fā)展

最近十年間,互聯(lián)網(wǎng)已經(jīng)從一個單純的用于科研的,用來傳遞靜態(tài)文檔的美國內(nèi)部網(wǎng)絡(luò),發(fā)展成了一個應(yīng)用于各行各業(yè)的,傳送著海量多媒體及動態(tài)信息的全球網(wǎng)絡(luò)。從規(guī)模上看,互聯(lián)網(wǎng)在主機數(shù)、帶寬、上網(wǎng)人數(shù)等方面幾乎一直保持著指數(shù)增長的趨勢,2006年7月,互聯(lián)網(wǎng)上共有主機439,286,364臺, WWW 站點數(shù)量達到 96,854,877個 [1]。全球上網(wǎng)人口在2004 年達到 7 億 2900萬 [2],中國的上網(wǎng)人數(shù)在 2006 年 12 月達到了約 1億3700 萬[3]。另一方面,互聯(lián)網(wǎng)所傳遞的內(nèi)容也發(fā)生了巨大的變化,早期互聯(lián)網(wǎng)以靜態(tài)、文本的公共信息為主要內(nèi)容,而目前的互聯(lián)網(wǎng)則傳遞著大量的動態(tài)、多媒體及人性化的信息,人們不僅可以通過互聯(lián)網(wǎng)閱讀到動態(tài)生成的信息,而且可以通過它使用電子商務(wù)、即時通信、網(wǎng)上游戲等交互性很強的服務(wù)。因此,可以說互聯(lián)網(wǎng)已經(jīng)不再僅僅是一個信息共享網(wǎng)絡(luò),而已經(jīng)成為了一個無所不在的交互式服務(wù)的平臺。

1.2 互聯(lián)網(wǎng)網(wǎng)站建設(shè)的新趨勢

互聯(lián)網(wǎng)不斷擴大的規(guī)模,日益增長的用戶群,以及web2.0[4]的興起,對互聯(lián)網(wǎng)網(wǎng)站建設(shè)提出了新的要求:

*

高性能和高可擴展性。2000 年 5 月,訪問量排名世界第一(統(tǒng)計數(shù)據(jù)來源[5])的Yahoo [6]聲稱其日頁瀏覽數(shù)達到 6 億 2500 萬,即每秒約 30,000 次HTTP 請求(按每個頁面瀏覽平均產(chǎn)生 4 次請求計算) 。這樣大規(guī)模的訪問量對服務(wù)的性能提出了非常高的要求。更為重要的是,互聯(lián)網(wǎng)受眾的廣泛性,使得成功的互聯(lián)網(wǎng)服務(wù)的訪問量增長潛力和速度非常大,因此服務(wù)系統(tǒng)必須具有非常好的可擴展性,以應(yīng)付將來可能的服務(wù)增長。

*

支持高度并發(fā)的訪問。高度并發(fā)的訪問對服務(wù)的存儲與并發(fā)能力提出了很高的要求,當(dāng)前主流的超標(biāo)量和超流水線處理器能處理的并發(fā)請求數(shù)是有限的,因為隨著并發(fā)數(shù)的上升,進程調(diào)度的開銷會很快上升。互聯(lián)網(wǎng)廣域網(wǎng)的本質(zhì)決定了其訪問的延遲時間較長,因此一個請求完成時間也較長,按從請求產(chǎn)生到頁面下載完成 3 秒計算, Yahoo 在 2000 年 5 月時平均有 90,000 個并發(fā)請求。而且對于較復(fù)雜的服務(wù),服務(wù)器往往要維護用戶會話的信息,例如一個互聯(lián)網(wǎng)網(wǎng)站如果每天有 100 萬次用戶會話,每次 20分鐘的話,那平均同時就會有約 14000 個并發(fā)會話。

*

,

高可用性。互聯(lián)網(wǎng)服務(wù)的全球性決定了其每天 24 小時都會有用戶訪問,因此任何服務(wù)的停止都會對用戶造成影響。而對于電子商務(wù)等應(yīng)用,暫時的服務(wù)中止則意味著客戶的永久失去及大量的經(jīng)濟損失,例如 ebay.com[7]1999 年 6 月的一次 22小時的網(wǎng)站不可訪問,對此網(wǎng)站的 380萬用戶的忠誠度造成巨大影響,使得 Ebay 公司不得不支付了近500萬美元用于補償客戶的損失,而該公司的市值同期下降了 40 億美元[8]。因此,關(guān)鍵互聯(lián)網(wǎng)應(yīng)用的可用性要求非常高。

1.3 新浪播客的簡介

以YouTube [9]為代表的微視頻分享網(wǎng)站近來方興未艾,僅2006年一年,國內(nèi)就出現(xiàn)近百家仿YouTube 的微視頻分享網(wǎng)站[10],試圖復(fù)制 YouTube的成功模式。此類網(wǎng)站可以說是Web2.0概念下的代表網(wǎng)站,具有Web2.0網(wǎng)站所有典型特征:高并發(fā),高流量,數(shù)據(jù)量大,邏輯復(fù)雜,用戶分散等等。新浪[11]作為國內(nèi)最大的門戶網(wǎng)站,在2005年成功運作新浪博客的基礎(chǔ)上,于2006年底推出了新浪播客服務(wù)。新浪播客作為國內(nèi)門戶網(wǎng)站中第一個微視頻分享服務(wù)的網(wǎng)站,依靠新浪網(wǎng)站及新浪博客的巨大人氣資源,在推出后不到半年的時間內(nèi),取得了巨大的成功:同類網(wǎng)站中上傳視頻數(shù)量第一、流量增長最快、用戶數(shù)最多[12],所有這些成績的取得的背后,是巨大的硬件投入,良好的架構(gòu)支撐和靈活的應(yīng)用層軟件設(shè)計。

本文是作者在新浪愛問搜索部門實習(xí)及參與新浪播客開發(fā)的經(jīng)驗和教訓(xùn)的回顧,是作者對一般高并發(fā)高流量網(wǎng)站架構(gòu)的總結(jié)和抽象。

2 網(wǎng)絡(luò)層架構(gòu)

2.1 鏡像網(wǎng)站技術(shù)

鏡像網(wǎng)站是指將一個完全相同的站點放到幾個服務(wù)器上,分別有自己的URL ,這些服務(wù)器上的網(wǎng)站互相稱為鏡像網(wǎng)站[13]。鏡像網(wǎng)站和主站并沒有太大差別,或者可以視為主站的拷貝。鏡像網(wǎng)站的好處是:如果不能對主站作正常訪問(如服務(wù)器故障,網(wǎng)絡(luò)故障或者網(wǎng)速太慢等),仍能通過鏡像服務(wù)器獲得服務(wù)。不便之處是:更新網(wǎng)站內(nèi)容的時候,需要同時更新多個服務(wù)器;需要用戶記憶超過一個網(wǎng)址,或需要用戶選擇訪問多個鏡像網(wǎng)站中的一個,而用戶選擇的,不一定是最優(yōu)的。在用戶選擇的過程中,缺乏必要的可控性。

在互聯(lián)網(wǎng)發(fā)展的初期,互聯(lián)網(wǎng)上的網(wǎng)站內(nèi)容很少,而且大都是靜態(tài)內(nèi)容,更新頻率底。但因為服務(wù)器運算能力低,帶寬小,網(wǎng)速慢,熱門網(wǎng)站的訪問壓力還是很大。鏡像網(wǎng)站技術(shù)在這種情況下作為一種有效解決方案,被廣泛采用。隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的網(wǎng)站使用服務(wù)器端腳本動態(tài)生成內(nèi)容,同步更新越來越困難,對可控性要求越來越高,鏡像技術(shù)因為不能滿足這類網(wǎng)站的需要,漸漸的淡出了人們的視線。但有一些大型的軟件下載站,因為符合鏡像網(wǎng)站的條件——下載的內(nèi)容是靜態(tài)的,更新頻率較低,對帶寬,速度要求又比較高,如國

,

外的SourceForge ([url]http://www.SourceForge.net[/url],著名開源軟件托管網(wǎng)站),F(xiàn)edora ([url]http://fedoraproject.org[/url],RedHat 贊助的Linux 發(fā)行版),國內(nèi)的華軍軟件園([url]http://www.onlinedown.net[/url]),天空軟件站([url]http://www.skycn.com[/url])等,還在使用這項技術(shù)(圖

1)。

圖1 上圖:天空軟件站首頁的鏡像選擇頁面

下圖:SourceForge 下載時的鏡像選擇頁面

在網(wǎng)站建設(shè)的過程中,可以根據(jù)實際情況,將靜態(tài)內(nèi)容作一些鏡像,以加快訪問速度,提升用戶體驗。

2.2 CDN內(nèi)容分發(fā)網(wǎng)絡(luò)

CDN的全稱是Content Delivery Network ,即內(nèi)容分發(fā)網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的互聯(lián)網(wǎng)中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”,使用戶可以就近取得所需的內(nèi)容,分散服務(wù)器的壓力,解決互聯(lián)網(wǎng)擁擠的狀況,提高用戶訪問網(wǎng)站的響應(yīng)速度。從而解決由于網(wǎng)絡(luò)帶寬小、用戶訪問量大、網(wǎng)點分布不均等原因所造成的用戶訪問網(wǎng)站響應(yīng)速度慢的問題[14]。

CDN與鏡像網(wǎng)站技術(shù)的不同之處在于網(wǎng)站代替用戶去選擇最優(yōu)的內(nèi)容服務(wù)器,增強了可控制性。CDN 其實是夾在網(wǎng)頁瀏覽者和被訪問的服務(wù)器中間的一層鏡像或者說緩存,瀏覽者訪問時點擊的還是服務(wù)器原來的URL 地址,但是看到的內(nèi)容其實是對瀏覽者來說最優(yōu)的一臺鏡像服務(wù)器上的頁面緩存內(nèi)容。這是通過調(diào)整服務(wù)器的域名解析來實現(xiàn)的。使用CDN 技術(shù)的域名解析服務(wù)器需要維護一個鏡像服務(wù)器列表和一份來訪IP 到鏡像服務(wù)器的對應(yīng)表。當(dāng)一個用戶的請求到來的時候,根據(jù)用戶的IP ,查詢對應(yīng)表,得到最優(yōu)的鏡像服務(wù)器的IP 地址,返回給用戶。這里的最優(yōu),需要綜合考慮服務(wù)器的處理能力,帶寬,離訪問者的距離遠近等因素。當(dāng)某個地方的鏡像網(wǎng)站流量過大,帶寬消耗過快,或者出現(xiàn)服務(wù)器,網(wǎng)絡(luò)等故障的時候,可以很方便的設(shè)置將用戶的訪問轉(zhuǎn)到另外一個地方(圖

2)。這樣就增強了可控制性。

圖2 CDN原理示意圖

CDN網(wǎng)絡(luò)加速技術(shù)也有它的局限性。首先,因為內(nèi)容更新的時候,需要同步更新多臺鏡像服務(wù)器,所以它也只適用于內(nèi)容更新不太頻繁,或者對實時性要求不是很高的網(wǎng)站;其次,DNS 解析有緩存,當(dāng)某一個鏡像網(wǎng)站的訪問需要

,

轉(zhuǎn)移時,主DNS 服務(wù)器更改了IP 解析結(jié)果,但各地的DNS 服務(wù)器緩存更新會滯后一段時間,這段時間內(nèi)用戶的訪問仍然會指向該服務(wù)器,可控制性依然有不足。

目前,國內(nèi)訪問量較高的大型網(wǎng)站如新浪、網(wǎng)易等的資訊頻道,均使用CDN 網(wǎng)絡(luò)加速技術(shù)(圖3),雖然網(wǎng)站的訪問量巨大,但無論在什么地方訪問,速度都會很快。但論壇,郵箱等更新頻繁,實時性要求高的頻道,則不適合使用這種技術(shù)。

圖3 新浪網(wǎng)使用ChinaCache CDN服務(wù)。

ChinaCache的服務(wù)節(jié)點全球超過130個,

其中中國節(jié)點超過80個,

覆蓋全國主要6大網(wǎng)絡(luò)的主要省份[15]。

2.3 應(yīng)用層分布式設(shè)計

新浪播客為了獲得CDN 網(wǎng)絡(luò)加速的優(yōu)點,又必須避免CDN 的不足,在應(yīng)用層軟件設(shè)計上,采取了一個替代的辦法。新浪播客提供了一個供播放器查詢視頻文件地址的接口。當(dāng)用戶打開視頻播放頁面的時候,播放器首先連接查詢接口,通過接口獲得視頻文件所在的最優(yōu)的鏡像服務(wù)器地址,然后再到該服務(wù)器去下載視頻文件。這樣,用一次額外的查詢獲得了全部的控制性,而這次查詢的通訊流量非常小,幾乎可以忽略不計。CDN 中由域名解析獲得的靈活性也保留了下來:由接口程序維護鏡像網(wǎng)站列表及來訪IP 到鏡像網(wǎng)站的對應(yīng)表即可。鏡像網(wǎng)站中不需要鏡像所有的內(nèi)容,而是只鏡像更新速度較慢的視頻文件。這是完全可以承受的。

2.4 網(wǎng)絡(luò)層架構(gòu)小結(jié)

從整個互聯(lián)網(wǎng)絡(luò)的高度來看網(wǎng)站架構(gòu),努力的方向是明確的:讓用戶就近取得內(nèi)容,但又要在速度和可控制性之間作一個平衡。對于更新比較頻繁內(nèi)容,由于難以保持鏡像網(wǎng)站之間的同步,則需要使用其他的輔助技術(shù)。

3 交換層架構(gòu)

3.1 第四層交換簡介

按照OSI [16]七層模型,第四層是傳輸層。傳輸層負責(zé)端到端通信,在IP 協(xié)議棧中是TCP 和UDP 所在的協(xié)議層。TCP 和UDP 數(shù)據(jù)包中包含端口號(port number ),它們可以唯一區(qū)分每個數(shù)據(jù)包所屬的協(xié)議和應(yīng)用程序。接收端計算機的操作系統(tǒng)根據(jù)端口號確定所收到的IP 包類型,并把它交給合適的高層程序。IP 地址和端口號的組合通常稱作“插口(Socket )”。

,

第四層交換的一個簡單定義是:它是一種傳輸功能,它決定傳輸不僅僅依據(jù)MAC 地址(第二層網(wǎng)橋) 或源/目標(biāo)IP 地址(第三層路由) ,而且依據(jù)IP 地址與 TCP/UDP (第四層) 應(yīng)用端口號的組合(Socket )[17]。第四層交換功能就像是虛擬IP ,指向?qū)嶋H的服務(wù)器。它傳輸?shù)臄?shù)據(jù)支持多種協(xié)議,有HTTP 、FTP 、NFS 、 Telnet等。

以HTTP 協(xié)議為例,在第四層交換中為每個服務(wù)器組設(shè)立一個虛擬IP (Virtue IP ,VIP ),每組服務(wù)器支持某一個或幾個域名。在域名服務(wù)器(DNS )中存儲服務(wù)器組的VIP ,而不是某一臺服務(wù)器的真實地址。

當(dāng)用戶請求頁面時,一個帶有目標(biāo)服務(wù)器組的VIP 連接請求發(fā)送給第四層交換機。第四層交換機使用某種選擇策略,在組中選取最優(yōu)的服務(wù)器,將數(shù)據(jù)包中的目標(biāo) VIP地址用實際服務(wù)器的IP 地址取代,并將連接請求傳給該服務(wù)器。第四層交換一般都實現(xiàn)了會話保持功能,即同一會話的所有的包由第四層交換機進行映射后,在用戶和同一服務(wù)器間進行傳輸[18]。

第四層交換按實現(xiàn)分類,分為硬件實現(xiàn)和軟件實現(xiàn)。

3.2 硬件實現(xiàn)

第四層交換的硬件實現(xiàn)一般都由專業(yè)的硬件廠商作為商業(yè)解決方案提供。常見的有Alteon [19],F(xiàn)5[20]等。這些產(chǎn)品非常昂貴,但是能夠提供非常優(yōu)秀的性能和很靈活的管理能力。Yahoo 中國當(dāng)初接近2000臺服務(wù)器使用了三四臺Alteon 就搞定了[21]。鑒于條件關(guān)系,這里不展開討論。

3.3 軟件實現(xiàn)

第四層交換也可以通過軟件實現(xiàn),不過性能比專業(yè)硬件稍差,但是滿足一定量的壓力還是可以達到的,而且軟件實現(xiàn)配置起來更靈活。軟件四層交換常用的有 Linux上的LVS (Linux Virtual Server ),它提供了基于心跳(heart beat )的實時災(zāi)難應(yīng)對解決方案,提高了系統(tǒng)的魯棒性,同時提供了靈活的VIP 配置和管理功能,可以同時滿足多種應(yīng)用需求[22]。

4 服務(wù)器優(yōu)化

4.1 服務(wù)器整體性能考慮

對于價值昂貴的服務(wù)器來說,怎樣配置才能發(fā)揮它的最大功效,又不至于影響正常的服務(wù),這是在設(shè)計網(wǎng)站架構(gòu)的時候必須要考慮的。常見的影響服務(wù)器的處理速度的因素有:網(wǎng)絡(luò)連接,硬盤讀寫,內(nèi)存空間,CPU 速度。如果服務(wù)器的某一個部件滿負荷運轉(zhuǎn)仍然低于需要,而其他部件仍有能力剩余,我們將之稱為性能瓶頸。服務(wù)器想要發(fā)揮最大的功效,關(guān)鍵的是消除瓶頸,讓所有的部件都被充分的利用起來。

,

4.2 Socket優(yōu)化

以標(biāo)準(zhǔn)的 GNU/Linux 為例。GNU/Linux 發(fā)行版試圖對各種部署情況都進行優(yōu)化,這意味著對具體服務(wù)器的執(zhí)行環(huán)境來說,標(biāo)準(zhǔn)的發(fā)行版可能并不是最優(yōu)化的[23]。GNU/Linux 提供了很多可調(diào)節(jié)的內(nèi)核參數(shù),可以使用這些參數(shù)為服務(wù)器進行動態(tài)配置,包括影響 Socket 性能的一些重要的選項。這些選項包含在 /proc 虛擬文件系統(tǒng)中。這個文件系統(tǒng)中的每個文件都表示一個或多個參數(shù),它們可以通過 cat 工具進行讀取,或使用 echo 命令進行修改。這里僅列出一些影響TCP/IP 棧性能的可調(diào)節(jié)內(nèi)核參數(shù)[24]:

*

/proc/sys/net/ipv4/tcp_window_scaling “1”(1表示啟用該選項,0表示關(guān)閉,下同) 啟用 RFC[25] 1323[26] 定義的 window scaling ;要支持超過 64KB 的窗口,必須啟用該值。

*

/proc/sys/net/ipv4/tcp_sack “1”啟用有選擇的應(yīng)答

(Selective Acknowledgment ),通過有選擇地應(yīng)答亂序接收到的報文來提高性能(這樣可以讓發(fā)送者只發(fā)送丟失的報文段);對于廣域網(wǎng)通信來說,這個選項應(yīng)該啟用,但是這也會增加對 CPU 的占用。

*

/proc/sys/net/ipv4/tcp_timestamps “1” 以一種比重發(fā)超時更精確的方法(參閱 RFC 1323)來啟用對 RTT 的計算;為了實現(xiàn)更好的性能應(yīng)該啟用這個選項。

*

/proc/sys/net/ipv4/tcp_mem “24576 32768 49152” 確定 TCP 棧應(yīng)該如何反映內(nèi)存使用;每個值的單位都是內(nèi)存頁(通常是 4KB)。第一個值是內(nèi)存使用的下限。第二個值是內(nèi)存壓力模式開始對緩沖區(qū)使用應(yīng)用壓力的上限。第三個值是內(nèi)存上限。超過這個上限時可以將報文丟棄,從而減少對內(nèi)存的使用。

*

/proc/sys/net/ipv4/tcp_wmem “4096 16384 131072” 為自動調(diào)優(yōu)定義每個 socket 使用的內(nèi)存。第一個值是為 socket 的發(fā)送緩沖區(qū)分配的最少字節(jié)數(shù)。第二個值是默認值(該值會被 wmem_default 覆蓋),緩沖區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值。第三個值是發(fā)送緩沖區(qū)空間的最大字節(jié)數(shù)(該值會被 wmem_max 覆蓋)。

*

,

/proc/sys/net/ipv4/tcp_westwood “1” 啟用發(fā)送者端的擁塞控制算法,它可以維護對吞吐量的評估,并試圖對帶寬的整體利用情況進行優(yōu)化;對于 WAN 通信來說應(yīng)該啟用這個選項。

與其他調(diào)優(yōu)努力一樣,最好的方法實際上就是不斷進行實驗。具體應(yīng)用程序的行為、處理器的速度以及可用內(nèi)存的多少都會影響到這些參數(shù)對性能作用的效果。在某些情況中,一些認為有益的操作可能恰恰是有害的(反之亦然)。因此,需要逐一試驗各個選項,然后檢查每個選項的結(jié)果,最后得出最適合具體機器的一套參數(shù)。

如果重啟了 GNU/Linux 系統(tǒng),設(shè)置的內(nèi)核參數(shù)都會恢復(fù)成默認值。為了將所設(shè)置的值作為這些參數(shù)的默認值,可以使用 /etc/rc.local 文件,在系統(tǒng)每次啟動時自動將這些參數(shù)配置成所需要的值。

在檢測每個選項的更改帶來的效果的時候,GNU/Linux上有一些非常強大的工具可以使用:

*

ping 這是用于檢查主機的可用性的最常用的工具,也可以用于計算網(wǎng)絡(luò)帶寬延時。

*

traceroute 打印連接到特定網(wǎng)絡(luò)主機所經(jīng)過的一系列路由器和網(wǎng)關(guān)的路徑(路由),從而確定每個 hop 之間的延時。

*

netstat 確定有關(guān)網(wǎng)絡(luò)子系統(tǒng)、協(xié)議和連接的各種統(tǒng)計信息。

*

tcpdump 顯示一個或多個連接的協(xié)議級的報文跟蹤信息,其中包括時間信息,可以使用這些信息來研究不同協(xié)議的報文時間。

*

Ethereal 以一個易于使用的圖形化界面提供 tcpump (報文跟蹤)的信息,支持報文過濾功能。

*

,

iperf 測量 TCP 和 UDP 的網(wǎng)絡(luò)性能;測量最大帶寬,并匯報延時和數(shù)據(jù)報的丟失情況。

*

逆雪寒 (2007-12-17 11:55:53)

4.3 硬盤級緩存

硬盤級別的緩存是指將需要動態(tài)生成的內(nèi)容暫時緩存在硬盤上,在一個可接受的延遲時間范圍內(nèi),同樣的請求不再動態(tài)生成,以達到節(jié)約系統(tǒng)資源,提高網(wǎng)站承受能力的目的。Linux 環(huán)境下硬盤級緩存一般使用Squid [27]。

Squid是一個高性能的代理緩存服務(wù)器。和一般的代理緩存軟件不同,Squid 用一個單獨的、非模塊化的、I/O驅(qū)動的進程來處理所有的客戶端請求。它接受來自客戶端對目標(biāo)對象的請求并適當(dāng)?shù)靥幚磉@些請求。比如說,用戶通過瀏覽器想下載(即瀏覽)一個web 頁面,瀏覽器請求Squid 為它取得這個頁面。 Squid 隨之連接到頁面所在的原始服務(wù)器并向服務(wù)器發(fā)出取得該頁面的請求。取得頁面后,Squid 再將頁面返回給用戶端瀏覽器,并且同時在Squid 本地緩存目錄里保存一份副本。當(dāng)下一次有用戶需要同一頁面時,Squid 可以簡單地從緩存中讀取它的副本,直接返回給用戶,而不用再次請求原始服務(wù)器。當(dāng)前的Squid 可以處理HTTP , FTP, GOPHER, SSL和WAIS 等協(xié)議。

Squid默認通過檢測HTTP 協(xié)議頭的Expires 和 Cache-Control字段來決定緩存的時間。在實際應(yīng)用中,可以顯式的在服務(wù)器端腳本中輸出HTTP 頭,也可以通過配置apache 的 mod_expires模塊,讓apache 自動的給每一個網(wǎng)頁加上過期時間。對于靜態(tài)內(nèi)容,如圖片,視頻文件,供下載的軟件等,還可以針對文件類型(擴展名),用 Squid 的 refresh_pattern 來指定緩存時間。

Squid 運行的時候,默認會在硬盤上建兩層hash 目錄,用來存儲緩存的Object 。它還會在內(nèi)存中建立一個Hash Table,用來記錄硬盤中Object 分布的情況。如果Squid 配置成為一個Squid 集群中的一個的話,它還會建立一個 Digest Table(摘要表) ,用來存儲其它 Squid 上的Object 摘要。當(dāng)用戶端想要的資料本地硬盤上沒有時,可以很快的知道應(yīng)該去集群中的哪一臺機器獲得。在硬盤空間快要達到配置限額的時候,可以配置使用某種策略(默認使用LRU :Least Recently Used-最近最少用)刪除一些Object ,從而騰出空間[28][29]。

集群中的Squid Server 之間可以有兩種關(guān)系:第一種關(guān)系是:Child 和 Parent。當(dāng) Child Squid Server 沒有資料時,會直接向 Parent Squid Server 要資料,然后一直等,直到 Parent 給它資料為止。第二種關(guān)系是:Sibling 和 Sibling 。當(dāng) Squid Server 沒有資料時,會先向 Sibling 的 Squid Server 要資料,如果 Sibling 沒資料,就跳過它向 Parent 要或直接上原始網(wǎng)站去拿。

默認配置的Squid ,沒有經(jīng)過任何優(yōu)化的時候,一般可以達到 50 的命中率[30](圖4)。如果需要,還可以通過參數(shù)優(yōu)化,拆分業(yè)務(wù),優(yōu)化文件系統(tǒng)等辦法,使得Squid 達到 90 以上的緩存命中率。 Squid處理TCP 連接消

,

耗的服務(wù)器資源比真正的HTTP 服務(wù)器要小的多,當(dāng)Squid 分擔(dān)了大部分連接,網(wǎng)站的承壓能力就大大增強了。

4 某網(wǎng)站使用MRTG 工具檢測到的Squid 命中率

藍線表示Squid 的流量,綠色部分表示Apache 流量

4.4 內(nèi)存級緩存

內(nèi)存級別的緩存是指將需要動態(tài)生成的內(nèi)容暫時緩存在內(nèi)存里,在一個可接受的延遲時間范圍內(nèi),同樣的請求不再動態(tài)生成,而是直接從內(nèi)存中讀取。Linux 環(huán)境下內(nèi)存級緩存Memcached [31]是一個不錯的選擇。

Memcached是danga.com (運營Live Journal [32]的技術(shù)團隊)開發(fā)的一套非常優(yōu)秀的分布式內(nèi)存對象緩存系統(tǒng),用于在動態(tài)系統(tǒng)中減少數(shù)據(jù)庫負載,提升性能。和 Squid 的前端緩存加速不同,它是通過基于內(nèi)存的對象緩存來減少數(shù)據(jù)庫查詢的方式改善網(wǎng)站的性能,而其中最吸引人的一個特性就是支持分布式部署;也就是說可以在一群機器上建立一堆 Memcached 服務(wù),每個服務(wù)可以根據(jù)具體服務(wù)器的硬件配置使用不同大小的內(nèi)存塊,這樣,理論上可以建立一個無限大的基于內(nèi)存的緩存系統(tǒng)。

Memcached 是以守護程序方式運行于一個或多個服務(wù)器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等[附錄1]??蛻舳耸紫扰c Memcached 服務(wù)建立連接,然后存取對象。每個被存取的對象都有一個唯一的標(biāo)識符 key,存取操作均通過這個 key 進行,保存的時候還可以設(shè)置有效期。保存在 Memcached 中的對象實際上是放置在內(nèi)存中的,而不是在硬盤上。Memcached 進程運行之后,會預(yù)申請一塊較大的內(nèi)存空間,自己進行管理,用完之后再申請一塊,而不是每次需要的時候去向操作系統(tǒng)申請。Memcached 將對象保存在一個巨大的Hash 表中,它還使用NewHash 算法來管理Hash 表,從而獲得進一步的性能提升。所以當(dāng)分配給Memcached 的內(nèi)存足夠大的時候, Memcached的時間消耗基本上只是網(wǎng)絡(luò)Socket 連接了[33]。

Memcached也有它的不足。首先它的數(shù)據(jù)是保存在內(nèi)存當(dāng)中的,一旦服務(wù)進程重啟(進程意外被關(guān)掉,機器重啟等),數(shù)據(jù)會全部丟失。其次 Memcached以root 權(quán)限運行,而且Memcached 本身沒有任何權(quán)限管理和認證功能,安全性不足。第一條是Memcached 作為內(nèi)存緩存服務(wù)使用無法避免的,當(dāng)然,如果內(nèi)存中的數(shù)據(jù)需要保存,可以采取更改Memcached 的源代碼,增加定期寫入硬盤的功能。對于第二條,我們可以將 Memcached服務(wù)綁定在內(nèi)網(wǎng)IP 上,通過Linux 防火墻進行防護。

4.5 CPU與IO 均衡

標(biāo)簽: