国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
轉(zhuǎn)】大訪問量系統(tǒng)的設(shè)計(二)
WindySky
>《架構(gòu)設(shè)計》
2017.11.16
關(guān)注
目錄
1.網(wǎng)絡(luò)層架構(gòu)
1.1 鏡像網(wǎng)站技術(shù)
1.2 CDN內(nèi)容分發(fā)網(wǎng)絡(luò)——調(diào)整服務(wù)器的域名解析來實現(xiàn)
1.3 應(yīng)用層分布式設(shè)計——查詢、定向
2.交換層架構(gòu)
2.1 第四層交換簡介
2.2 硬件實現(xiàn)
2.3 軟件實現(xiàn)——LVS,負(fù)載均衡
3.應(yīng)用程序?qū)觾?yōu)化
3.1 網(wǎng)站服務(wù)器程序的選擇
3.2 數(shù)據(jù)庫選擇——mysqL主輔、集群設(shè)計
3.3 服務(wù)器端腳本解析器的選擇——JSP、PHP、ASP
3.4 可配置性
3.5 封裝和中間層思想
4.服務(wù)器優(yōu)化(接收請求的服務(wù)器優(yōu)化)
4.1 Socket優(yōu)化——調(diào)相關(guān)內(nèi)核參數(shù),再用命令檢測效果
4.2 硬盤級緩存——squid
4.3 內(nèi)存級緩存——memcached
4.4 CPU與IO均衡
4.5 讀寫分離——文件系統(tǒng)改進
5.擴容、容錯處理
5.1 擴容
5.2 容錯
1.網(wǎng)絡(luò)層架構(gòu)
1.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 (
http://www.SourceForge.net
,著名開源軟件托管網(wǎng)站),F(xiàn)edora(
http://fedoraproject.org
,RedHat贊助的Linux發(fā)行版),國內(nèi)的華軍軟件園(
http://www.onlinedown.net
),天空軟件站(
http://www.skycn.com
)等,還在使用這項技術(shù)(圖1)。
1.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ù)器的處理能力,帶寬,離訪問者的距離遠(yuǎn)近等因素。當(dāng)某個地方的鏡像網(wǎng)站流量過大,帶寬消耗過快,或者出現(xiàn)服務(wù)器,網(wǎng)絡(luò)等故障的時候,可以很方便的設(shè)置將用戶的訪問轉(zhuǎn)到另外一個地方(圖2)。這樣就增強了可控制性。
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ù)。
1.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)容,而是只鏡像更新速度較慢的視頻文件。這是完全可以承受的。
網(wǎng)絡(luò)層架構(gòu)小結(jié)
從整個互聯(lián)網(wǎng)絡(luò)的高度來看網(wǎng)站架構(gòu),努力的方向是明確的:讓用戶就近取得內(nèi)容,但又要在速度和可控制性之間作一個平衡。對于更新比較頻繁內(nèi)容,由于難以保持鏡像網(wǎng)站之間的同步,則需要使用其他的輔助技術(shù)。
2.交換層架構(gòu)
2.1 第四層交換簡介
第四層交換的一個簡單定義是:它是一種傳輸功能,它決定傳輸不僅僅依據(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ù)器間進行傳輸
2.2 硬件實現(xiàn)
2.3 軟件實現(xiàn)
軟件四層交換常用的有 Linux上的LVS(Linux Virtual Server),它提供了基于心跳(heart beat)的實時災(zāi)難應(yīng)對解決方案,提高了系統(tǒng)的魯棒性,同時提供了靈活的VIP配置和管理功能,可以同時滿足多種應(yīng)用需求
3.應(yīng)用程序?qū)觾?yōu)化
3.1 網(wǎng)站服務(wù)器程序的選擇
經(jīng)統(tǒng)計[40],當(dāng)前互聯(lián)網(wǎng)上有超過50%的網(wǎng)站主機使用Apache[41]服務(wù)器程序。 Apache是開源界的首選Web服務(wù)器,因為它的強大和可靠,而且適用于絕大部分的應(yīng)用場合。但是它的強大有時候卻顯得笨重,配置文件復(fù)雜得讓人望而生畏,高并發(fā)情況下效率不太高。而輕量級的Web服務(wù)器Lighttpd[42]卻是后起之秀,基于單進程多路復(fù)用技術(shù),其靜態(tài)文件的響應(yīng)能力遠(yuǎn)高于 Apache。 Lighttpd對PHP的支持也很好,還可以通過Fastcgi方式支持其他的語言,比如Python等。雖然Lighttpd是輕量級的服務(wù)器,功能上不能跟Apache比,某些復(fù)雜應(yīng)用無法勝任,但即使是大部分內(nèi)容動態(tài)生成的網(wǎng)站,仍免不了會有一些靜態(tài)元素,比如圖片、JS腳本、CSS等等,可以考慮將Lighttpd放在Squid的前面,構(gòu)成 Lighttpd->Squid->Apache的一條處理鏈,Lighttpd在最前面,專門處理靜態(tài)內(nèi)容的請求,把動態(tài)內(nèi)容請求通過 Proxy模塊轉(zhuǎn)發(fā)給Squid,如果Squid中有該請求的內(nèi)容且沒有過期,則直接返回給Lighttpd。新請求或者過期的頁面請求交由Apache 中的腳本程序來處理。經(jīng)過Lighttpd和Squid的兩級過濾,Apache需要處理的請求大大減少,減少了Web應(yīng)用程序的壓力。同時這樣的構(gòu)架,便于把不同的處理分散到多臺計算機上進行,由Lighttpd在前面統(tǒng)一分發(fā)。
在這種架構(gòu)下,每一級都是可以進行單獨優(yōu)化的,比如Lighttpd可以采用異步IO方式,Squid可以啟用內(nèi)存來緩存,Apache可以啟用MPM (Multi -Processing Modules,多道處理模塊)等,并且每一級都可以使用多臺機器來均衡負(fù)載,伸縮性好。
著名視頻分享網(wǎng)站YouTube就是選擇使用Lighttpd作為網(wǎng)站的前臺服務(wù)器程序。
3.2 數(shù)據(jù)庫選擇
MySQL提供多種后臺存儲引擎的選擇,如MyISAM, Heap, InnoDB,Berkeley Db等。缺省格式為MyISAM。 MyISAM 存儲引擎與磁盤兼容的非常好
主輔結(jié)構(gòu)
MySQL也有一些它自身的缺陷,如缺乏圖形界面,缺乏存儲過程, 還不支持觸發(fā)器,參照完整性,子查詢和數(shù)據(jù)表視圖等,但這些功能都在開發(fā)者的TO-DO列表當(dāng)中。這就是開源的力量:你永遠(yuǎn)可以期待更好。
國外的Yahoo!,國內(nèi)的新浪,搜狐等很多大型商業(yè)網(wǎng)站都使用MySQL 作為后臺數(shù)據(jù)庫。對于一般的網(wǎng)站系統(tǒng),無論從成本還是性能上考慮,MySQL應(yīng)該是最佳的選擇。
3.3 服務(wù)器端腳本解析器的選擇
3.4 可配置性
3.5 封裝和中間層思想
4.服務(wù)器優(yōu)化
常見的影響服務(wù)器的處理速度的因素有:網(wǎng)絡(luò)連接,硬盤讀寫,內(nèi)存空間,CPU速度。
4.1 Socket優(yōu)化
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ù)
如果重啟了 GNU/Linux 系統(tǒng),設(shè)置的內(nèi)核參數(shù)都會恢復(fù)成默認(rèn)值。為了將所設(shè)置的值作為這些參數(shù)的默認(rèn)值,可以使用 /etc/rc.local 文件,在系統(tǒng)每次啟動時自動將這些參數(shù)配置成所需要的值。
4.2 硬盤級緩存——squid
硬盤級別的緩存是指將需要動態(tài)生成的內(nèi)容暫時緩存在硬盤上,在一個可接受的延遲時間范圍內(nèi),同樣的請求不再動態(tài)生成,以達到節(jié)約系統(tǒng)資源,提高網(wǎng)站承受能力的目的。Linux環(huán)境下硬盤級緩存一般使用Squid。當(dāng)前的Squid可以處理HTTP, FTP, GOPHER, SSL和WAIS等協(xié)議。
Squid默認(rèn)通過檢測HTTP協(xié)議頭的Expires和 Cache-Control字段來決定緩存的時間。
Squid 運行的時候,默認(rèn)會在硬盤上建兩層hash目錄,用來存儲緩存的Object。它還會在內(nèi)存中建立一個Hash Table,用來記錄硬盤中Object分布的情況。如果Squid配置成為一個Squid集群中的一個的話,它還會建立一個 Digest Table(摘要表),用來存儲其它 Squid 上的Object摘要。當(dāng)用戶端想要的資料本地硬盤上沒有時,可以很快的知道應(yīng)該去集群中的哪一臺機器獲得。在硬盤空間快要達到配置限額的時候,可以配置使用某種策略(默認(rèn)使用LRU:Least Recently Used-最近最少用)刪除一些Object,從而騰出空間
集群中的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)站去拿。
默認(rèn)配置的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.3 內(nèi)存級緩存——memcached
Memcached也有它的不足。首先它的數(shù)據(jù)是保存在內(nèi)存當(dāng)中的,一旦服務(wù)進程重啟(進程意外被關(guān)掉,機器重啟等),數(shù)據(jù)會全部丟失。其次 Memcached以root權(quán)限運行,而且Memcached本身沒有任何權(quán)限管理和認(rèn)證功能,安全性不足。第一條是Memcached作為內(nèi)存緩存服務(wù)使用無法避免的,當(dāng)然,如果內(nèi)存中的數(shù)據(jù)需要保存,可以采取更改Memcached的源代碼,增加定期寫入硬盤的功能。對于第二條,我們可以將 Memcached服務(wù)綁定在內(nèi)網(wǎng)IP上,通過Linux防火墻進行防護。
4.4 CPU與IO均衡
在一個網(wǎng)站提供的所有功能中,有的功能可能需要消耗大量的服務(wù)器端IO資源,像下載,視頻播放等,而有的功能則可能需要消耗大量的服務(wù)器CPU資源,像視頻格式轉(zhuǎn)換,LOG統(tǒng)計等。在一個服務(wù)器集群中,當(dāng)我們發(fā)現(xiàn)某些機器上CPU和IO的利用率相差很大的時候,例如CPU負(fù)載很高而IO負(fù)責(zé)很低,我們可以考慮將該服務(wù)器上的某些耗CPU資源的進程換成耗IO的進程,以達到均衡的目的。均衡每一臺機器的CPU和IO消耗,不僅可以獲得更充分的服務(wù)器資源利用,而且還能夠支持暫時的過載,遇到突發(fā)事件,訪問流量劇增的時候, 實現(xiàn)得體的性能下降(Graceful performance degradation)[34],而不是立即崩潰。
4.5 讀寫分離
總結(jié)
對于一個高并發(fā)高流量的網(wǎng)站來說,任何一個環(huán)節(jié)的瓶頸都會造成網(wǎng)站性能的下降,影響用戶體驗,進而造成巨大的經(jīng)濟損失。在全互聯(lián)網(wǎng)層面,應(yīng)該使用分布式設(shè)計,縮短網(wǎng)站與用戶的網(wǎng)絡(luò)距離,減少主干網(wǎng)上的流量,以及防止在網(wǎng)絡(luò)意外情況下網(wǎng)站無法訪問的問題。在局域網(wǎng)層面,應(yīng)該使用服務(wù)器集群,一方面可以支撐更大的訪問量,另一方面也作為冗余備份,防止服務(wù)器故障導(dǎo)致的網(wǎng)站無法訪問。在單服務(wù)器層面,應(yīng)該配置操作系統(tǒng),文件系統(tǒng)及應(yīng)用層軟件,均衡各種資源的消耗,消除系統(tǒng)性能瓶頸,充分發(fā)揮服務(wù)器的潛能。在應(yīng)用層,可以通過各種緩存來提升程序的效率,減少服務(wù)器資源消耗(圖6)。另外,還需要合理設(shè)計應(yīng)用層程序,為以后的需求變更,擴容做好準(zhǔn)備。
在每一個層次,都需要考慮容錯的問題,嚴(yán)格消除單點故障,做到無論應(yīng)用層程序錯誤,服務(wù)器軟件錯誤,服務(wù)器硬件錯誤,還是網(wǎng)絡(luò)錯誤,都不影響網(wǎng)站服務(wù)。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
高并發(fā)高流量網(wǎng)站架構(gòu)(轉(zhuǎn)) - hq_space - Live and Learn - 博...
反向代理
大型網(wǎng)站后臺架構(gòu)的Web Server與緩存
網(wǎng)站架構(gòu)(頁面靜態(tài)化,圖片服務(wù)器分離,負(fù)載均衡)方案全解析
[轉(zhuǎn)載]說說大型高并發(fā)高負(fù)載網(wǎng)站的系統(tǒng)架構(gòu)
lighttpd,nginx,apache的性能負(fù)載比較
更多類似文章 >>
生活服務(wù)
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術(shù)
上網(wǎng)
留言交流
回頂部
聯(lián)系我們
分享
收藏
點擊這里,查看已保存的文章
導(dǎo)長圖
關(guān)注
一鍵復(fù)制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×