誰與爭鋒!專業應用交付vs開源負載軟件
如今,常見的兩大負載均衡解決方案,不外乎是使用標準服務器硬件平臺+開源軟件,以及專業的應用交付,但孰優孰劣?這個我們終究還是要用事實來說話。
首先,不妨深入分析一下目前應用比較廣的兩個開源負載軟件——Nginx和Haproxy——在技術上的優缺點,以及它們和專業的應用交付之間到底有什么差距。
Nginx
作為一款耳熟能詳的產品,Nginx以低系統資源占用、高并發連接性能而著稱,殊不知,它本來只是一款源自于俄羅斯的高效Web/電子郵件服務器。當Nginx被引入互聯網后,它可以完全實現7層負載的超強反向代理功能也逐漸被人們發現。自此之后,Nginx就作為一款主流開源負載軟件被廣泛應用了,而它原來的服務器功能,反而很少被人提起——真心是“彪悍的人生不需要解釋”。
從Nginx的代碼框架上,可以看出,Nginx可分為三大部分,分別是:內容定位、負載均衡和內容加工。
整個框架具備如下特點:
1.具有明顯的面向內容的色彩。
2.擴展性極強,模塊劃分非常精細及合理。
不過,雖然Ngnix應用非常廣泛,但畢竟它的設計初衷不是專業負載,所以在負載方面自然存在硬傷:
1.負載均衡算法和健康檢查算法非常有限。
2.不支持會話保持,這是非常致命的。
3.沒有現成的雙機熱備方案。
言至此,對Nginx在負載均衡上的表現簡而言之就是:根不正,苗不紅。
Haproxy
和Nginx相比,Haproxy可以算是科班出身了。在內部處理流程上,負載均衡就是它的主業。
其特點主要表現在:
1.它的設計思路與專業的應用交付設計基本相同,因此能夠比較容易友好地進行負載均衡特性的配置。
2.有明確的7層內容交換特性。
3.負載均衡及健康檢查算法較豐富,并支持一些動態算法。
4.有雙機熱備的開源解決方案。
但是,Haproxy也存在著某些顯而易見的局限性:
1.應用場景比較單一。其代碼和專業的應用交付明顯不在一個檔次;
2.和專業的應用交付相比,Haproxy缺乏卸載、加速、安全等技術門檻較高的特性。
僅憑以上兩點內傷,就確定了Haproxy本質上還是缺乏成為高富帥的潛質。
專業的應用交付與開源軟件的差異
專業的應用交付廠商能夠為用戶提供專業的應用交付解決方案,但很多客戶覺得開源軟件也能滿足需求。那么,開源軟件和專業硬件之間的區別到底有多大呢?
首先,就性能而言,開源軟件具有兩個不可避免的依賴性和局限性:
一.是對發行版操作系統的依賴。
任何一種開源軟件都需要依賴某種操作系統,并使用該操作系統的某些資源來實現最基本的功能。
對Nginx和Haproxy而言,它們的依賴性主要表現在:
1、內核的網絡接口驅動,它實現數據包的接收和發送;
2、內核的TCP/IP協議棧,它實現基于連接的可靠數據交互。
熟悉Linux內核編程的人都知道,上述兩個內核功能都有其性能瓶頸,前者是中斷,后者是socket系統調用。基于這兩個性能瓶頸做出來的軟件,即便自身代碼優化到***,性能也不會有質的提高。就算開源操作系統本身有例如epoll、splice等大幅優化的策略,其使用也受到很多限制,效果上始終和專業的負載均衡硬件有著數量級的差異。
開源軟件操作系統的依賴性還體現在另一個方面,即三層及三層以下轉發特性的依賴。專業的負載均衡設備需要適應各種組網環境,其轉發特性和傳統的路由器還是有很大差異。因此開源軟件搭建的系統,在網絡環境支持上有很大的局限。
二.是對硬件平臺的局限。
開源系統一般會搭建在基于x86的服務器平臺上,但負載均衡器歸根到底是一個網絡設備,對網絡設備來說,最重要的性能參數就是數據吞吐量,而數據吞吐恰恰是服務器平臺的弱項。而且基于服務器平臺的開源系統性能也很難繼續向上優化——這是因為開源軟件本身解決不了的問題就是多核并行化和分布式系統。
專業應用交付和開源負載軟件,到底哪一款更適合您?這個,最終還是得由用戶的具體環境決定。