幾種負載均衡技術的實現
【前言】
負載均衡技術對於中大型網站的性能提高有着很大的優勢,最近在學習《大型網站技術的架構》,其中對於負載均衡技術有一些介紹,將學習的經驗總結一下,分享下。多交流。
【協議層】http重定向協議實現負載均衡
原理:根據用戶的http請求計算出一個真實的web服務器地址,並將該web服務器地址寫入http重定向響應中返回給瀏覽器,由瀏覽器重新進行訪問。
如圖:
優點:比較簡單
缺點:瀏覽器需要零次請求服務器才能完成一次訪問,性能較差。
http重定向服務器自身的處理能力可能成為瓶頸。
使用http302響應重定向,有可能使搜索引擎判斷為SEO作弊,降低搜索排名。
【協議層】dns域名解析負載均衡
原理:在DNS服務器上配置多個域名對應IP的記錄。例如一個域名www.baidu.com對應一組web服務器IP地址,域名解析時經過DNS服務器的算法將一個域名請求分配到合適的真實服務器上。
如圖:
優點:將負載均衡的工作交給了DNS,省卻了網站管理維護負載均衡服務器的麻煩,同事許多DNS還支持基於地理位置的域名解析,將域名解析成距離用戶地理最近的一個服務器地址,加快訪問速度嗎,改善性能。
缺點:目前的DNS解析是多級解析,每一級DNS都可能化緩存記錄A,當摸一服務器下線后,該服務器對應的DNS記錄A可能仍然存在,導致分配到該服務器的用戶訪問失敗。
DNS負載均衡的控制權在域名服務商手里,網站可能無法做出過多的改善和管理。
不能夠按服務器的處理能力來分配負載。DNS負載均衡采用的是簡單的輪詢算法,不能區分服務器之間的差異,不能反映服務器當前運行狀態,所以其的負載均衡效果並不是太好。
可能會造成額外的網絡問題。為了使本DNS服務器和其他DNS服務器及時交互,保證DNS數據及時更新,使地址能隨機分配,一般都要將DNS的刷新時間設置的較小,但太小將會使DNS流量大增造成額外的網絡問題。
【協議層】反向代理負載均衡
原理:反向代理處於web服務器這邊,反向代理服務器提供負載均衡的功能,同時管理一組web服務器,它根據負載均衡算法將請求的瀏覽器訪問轉發到不同的web服務器處理,處理結果經過反向服務器返回給瀏覽器。
如圖:
例如:瀏覽器訪問請求的地址是反向代理服務器的地址114.100.80.10,反向代理服務器收到請求,經過負載均衡算法后得到一個真實物理地址10.0.03,並將請求結果發給真實無服務,真實服務器處理完后通過反向代理服務器返回給請求用戶。
優點:部署簡單,處於http協議層面。
缺點:使用了反向代理服務器后,web 服務器地址不能直接暴露在外,因此web服務器不需要使用外部IP地址,而反向代理服務作為溝通橋梁就需要配置雙網卡、外部內部兩套IP地址。
【網絡層】IP負載均衡
原理:在網絡層通過修改目標地址進行負載均衡。
如圖:
用戶訪問請求到達負載均衡服務器,負載均衡服務器在操作系統內核進程獲取網絡數據包,根據算法得到一台真實服務器地址,然后將用戶請求的目標地址修改成該真實服務器地址,數據處理完后返回給負載均衡服務器,負載均衡服務器收到響應后將自身的地址修改成原用戶訪問地址后再講數據返回回去。類似於反向服務器負載均衡。
優點:在響應請求時速度較反向服務器負載均衡要快。
缺點:當請求數據較大(大型視頻或文件)時,速度較慢。
【鏈路層】數據鏈路層負載均衡
原理:在數據鏈路層修改Mac地址進行負載均衡。
如圖:
負載均衡服務器的IP和它所管理的web 服務群的虛擬IP一致;
負載均衡數據分發過程中不修改訪問地址的IP地址,而是修改Mac地址;
通過這兩點達到不修改數據包的原地址和目標地址就可以進行正常的訪問。
優點:不需要負載均衡服務器進行地址的轉換。
數據響應時不需要經過負載均衡服務器。
缺點:負載均衡服務器的網卡帶寬要求較高。
目前連路程負載均衡是特別常見的一種手段,典型的產品有LVS(Linux Virtual Server)。