欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

haproxy和nginx的區別

錢琪琛2年前15瀏覽0評論

haproxy和nginx的區別?

NGINX 跟 Haproxy 其實他們兩個的定位是有所不同的,Nginx的定位是一個Server,Haproxy的定位是一個load balancer。

Nginx通過各種plugin module可以支持Load balance的功能,而且性能不弱于haproxy太多,所以總有人拿來將兩個東西比較。其實Apache也可以通過相關模塊做load balancer,只不過性能差得多而已所以沒人用而已。當然了Nginx的LB功能現在是其支柱主打功能而已。

看到有很多答案對于haproxy多進程有誤解,這里特別說下,haproxy早就支持多進程模型,但是并不是Nginx的Worker Master結構,而是平等多進程結構,同時也支持REUSE PORT選項,所以在這里Nginx跟Haproxy對于多核利用上都是一樣的并沒有本質區別。

haproxy從1.8之后,添加了多線程的模式,現在它更推薦的也是這個模型,在一些平臺上能夠更好的利用多核。而Nginx從來沒有多線程模型。而且看起來社區也沒打算支持。

Nginx其實基于server的功能來說,是Haproxy不具備的,讓Haproxy像一個普通Web server那樣回復一個普通的HTTP請求是很難的,不大規模修改源碼根本做不到。Haproxy是圍繞轉發模型設計的,整個流程就是圍繞如何快速把一個請求或者回復轉發到另一端。并不是像Server一樣接受請求然后回復。

但是Nginx作為一個純粹的LB來說,尤其是針對Web LoadBalancer來說,功能沒有haproxy那么細致。Haproxy支持的ACL對象非常廣泛,很多情況并不需要腳本輔助就可以完成復雜的功能,而Nginx稍微復雜的LoadBalance功能都需要使用腳本才能完成,這樣性能就會差很多。

從功能角度上來講,Nginx其實功能比Haproxy要多(當然并不都是免費的),因為他的開發社區和定位方向都比Haproxy要大和寬泛。在Nginx上面的各種解決方案也要多的多。比如WAF,haproxy一致都沒有比較好的原生解決方案。還有包括最近針對Service Mesh的支持,haproxy都是很難跟得上。

但是基礎功能,包括HTTP2,TLS 1.3,Script, SSL/TLS offload,ocsp,SNI preload,其實haproxy最新版本早就已經支持,甚至比Nginx還更早些(HTTP2比較晚,但是現在也支持了)。另外,關于硬件SSL offload支持其實主要是OpenSSL的engine的支持,所以這個大家都差不多,只要兼容最新OpenSSL都沒什么問題。

Haproxy的優點其實是轉發性能稍高,因為haproxy追求zero copy的forward流程,所以代碼都傾向于優化在這一點上。但是這個優勢現在被廣泛的TLS/SSL應用抹平了,對比0 copy節省的時間來說加解密的消耗的性能占絕大多數,所以haproxy基本上在現在的廣泛SSL環境下沒有什么優勢了。除非你想用純HTTP,而且還想使用比較復雜的基于HTTP頭部的Load Balance功能,那么Haproxy是個好選擇,否則只是單純LB的話,LVS性能其實更更高,畢竟人家在Kernel里面。

從代碼層面來說,Nginx的結構化代碼和模塊化都比Haproxy好太多。Haproxy代碼模塊化一直是個大問題,內部結構模塊化不足,二次開發困難,最近到1.9了才有些改善,但是仍然有很多內部trick的hack和讓人發懵的FLAG。相比Nginx做到的徹底的模塊化,可以輕易的通過開發自己的模塊來改變或者實現相關功能,這個haproxy是不具備的。

從開發社區來說,Nginx也比Haproxy好太多,Haproxy雖然社區歷史更久,但是一直都是不慍不火,貢獻者因為原作者的嚴格的控制,一直都很少,再加上沒有module開發功能,所以吸引的開發者一直都不多。帶來的問題就是版本更新慢,支持的新功能慢。HTTP2的開發完全靠原作者一個人,所以支持進度嚴重拖后。

這篇文章看起來好像是變成了對haproxy吐槽,但是因為在工作中接觸這兩個東西實在太多,而且是進行深度二次開發,所以自認為還是有一定的了解的。從目前來看,如果haproxy不能更開放招募更多的貢獻者,不能徹底修改架構支持module開發,是無法比擬NGINX的。

另外Haproxy優勢一點的就是免費版的功能比Nginx免費版的更實惠。對于小又窮的站點的確是個好處。