Nginx之大并發(fā)服務(wù)器架構(gòu)實(shí)戰(zhàn)技法
對(duì)于高性能網(wǎng)站 ,請(qǐng)求量大,如何支撐?大體分為兩個(gè)部分。一部分是盡量減少對(duì)服務(wù)器的請(qǐng)求,另一方面是提高服務(wù)器的相應(yīng)能力。減少服務(wù)器的請(qǐng)求能力,我這里列舉一下幾個(gè)方面,大家可以參考。
1:對(duì)于開(kāi)發(fā)人員,盡量做到能夠合并css, 把多張背景圖片合并, 減少mysql查詢(xún)等。
2: 對(duì)于運(yùn)維人員, nginx的expires 設(shè)置,利用瀏覽器緩存等,減少查詢(xún)。
3: 利用第三方的cdn來(lái)響應(yīng)請(qǐng)求,以此來(lái)減少自身服務(wù)器的壓力。
4: 最終剩下的,不可避免的請(qǐng)求----服務(wù)器集群+負(fù)載均衡來(lái)支撐。
所以,來(lái)到第4步后,就不要再考慮減少請(qǐng)求這個(gè)方向了.而是思考如何更好的響應(yīng)高并發(fā)請(qǐng)求。那么這也是我們今天著重要講的。
對(duì)于Nginx來(lái)說(shuō),客戶(hù)來(lái)請(qǐng)求Nginx 來(lái)響應(yīng),怎么響應(yīng),無(wú)非是讀取mysql 或者是直接讀取磁盤(pán)上的index.html 等等。兩個(gè)方向,第一是要建socket 連接,第二是要打開(kāi)文件。這就牽扯到兩個(gè)硬性的限制。第一,你的socket 連接能不能建那么多。你的內(nèi)存是不是足夠大,因?yàn)榻ocket 連接都要內(nèi)存維護(hù)著他們的信息的。你打開(kāi)文件,操作系統(tǒng)允許不允許你一次打開(kāi)那么多的文件。因?yàn)樵谀J(rèn)情況下一個(gè)進(jìn)程同時(shí)只能打開(kāi)1024個(gè)文件。所以你想建立高并發(fā),高并發(fā)無(wú)非就是建立的socket 連接多,打開(kāi)的文件多。只有你這兩個(gè)方面能承的住。當(dāng)然對(duì)你的網(wǎng)卡也是有要求的,起碼你的網(wǎng)卡能夠同時(shí)跑通那么多的流量。
知道了這兩個(gè)大的方向之后,我們排查問(wèn)題就需要從這兩點(diǎn)入手。然后通過(guò)觀察系統(tǒng)的dmesg 和 nginx 的error.log 來(lái)逐步解決問(wèn)題。其實(shí)在真實(shí)的生產(chǎn)環(huán)境里面,做東西都是哪里出錯(cuò)了,跟著錯(cuò)誤軌跡一點(diǎn)點(diǎn)去摸索的優(yōu)化的。沒(méi)有一個(gè)固定的路子說(shuō)照著什么做就能達(dá)到多大的并發(fā)。
以上是架構(gòu)一個(gè)高并發(fā) Nginx 服務(wù)器的大體思路和方案。在下一篇文章中,我將會(huì)拿一個(gè)實(shí)例,運(yùn)用今天所講到的理論,從實(shí)操的角度來(lái)說(shuō)明一下如何一步一步的把一個(gè)大并發(fā)的服務(wù)器架構(gòu)起來(lái)。
責(zé)任編輯:任我行
-
高防服務(wù)器能防御哪些攻擊
-
攜手ODM/OEM,發(fā)力云服務(wù)商,三大策略夯實(shí)霄龍CPU基礎(chǔ)生態(tài)系統(tǒng)
-
中國(guó)民生銀行與華為達(dá)成戰(zhàn)略合作,科技+金融打造數(shù)字化智能銀行
-
攜手ODM/OEM,發(fā)力云服務(wù)商,三大策略夯實(shí)霄龍CPU基礎(chǔ)生態(tài)系統(tǒng)
-
中國(guó)民生銀行與華為達(dá)成戰(zhàn)略合作,科技+金融打造數(shù)字化智能銀行
-
如何在數(shù)據(jù)庫(kù)中查找和消除重復(fù)的數(shù)據(jù)?