天天看點

千萬級并發HAproxy均衡負載系統介紹

HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支援虛拟主機,它是免費、快速并且可靠的一種解決方案。根據官方資料,其最高極限支援10G的并發。 

HAProxy特别适用于那些負載特大的web站點, 這些站點通常又需要會話保持或七層處理。HAProxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整 合進您目前的架構中, 同時可以保護你的web伺服器不被暴露到網絡上。

千萬級并發HAproxy均衡負載系統介紹

其支援從4層至7層的網絡交換,即覆寫所有的TCP協定。就是說,Haproxy 甚至還支援 Mysql 的均衡負載。。

如果說在功能上,能以proxy反向代理方式實作 WEB均衡負載,這樣的産品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。 

但要明确一點的,Haproxy 并不是 Http 伺服器。以上提到所有帶反向代理均衡負載的産品,都清一色是 WEB 伺服器。簡單說,就是他們能自個兒提供靜态(html,jpg,gif..)或動态(php,cgi..)檔案的傳輸以及處理。而Haproxy 僅僅,而且專門是一款的用于均衡負載的應用代理。其自身并不能提供http服務。 

千萬級并發HAproxy均衡負載系統介紹

但其配置簡單,擁有非常不錯的伺服器健康檢查功能還有專門的系統狀态監控頁面,當其代理的後端伺服器出現故障, HAProxy會自動将該伺服器摘除,故障恢複後再自動将該伺服器加入。自1.3版本開始還引入了frontend,backend,frontend根 據任意HTTP請求頭内容做規則比對,然後把請求定向到相關的backend。 

另外, 版本1.3 是處于活躍開發階段的版本, 它支援如下新特性:

内容交換 : 可以根據請求(request)的任何一部分 來選擇一組伺服器, 比如請求的 URI , Host頭(header) , cookie , 以及其他任何東西. 當然,對那些靜态分離的站點來說,對此特性還有更多的需求。

全透明代理 : 可以用 用戶端IP位址 或者任何其他位址來連接配接後端伺服器. 這個特性僅在Linux 2.4/2.6核心打了cttproxy 更新檔後才可以使用. 這個特性也使得為某特殊伺服器處理部分流量同時又不修改伺服器的位址成為可能。

基于樹的更快的排程器 : 1.2.16以上的版本要求所有的逾時都設成同樣的值以支援數以萬計的全速連接配接. 這個特性已經移植到1.2.17.

核心TCP拼接 : 避免了核心到使用者然後使用者到核心端的資料拷貝, 提高了吞吐量同時又降低了CPU使用率 . Haproxy 1.3支援Linux L7SW 以滿足在商用硬體上數Gbps 的吞吐的需求。

連接配接拒絕 : 因為維護一個連接配接的打開的開銷是很低的,有時我們很需要限制攻擊蠕蟲(attack bots),也就是說限制它們的連接配接打開進而限制它們的危害。 這個已經為一個陷于小型DDoS攻擊的網站開發了而且已經拯救了很多站點。

細微的頭部處理 : 使得編寫基于header的規則更為簡單,同時可以處理URI的某部分。

快而可靠的頭部處理 : 使用完全RFC2616 相容的完整性檢查對一般的請求全部進行分析和索引僅僅需要不到2ms 的時間。

子產品化設計 : 允許更多人加入進此項目,調試也非常簡單. poller已經分離, 已經使得它們的開發簡單了很多. HTTP已經從TCP分離出來了,這樣增加新的七層特性變得非常簡單. 其他子系統也會很快實作子產品化

投機I/O 處理 : 在一個套接字就緒前就嘗試從它讀取資料。poller僅推測哪個可能就緒哪個沒有,嘗試猜測,并且如果成功,一些開銷很大的系統調用就可以省去了。如果失 敗,就會調用這些系統調用。已知的使用Linux epoll()已經淨提升起碼10%了。

ACLs : 使用任意規則的任意組合作為某動作的執行條件。

TCP 協定檢查 : 結合ACL來對請求的任意部分進行檢查,然後再進行轉發。這就可以執行協定驗證而不是盲目的進行轉發。比如說允許SSL但拒絕SSH。

更多的負載均衡算法 : 現在,動态權重輪循(Dynamic Round Robin),權重源位址哈希(Weighted Source Hash),權重URL哈希和權重參數哈希(Weighted Parameter Hash)已經實作。其他算法比如Weighted Measured Response Time也很快會實作。

繼續閱讀