linux上怎么看是否有nginx進(jìn)程 haproxy和nginx的區(qū)別?
haproxy和nginx的區(qū)別?Nginx和Haproxy其實(shí)定位不一樣。Nginx定位為服務(wù)器,Haproxy定位為負(fù)載均衡器。Nginx可以通過各種插件模塊支持負(fù)載均衡的功能,性能也不比hapr
haproxy和nginx的區(qū)別?
Nginx和Haproxy其實(shí)定位不一樣。Nginx定位為服務(wù)器,Haproxy定位為負(fù)載均衡器。
Nginx可以通過各種插件模塊支持負(fù)載均衡的功能,性能也不比haproxy弱多少,所以總有人拿這兩樣?xùn)|西做比較。其實(shí)Apache也可以通過相關(guān)模塊做負(fù)載均衡器,但是性能差很多,所以沒人用。當(dāng)然,Nginx s LB功能現(xiàn)在是它的主要功能。
我看到大家對(duì)haproxy的多進(jìn)程有很多誤解。特別是這里,haproxy早就支持多進(jìn)程模型,但它不是Nginx的Worker Master結(jié)構(gòu),而是一個(gè)平等的多進(jìn)程結(jié)構(gòu),它還支持重用端口選項(xiàng)。所以Nginx和Haproxy在多核利用上沒有本質(zhì)區(qū)別。
1.8以后,haproxy增加了多線程模式,現(xiàn)在推薦這個(gè)模式,在一些平臺(tái)上可以更好的利用多核。Nginx一直沒有多線程模型。而且社區(qū)似乎不打算支持它。
Nginx其實(shí)是基于服務(wù)器的功能,這是Haproxy沒有的。Haproxy很難像普通Web服務(wù)器一樣回復(fù)一個(gè)普通的HTTP請(qǐng)求,不大規(guī)模修改源代碼是不可能做到的。Haproxy是圍繞轉(zhuǎn)發(fā)模型設(shè)計(jì)的,整個(gè)過程都是圍繞著如何快速轉(zhuǎn)發(fā)一個(gè)請(qǐng)求或者回復(fù)給另一端。It 這不像服務(wù)器接受請(qǐng)求然后回復(fù)。
但是Nginx作為一個(gè)純LB,尤其是針對(duì)Web負(fù)載均衡器的,并沒有haproxy那么細(xì)致。Haproxy支持廣泛的ACL對(duì)象。在許多情況下,復(fù)雜的功能可以在沒有腳本的幫助下完成,而Nginx 的稍微復(fù)雜的負(fù)載平衡功能需要用腳本來完成,所以性能會(huì)差很多。
從功能上看,Nginx其實(shí)比Haproxy的功能更多(當(dāng)然不是全部免費(fèi)),因?yàn)樗拈_發(fā)社區(qū)和定位方向比Haproxy更大更廣。Nginx上還有很多解決方案。比如WAF和haproxy都沒有更好的原生解決方案。還有就是最近對(duì)Service Mesh的支持,haproxy很難跟上。
但是基本功能,包括HTTP2、TLS 1.3、腳本、SSL/TLS卸載、ocsp、SNI預(yù)加載real haproxy的最新版本支持了很久,甚至比Nginx還要早(HTTP2晚,但現(xiàn)在也支持了)。另外硬件SSL卸載支持其實(shí)主要是OpenSSL的引擎支持,所以這個(gè)和大家差不多,只要兼容最新的OpenSSL就沒有問題。
haproxy的優(yōu)勢(shì)其實(shí)是轉(zhuǎn)發(fā)性能略高。因?yàn)镠aproxy追求的是零拷貝的正向過程,所以代碼傾向于這方面的優(yōu)化。然而,這個(gè)優(yōu)勢(shì)現(xiàn)在被TLS/SSL的廣泛應(yīng)用抹殺了。相比0 copy節(jié)省的時(shí)間,加解密的性能占了絕大部分,所以haproxy在目前粗放的SSL環(huán)境下基本沒有優(yōu)勢(shì)。除非你想用純HTTP,也想用基于HTTP頭的復(fù)雜負(fù)載均衡功能,那么Haproxy是個(gè)不錯(cuò)的選擇,否則如果只是LB,LVS性能其實(shí)更高,畢竟人在內(nèi)核。
從代碼層面來看,Nginx s的結(jié)構(gòu)化代碼和模塊化比Haproxy好很多。Haproxy代碼的模塊化一直是個(gè)大問題。內(nèi)部結(jié)構(gòu)不夠模塊化,二次開發(fā)難度大。最近才改進(jìn)到1.9,但是還是有很多內(nèi)部的招數(shù)hack和混淆旗。與Nginx s的徹底模塊化,通過開發(fā)自己的模塊,很容易改變或?qū)崿F(xiàn)相關(guān)功能,這是haproxy所不具備的。
從開發(fā)社區(qū)來說,Nginx比Haproxy好太多了。雖然社區(qū)歷史更久,但Haproxy一直都是無動(dòng)于衷的。由于原作者的嚴(yán)格控制,一直以來貢獻(xiàn)者很少,也沒有模塊開發(fā)功能,所以并沒有吸引多少開發(fā)者。問題是版本更新慢,支持的新功能也慢。HTTP2的開發(fā)完全依賴原作者,所以支持進(jìn)度嚴(yán)重滯后。
這篇文章好像成了對(duì)haproxy的吐槽,但我覺得我還是有些了解的,因?yàn)槲以诠ぷ髦薪佑|這兩個(gè)東西太多了,也在深度開發(fā)。目前,如果haproxy可以 不招募更多的貢獻(xiàn)者更公開和完全修改架構(gòu),以支持模塊開發(fā),它可以 不能和NGINX比。
另外,Haproxy的優(yōu)勢(shì)在于免費(fèi)版的功能比Nginx更實(shí)惠。對(duì)于小而差的網(wǎng)站來說,這確實(shí)是一個(gè)好處。
nginx worker進(jìn)程多少個(gè)合適?
我的回答:類似nginx worker的工作派生進(jìn)程的數(shù)量一般等于CPU的核心總數(shù)或核心數(shù)的兩倍。例如,兩個(gè)4核CPU處理器,那么核的總數(shù)是8。
在中設(shè)置worker _ processs8一般進(jìn)程設(shè)置為CPU核數(shù)的1-2倍。