HAProxy—— 1.概述

1. 工作空間在第四層和第七層

HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在時下的硬件上,完全可以支持數以萬計的 併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

2. 事件驅動

HAProxy 實現了一種事件驅動、單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序**通常擴展性較差。**這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。

3. 支持鏈接拒絕

HAProxy 支持連接拒絕 : 因爲維護一個連接的打開的開銷是很低的,有時很需要限制攻擊蠕蟲(attack bets),也就是說限制它們的連接打開從而限制它們的危害。 這個已經爲一個陷於小型DDoS攻擊的網站開發了而且已經拯救了很多站點,這個優點也是其它負載均衡器沒有的。

4. 全透明代理

HAProxy 支持全透明代理(已具備硬件防火牆的典型特點): 可以用客戶端IP地址或者任何其他地址來連接後端服務器. 這個特性僅在Linux 2.4/2.6內核打了cttproxy補丁後纔可以使用. 這個特性也使得爲某特殊服務器處理部分流量同時又不修改服務器的地址成爲可能。

5. 性能提升點

HAProxy藉助於OS上幾種常見的技術來實現性能的最大化。
5.1 單進程、事件驅動模型顯著降低了上下文切換的開銷及內存佔用。
5.2 O(1)事件檢查器(event checker)允許其在高併發連接中對任何連接的任何事件實現即時探測。
5.3 在任何可用的情況下,單緩衝(single buffering)機制能以不復制任何數據的方式完成讀寫操作,這會節約大量的CPU時鐘週期及內存帶寬;
5.4 藉助於Linux 2.6 (>= 2.6.27.19)上的splice()系統調用,HAProxy可以實現零複製轉發(Zero-copy forwarding),在Linux 3.5及以上的OS中還可以實現零複製啓動(zero-starting);
5.5 內存分配器在固定大小的內存池中可實現即時內存分配,這能夠顯著減少創建一個會話的時長;
5.6 樹型存儲:側重於使用作者多年前開發的彈性二叉樹,實現了以O(log(N))的低開銷來保持計時器命令、保持運行隊列命令及管理輪詢及最少連接隊列;
5.7 優化的HTTP首部分析:優化的首部分析功能避免了在HTTP首部分析過程中重讀任何內存區域;
5.8 精心地降低了昂貴的系統調用,大部分工作都在用戶空間完成,如時間讀取、緩衝聚合及文件描述符的啓用和禁用等;
所有的這些細微之處的優化實現了在中等規模負載之上依然有着相當低的CPU負載,甚至於在非常高的負載場景中,5%的用戶空間佔用率和95%的系統空間佔用率也是非常普遍的現象,這意味着HAProxy進程消耗比系統空間消耗低20倍以上。因此,對OS進行性能調優是非常重要的。即使用戶空間的佔用率提高一倍,其CPU佔用率也僅爲10%,這也解釋了爲何7層處理對性能影響有限這一現象。由此,在高端系統上HAProxy的7層性能可輕易超過硬件負載均衡設備。
在生產環境中,在7層處理上使用HAProxy作爲昂貴的高端硬件負載均衡設備故障故障時的緊急解決方案也時長可見。硬件負載均衡設備在“報文”級別處理請求,這在支持跨報文請求(request across multiple packets)有着較高的難度,並且它們不緩衝任何數據,因此有着較長的響應時間。對應地,軟件負載均衡設備使用TCP緩衝,可建立極長的請求,且有着較大的響應時間。

6. HAProxy版本

HAProxy目前主要有三個版本: 1.3 , 1.4 ,1.5,CentOS6.6 自帶的RPM包爲 1.5 的。
————Blueicex 2020/03/26 16:23 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章