nginx如何實現(xiàn)高并發(fā)
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、銅陵網(wǎng)站維護、網(wǎng)站推廣。
簡單來講,就是異步,非阻塞,使用了epoll和大量的底層代碼優(yōu)化。
稍微詳細一點展開的話,就是nginx的特殊進程模型和事件模型的設(shè)計。
進程模型
nginx采用一個master進程,多個woker進程的模式。
master進程主要負責收集、分發(fā)請求。當一個請求過來時,master拉起一個worker進程負責處理這個請求。
master進程也要負責監(jiān)控woker的狀態(tài),保證高可靠性
woker進程一般設(shè)置為跟cpu核心數(shù)一致。nginx的woker進程跟apache不一樣。apche的進程在同一時間只能處理一個請求,所以它會開很多個進程,幾百甚至幾千個。而nginx的woker進程在同一時間可以處理額請求數(shù)只受內(nèi)存限制,因此可以處理多個請求。
事件模型
nginx是異步非阻塞的。
每進來一個request,會有一個worker進程去處理。但不是全程的處理,處理到什么程度呢?處理到可能發(fā)生阻塞的地方,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request,并等待請求返回。那么,這個處理的worker不會這么傻等著,他會在發(fā)送完請求后,注冊一個事件:“如果upstream返回了,告訴我一聲,我再接著干”。于是他就休息去了。此時,如果再有request 進來,他就可以很快再按這種方式處理。而一旦上游服務(wù)器返回了,就會觸發(fā)這個事件,worker才會來接手,這個request才會接著往下走。
web server的工作性質(zhì)決定了每個request的大部份生命都是在網(wǎng)絡(luò)傳輸中,實際上花費在server機器上的時間片不多。這是幾個進程就解決高并發(fā)的秘密所在。