作爲一個架構師,就必須要考慮如何選型,我們從性能、功能、配置上來進行比較篩選。
軟件名稱 | 性能 | 功能 | 過濾規則配置 |
Squid |
不能多核是硬傷; 磁盤緩存容量有優勢; 性能中等 |
多; 支持ACL角色控制; 支持ICP緩存協議 |
支持外部文件讀取及熱加載; 支持熱啓動 |
Varnish |
多核支持; 內存緩存; 性能強 |
夠用; 支持集羣,但不支持ICP集羣; 支持後端存活檢查 |
不支持外部文件讀取; 需要轉義; 支持熱啓動 |
Nginx |
多核支持; 支持代理插件; 性能較強 |
多; 支持集羣,但不支持ICP集羣; 支持後端存活檢查; 通過插件可以充當多角色服務器 |
不支持外部文件讀取; 需要轉義; 支持熱啓動 |
Apache TS |
多核支持; 磁盤/內存緩存; 性能強 |
夠用; 支持後端存活檢查; 支持ICP協議,Cluster不穩定; 支持插件開發; |
支持外部規則文件讀取及熱加載; 支持熱啓動 |
HAProxy |
多核支持; 無緩存; 支持HTTP頭部解析; 性能強 |
少,只專注HTTP頭部解析和轉發功能; 支持ACL角色控制; 支持後端存活檢查 |
支持外部規則文件讀取及熱加載; 支持熱啓動; 支持會話粘滯和長連接 |
現在,我們對這三層功能結構充分了解,在測試調優及生產線的實踐檢驗中,我們發現:
- HTTP防禦性能:HAProxy在應對大流量CC攻擊時,做正則匹配及頭部過濾時,CPU消耗只佔10%~20%。其它軟件均狂佔CPU資源約90%以上,容易成瓶頸導致整個系統無響應。
- 反向代理性能:單純轉發效率以內存緩存型的Varnish性能最強,ATS和Nginx次之,考慮大容量緩存因素,ATS也是個不錯的選擇。Nginx是專門針對C10K的產物,性能不錯,配合自己編寫插件,業務可塑性很強。
- 過濾規則的可配置性:HAProxy,ATS,Squid均支持規則文件讀取、ACL定製和熱加載、熱啓動。Nginx則不支持外部文件正則匹配,略差一點,但可塑性強。
負載均衡——高可用性:LVS
LVS是個重量級、高效穩定的四層轉發,雖然不能作七層HTTP協議的識別,但完全可以架設在七層之前,與上述的各種軟件搭配使用。
所以,LVS的使用並不會影響網絡結構,後續仍然可以想上就上,前提是要兼顧到LVS的單點故障,這個我們可以通過Keepalived/Heartbeat來實現可用性和可靠性的保證。