成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

目 錄1引言91.1互聯(lián)網(wǎng)的發(fā)展91.2互聯(lián)網(wǎng)網(wǎng)站建設(shè)的新趨勢(shì)91.3新浪播客的簡(jiǎn)介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è)計(jì)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è)的新趨勢(shì)9

1.3新浪播客的簡(jiǎn)介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è)計(jì)16

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

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

3.1第四層交換簡(jiǎn)介17

3.2硬件實(shí)現(xiàn)18

3.3軟件實(shí)現(xiàn)18

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

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

4.2 Socket優(yōu)化19

4.3硬盤(pán)級(jí)緩存22

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

4.5 CPU與IO 均衡26

4.6讀寫(xiě)分離26

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

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

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

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

5.4可配置性32

5.5封裝和中間層思想33

6擴(kuò)容、容錯(cuò)處理33

6.1擴(kuò)容33

6.2容錯(cuò)34

7總結(jié)及展望35

7.1總結(jié)35

7.2展望36

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

我也來(lái)說(shuō)兩句 查看全部評(píng)論 相關(guān)評(píng)論

,

*

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

1 引言

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

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

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

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

*

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

*

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

*

,

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

1.3 新浪播客的簡(jiǎn)介

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

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

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

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

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

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

,

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

1)。

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

下圖:SourceForge 下載時(shí)的鏡像選擇頁(yè)面

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

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

CDN的全稱是Content Delivery Network ,即內(nèi)容分發(fā)網(wǎng)絡(luò)。其目的是通過(guò)在現(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èn)網(wǎng)站的響應(yīng)速度。從而解決由于網(wǎng)絡(luò)帶寬小、用戶訪問(wèn)量大、網(wǎng)點(diǎn)分布不均等原因所造成的用戶訪問(wèn)網(wǎng)站響應(yīng)速度慢的問(wèn)題[14]。

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

2)。這樣就增強(qiáng)了可控制性。

圖2 CDN原理示意圖

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

,

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

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

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

ChinaCache的服務(wù)節(jié)點(diǎn)全球超過(guò)130個(gè),

其中中國(guó)節(jié)點(diǎn)超過(guò)80個(gè),

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

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

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

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

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

3 交換層架構(gòu)

3.1 第四層交換簡(jiǎn)介

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

,

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

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

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

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

3.2 硬件實(shí)現(xiàn)

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

3.3 軟件實(shí)現(xiàn)

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

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

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

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

,

4.2 Socket優(yōu)化

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

*

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

*

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

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

*

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

*

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

*

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

*

,

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

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

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

在檢測(cè)每個(gè)選項(xiàng)的更改帶來(lái)的效果的時(shí)候,GNU/Linux上有一些非常強(qiáng)大的工具可以使用:

*

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

*

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

*

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

*

tcpdump 顯示一個(gè)或多個(gè)連接的協(xié)議級(jí)的報(bào)文跟蹤信息,其中包括時(shí)間信息,可以使用這些信息來(lái)研究不同協(xié)議的報(bào)文時(shí)間。

*

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

*

,

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

*

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

4.3 硬盤(pán)級(jí)緩存

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

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

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

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

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

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

,

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

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

藍(lán)線表示Squid 的流量,綠色部分表示Apache 流量

4.4 內(nèi)存級(jí)緩存

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

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

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

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

4.5 CPU與IO 均衡

標(biāo)簽: