標籤:
http://blog.jobbole.com/86066/
曾經見到知乎上有人問“為什麼像facebook這類的網站需要上千個工程師維護?”,下面的回答多種多樣,但總結起來就是:一個高效能的web系統需要從無數個角度去考慮他,大到伺服器的布局,小到軟體中某個檔案的實現,甚至於某個迴圈內的運算如果出現不嚴謹都可能導致全盤崩潰。
上面提到web效能最佳化需要多個角度去考慮,我們無法考慮到所有的最佳化細節,但可以從我們已知的層面去最佳化,我們就先從網路層面說起。
1.網路請求路徑:
————————————————————————————————————————|
(用戶端輸入URL定位器)→(DNS伺服器尋找映射)→(進入伺服器,處理資料)→(返回資料至用戶端)
在這個用例中我們可以很清晰的看出網路請求到返回的過程,雖然非常抽象,但足夠我們以他為基礎來進行最佳化了。
————————————————————————————————————————|
1)負載平衡
BOSS一次給了小明好多項任務,小明發現怎麼安排時間也做不完,於是乎他盯上了在旁邊偷偷看電影的小強,小強突然覺得背後有一股涼氣,一回頭小明一臉壞笑看著他,“這幾個任務交給你,晚上請你吃飯,要不然…嘿嘿嘿”,小強雖然不情願,但是在小明的請求(要挾)下,只能服從。第二天,小明順利的完成了任務,給小強買了袋辣條。
在電腦上負載平衡也類似如此,我們的大BOSS用戶端將請求發送至伺服器,然而一台伺服器是無法承受很高的並發量的,我們就會將請求轉寄到其他伺服器,當然真正的負載平衡架構並不是由一台server轉寄的另一台server,而在用戶端與伺服器端中間加入了一個負責分配請求的負載平衡硬體(軟體)。
DNS
名詞:DNS是用戶端發送請求中一個非常重要的中轉,他的作用是將使用者請求的URL映射為具體的IP地址,全世界有13台根伺服器,但通常為我們進行網域名稱解析的並不是根伺服器,而是直接存取我們的 LDNS(Local DNS Server),通常由網路電訊廠商維護。
最早的負載平衡就是利用搭建本地DNS伺服器實現的,實現方式簡單易懂,為同一個主機名稱分配多個映射 ,可採用輪循,隨機等方式分配請求。看上去沒什麼問題,但是在使用過程中會發現,如果其中一個地址down機,我們是無法及時發現的,如果有使用者被分配到這個主機就會出現訪問失敗的狀況,同時我們也無法判斷每個server的負載,可能會出現,某個server幾乎閑置,另外一個server負載壓力極高的情況。
硬體裝置
名詞:負載平衡器(Load Balancer),負載平衡器通常作為獨立的硬體置於用戶端與伺服器之間。
負載平衡裝置擁有非常好的負載平衡效能,他擁有眾多的負載平衡策略(權重,動態比率,最快模式,最小串連數等),可以保證以相對較優的方式分配請求,不過好的東西總是有代價的,那就是價格,一台負載平衡器的售價往往高達十幾萬甚至幾十萬,許多企業並不願意為它買單。
反向 Proxy
名詞:Nginx。高效能,輕量級,已經成了人們對Nginx的第一印象,Nginx可作為HTTP伺服器,在處理高並發請求的時候擁有比現在主流的Apache伺服器更高的效能,同時Nginx也是一個優秀的反向 Proxy伺服器。
第一次聽到“反向 Proxy”,可能有些陌生,但如果瞭解與之對應的正向 Proxy就很好理解了,正向 Proxy通常由用戶端主動連結,比如我們的科學上網方式就是使用正向 Proxy,以達到間接訪問網站的目的,而反向 Proxy在伺服器端,無需主動連結,當我們訪問擁有反向 Proxy的網站時,實際訪問的是其反向 Proxy伺服器,而非真正的伺服器,當請求到達反向 Proxy伺服器時,反向 Proxy伺服器再將請求轉寄至伺服器。反向 Proxy是實現負載平衡的主流手段之一,通常使用Nginx等伺服器搭建,Nginx同樣擁有眾多的分配策略,以保證平均分配壓力。
Nginx反向 Proxy:
BIGIP(硬體)負載平衡:
2)CDN
視頻總在緩衝,圖片各種載入不出來,幾年前是再正常不過的事了,在當時大家也沒覺得是回事,但把這種情況放在現在,我想人們絕對直接就小紅叉了吧,那麼我們如何避免這樣的情況呢?這就是我要說的,內容分髮網絡(Content Delivery Network),簡稱:CDN。
CDN簡單的來說就是儲存一些靜態檔案的一台或多台伺服器,通過複製,緩衝等方式,將檔案儲存其中。
1.哪些是靜態檔案?
css,html,圖片,媒體都屬於靜態檔案,也就是說使用者發送的請求不會影響靜態檔案的內容,而jsp,php等檔案就不屬於靜態檔案,因為他們的內容會因我們的請求而發生改變。
2.CDN如何?加速?
通常情況下,我們所要的資料都是從主伺服器中擷取,但假如我們的主伺服器在南方,而訪問使用者在北方,那麼訪問速度就會相對變慢,變慢的原因有很多,例如傳輸距離,電訊廠商,頻寬等等因素,而使用CDN技術的話,我們會將CDN節點分布在各地,當使用者發送請求到達伺服器時,伺服器會根據使用者的地區資訊,為使用者指派最近的CDN伺服器。
3.CDN資料從哪裡來?
複製,緩衝,CDN伺服器可以在使用者請求後快取檔案,也可以主動抓取主伺服器內容。
分布在各地的CDNS:
[轉]簡述負載平衡和CDN技術