nginx為什么性能這么優(yōu)越?
所謂沒有對比就沒有傷害!
在nginx橫空出世之前,Apache服務(wù)器一直占據(jù)web服務(wù)器的壟斷地位,所以就用對比的方式來解釋nginx那么強(qiáng)!
兩者性能差別的主要原因在于網(wǎng)絡(luò)IO模型選擇不同,apache使用了select,而nginx使用了epoll模型!
舉個例子:一個萬人村里面選村長,有兩種方式:
①,讓每個人在紙條上寫下自己的名字,然后前村長去收集紙條(一個線程去遍歷),然后得到村長推薦候選人的名單(需要處理的連接),這就相當(dāng)于select模型,去輪詢每一個連接,并對需要進(jìn)行處理的連接進(jìn)行處理!
②,每個人都可以毛遂自薦(每個連接都有可能活躍),想要競選的在旁邊站成一排(事件觸發(fā),放入隊列中),然后就在這幾個人中選擇(幾個待處理的任務(wù)),相當(dāng)于只要對少量的事件進(jìn)行處理!
一個是從上萬人中循環(huán)得到幾個進(jìn)行處理,一個是幾個自己站出來直接處理,這種效率相差不是一般的大吧?
nginx是基于epoll模型開發(fā)的,而epoll是基于JAVA NIO的同步非阻塞開發(fā),在高并發(fā)情況下能支持更多的連接!
nginx是事件驅(qū)動的,一個主進(jìn)程跟多個工作進(jìn)程組成的工作模式,主線程負(fù)責(zé)循環(huán)分配事件,多個工作線程負(fù)責(zé)事件的處理!
我們通常使用nginx做什么呢?
nginx作為高性能的http服務(wù)器和反向代理服務(wù)器,通常用做負(fù)載均衡組件,負(fù)責(zé)接受大量的連接然后基于一定的規(guī)則(輪詢,權(quán)重等)分發(fā)連接給不同的應(yīng)用服務(wù)器進(jìn)行處理!
而且負(fù)載均衡配置十分簡單,只需要在安裝好nginx之后,通過修改配置文件nginx.conf,將不同的連接分發(fā)到不同的服務(wù)器上(通過配置server),配置十分簡單!
一般來說,企業(yè)中使用nginx作為負(fù)載均衡組件的場景還是很多的,同時為了避免單點故障帶來的不穩(wěn)定性,通常會使用keepalive搭建高可用的集群方案!
nginx搭建比較簡單,大家自己可以多玩一玩!更多的技術(shù)分享,敬請關(guān)注。。。