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