HTTP服務負載均衡總結

從一開始就要思考擴展的架構,所謂可擴展性指的是經過擴展規模提升承載能力的本領,每每體如今增長物理服務器或者集羣節點。負載均衡是常見的水平擴展的手段。後端

目標:(1)減小單點故障(2)提高總體吞吐量(3)根據負載分配任務量緩存

 

HTTP重定向服務器

經過HTTP Location重定向,經過必定的策略(如地域就近)將主站URL轉移到分站/鏡像URL,分散主站工做量。實現負載均衡的同時,加快用戶下載速度,適用於網絡IO成爲瓶頸時(以下載服務)。網絡

HTTP重定向一般採用隨機策略。若是使用輪詢(RR),須要記錄最後一次重定向的服務器序號,給一般無狀態的HTTP帶來額外開銷;因爲須要鎖機制保證任什麼時候刻只有一個請求能修改它,對併發性也有必定影響。session

根據機率統計理論,隨着吞吐率的增長,隨機調度也會逐漸趨近於順序調度的均衡效果。架構

多數狀況,重定向負載均衡很差控制,沒法阻止用戶直接訪問真實服務器。只有相似文件下載、廣告展現等一次性的請求適合重定向。併發

 

DNS負載均衡

DNS提供域名解析服務,即域名到ip的映射,這種映射能夠是一對多的,這時DNS便起了負載均衡的做用。DNS服務器軟件提供了豐富的調度策略,最經常使用的是根據用戶IP進行智能解析,從全部可用的A記錄中找到離用戶最近的一臺服務器。利用動態DNS,能夠實現故障轉移,但由於DNS的層級緩存,會存在必定延遲。分佈式

除了由於緩存帶來的更新延遲,因爲負載均衡工做在DNS層面,調度靈活性較差,沒法將HTTP請求的上下文引入調度策略。性能

 

反向代理

反向代理服務器的核心工做是轉發HTTP請求,因此又叫七層負載均衡。相比HTTP重定向和DNS,反向代理是轉發請求,而前者是轉移。全部請求都通過反向代理,等待實際服務器(也叫後端服務器)的響應,再反饋給用戶。這樣能夠將調度策略落實到每個HTTP請求,從而實現更加可控的負載均衡策略。

反向代理的擴展能力,一方面是自身併發處理的能力,當反向代理服務器吞吐率接近極限時,不管添加多少後端服務器也無濟於事。另外一方面,轉發操做自己須要必定開銷,如建立線程、與後端服務器創建TCP鏈接、接收後端返回的處理結果、分析HTTP頭信息、用戶空間和內核空間的頻繁切換等,一般這部分時間不長,但當後端服務器處理請求時間很是短時(如靜態資源),轉發的開銷就顯現出來。

反向代理通常都有監控後端服務器的功能,能夠簡單配置健康探測,調度器會自動放棄異常的後端服務器。實際應用能夠部署必定數量的備用服務器,當一些後端服務器異常時接替它們的工做,保證總體性能。

若是後端服務器是有狀態的,如在session中保存了用戶數據,須要使用粘滯會話(Sticky Sessions)。一種方法是使用用戶的IP地址做爲標識,將IP地址作散列計算映射到後端服務器上。還能夠利用Cookie,反向代理將後端服務器的編號追加寫到用戶的Cookie中,這樣便知道下次請求該發給哪一個後端服務器。粘滯會話可能會破壞負載均衡策略,使得後端服務器個性化,儘可能避免在後端服務器存儲狀態,採用分佈式Session或分佈式緩存來替代。

 

IP

反向代理自己的開銷制約了其擴展性,考慮將調度器工做在應用層如下,網絡數據包從內核緩衝區進入用戶地址空間以前,Linux內核就將其轉發到實際服務器上。

image

NAT工做在傳輸層,能夠修改數據包的IP地址和端口,因此也叫四層負載均衡。NAT服務器負責鏈接外部網絡和內部網絡,實際服務器必須將NAT服務器做爲默認網關。當數據包到達NAT服務器,NAT服務器將目標地址從NAT的地址修改成實際服務器地址的IP和端口,而後指定內部網卡將數據包投遞到內部網絡;實際服務器收到數據包進行處理,數據包到達默認網關,即NAT服務器,NAT服務器再修改數據包,將源地址從實際服務器地址改成NAT服務器。Linux使用NetFilter/iptables維護數據包路由規則。使用IPVS(LVS)配置基於NAT的負載均衡。因爲在內核轉發的低開銷,吞吐率比反向代理高,轉發能力主要取決於NAT服務器的網絡帶寬。

image

對於下載或視頻等站點,NAT服務器的帶寬會成爲瓶頸。LVS提供了直接路由(Direct Router)的方式,它的負載均衡工做在數據鏈路層,經過修改數據包的MAC地址,將數據包轉發到實際服務器,並且響應數據包直接發給用戶端,不用通過調度器,因此實際服務器必須直接接入外部網絡,也不能將調度器設爲默認網關。直接路由使用IP別名,須要給實際服務器添加和調度器IP地址相同的IP別名,這樣能夠正常將請求數據包轉發到實際服務器。一般響應數據包比請求數據包大的多,因此LVS-DR的優點就是響應數據包不用通過調度器,避免了調度器的帶寬瓶頸。

imageimage

相關文章
相關標籤/搜索