真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

面試官常問(wèn)的Nginx的那幾個(gè)問(wèn)題?

什么是Nginx?

Nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器

創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):成都服務(wù)器托管,成都服務(wù)器租用,成都服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

Nginx是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器 目前使用的最多的web服務(wù)器或者代理服務(wù)器,像淘寶、新浪、網(wǎng)易、迅雷等都在使用

為什么要用Nginx?

優(yōu)點(diǎn):

  • 跨平臺(tái)、配置簡(jiǎn)單

  • 非阻塞、高并發(fā)連接:處理2-3萬(wàn)并發(fā)連接數(shù),官方監(jiān)測(cè)能支持5萬(wàn)并發(fā)

  • 內(nèi)存消耗?。洪_啟10個(gè)nginx才占150M內(nèi)存 成本低廉:開源

  • 內(nèi)置的健康檢查功能:如果有一個(gè)服務(wù)器宕機(jī),會(huì)做一個(gè)健康檢查,再發(fā)送的請(qǐng)求就不會(huì)發(fā)送到宕機(jī)的服務(wù)器了。重新將請(qǐng)求提交到其他的節(jié)點(diǎn)上。

  • 節(jié)省寬帶:支持GZIP壓縮,可以添加瀏覽器本地緩存

  • 穩(wěn)定性高:宕機(jī)的概率非常小

  • master/worker結(jié)構(gòu):一個(gè)master進(jìn)程,生成一個(gè)或者多個(gè)worker進(jìn)程

  • 接收用戶請(qǐng)求是異步的:瀏覽器將請(qǐng)求發(fā)送到nginx服務(wù)器,它先將用戶請(qǐng)求全部接收下來(lái),再一次性發(fā)送給后端web服務(wù)器,極大減輕了web服務(wù)器的壓力

  • 一邊接收web服務(wù)器的返回?cái)?shù)據(jù),一邊發(fā)送給瀏覽器客戶端

  • 網(wǎng)絡(luò)依賴性比較低,只要ping通就可以負(fù)載均衡

  • 可以有多臺(tái)nginx服務(wù)器

  • 事件驅(qū)動(dòng):通信機(jī)制采用epoll模型

為什么Nginx性能這么高?

得益于它的事件處理機(jī)制: 異步非阻塞事件處理機(jī)制:運(yùn)用了epoll模型,提供了一個(gè)隊(duì)列,排隊(duì)解決

Nginx是如何實(shí)現(xiàn)高并發(fā)的

service nginx start之后,然后輸入#ps -ef|grep nginx,會(huì)發(fā)現(xiàn)Nginx有一個(gè)master進(jìn)程和若干個(gè)worker進(jìn)程,這些worker進(jìn)程是平等的,都是被master fork過(guò)來(lái)的。在master里面,先建立需要listen的socket(listenfd),然后再fork出多個(gè)worker進(jìn)程。當(dāng)用戶進(jìn)入nginx服務(wù)的時(shí)候,每個(gè)worker的listenfd變的可讀,并且這些worker會(huì)搶一個(gè)叫accept_mutex的東西,accept_mutex是互斥的,一個(gè)worker得到了,其他的worker就歇菜了。而搶到這個(gè)accept_mutex的worker就開始“讀取請(qǐng)求--解析請(qǐng)求--處理請(qǐng)求”,數(shù)據(jù)徹底返回客戶端之后(目標(biāo)網(wǎng)頁(yè)出現(xiàn)在電腦屏幕上),這個(gè)事件就算徹底結(jié)束。

nginx用這個(gè)方法是底下的worker進(jìn)程搶注用戶的要求,同時(shí)搭配“異步非阻塞”的方式,實(shí)現(xiàn)高并發(fā)量。

為什么不使用多線程?

因?yàn)榫€程創(chuàng)建和上下文的切換非常消耗資源,線程占用內(nèi)存大,上下文切換占用cpu也很高,采用epoll模型避免了這個(gè)缺點(diǎn)

Nginx是如何處理一個(gè)請(qǐng)求的呢?

首先,nginx在啟動(dòng)時(shí),會(huì)解析配置文件,得到需要監(jiān)聽(tīng)的端口與ip地址,然后在nginx的master進(jìn)程里面

先初始化好這個(gè)監(jiān)控的socket(創(chuàng)建socket,設(shè)置addrreuse等選項(xiàng),綁定到指定的ip地址端口,再listen)

然后再fork(一個(gè)現(xiàn)有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)建一個(gè)新進(jìn)程。由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程 )出多個(gè)子進(jìn)程出來(lái)

然后子進(jìn)程會(huì)競(jìng)爭(zhēng)accept新的連接。此時(shí),客戶端就可以向nginx發(fā)起連接了。當(dāng)客戶端與nginx進(jìn)行三次握手,與nginx建立好一個(gè)連接后

此時(shí),某一個(gè)子進(jìn)程會(huì)accept成功,得到這個(gè)建立好的連接的socket,然后創(chuàng)建nginx對(duì)連接的封裝,即ngx_connection_t結(jié)構(gòu)體

接著,設(shè)置讀寫事件處理函數(shù)并添加讀寫事件來(lái)與客戶端進(jìn)行數(shù)據(jù)的交換。最后,nginx或客戶端來(lái)主動(dòng)關(guān)掉連接,到此,一個(gè)連接就壽終正寢了

正向代理

一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器)

然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端??蛻舳瞬拍苁褂谜虼?/p>

正向代理總結(jié)就一句話:代理端代理的是客戶端

反向代理

反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求,發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器

并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器

反向代理總結(jié)就一句話:代理端代理的是服務(wù)端

動(dòng)態(tài)資源、靜態(tài)資源分離

動(dòng)態(tài)資源、靜態(tài)資源分離是讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁(yè)根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來(lái),動(dòng)靜資源做好了拆分以后

我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路

動(dòng)態(tài)資源、靜態(tài)資源分離簡(jiǎn)單的概括是:動(dòng)態(tài)文件與靜態(tài)文件的分離

為什么要做動(dòng)、靜分離?

在我們的軟件開發(fā)中,有些請(qǐng)求是需要后臺(tái)處理的(如:.jsp,.do等等),有些請(qǐng)求是不需要經(jīng)過(guò)后臺(tái)處理的(如:css、html、jpg、js等等文件)

這些不需要經(jīng)過(guò)后臺(tái)處理的文件稱為靜態(tài)文件,否則動(dòng)態(tài)文件。因此我們后臺(tái)處理忽略靜態(tài)文件。這會(huì)有人又說(shuō)那我后臺(tái)忽略靜態(tài)文件不就完了嗎

當(dāng)然這是可以的,但是這樣后臺(tái)的請(qǐng)求次數(shù)就明顯增多了。在我們對(duì)資源的響應(yīng)速度有要求的時(shí)候,我們應(yīng)該使用這種動(dòng)靜分離的策略去解決

動(dòng)、靜分離將網(wǎng)站靜態(tài)資源(HTML,JavaScript,CSS,img等文件)與后臺(tái)應(yīng)用分開部署,提高用戶訪問(wèn)靜態(tài)代碼的速度,降低對(duì)后臺(tái)應(yīng)用訪問(wèn)

這里我們將靜態(tài)資源放到nginx中,動(dòng)態(tài)資源轉(zhuǎn)發(fā)到tomcat服務(wù)器中

負(fù)載均衡

負(fù)載均衡即是代理服務(wù)器將接收的請(qǐng)求均衡的分發(fā)到各服務(wù)器中

負(fù)載均衡主要解決網(wǎng)絡(luò)擁塞問(wèn)題,提高服務(wù)器響應(yīng)速度,服務(wù)就近提供,達(dá)到更好的訪問(wèn)質(zhì)量,減少后臺(tái)服務(wù)器大并發(fā)壓力。

性能瓶頸可能出現(xiàn)在哪

  • CPU太弱

  • worker數(shù)量比CPU核心數(shù)大太多,導(dǎo)致頻繁上下文切換

  • 連接數(shù),包括最大連接數(shù),和當(dāng)前是否由太多連接占著茅坑不拉屎

  • 解決方案

    • CPU affinity

    • 提高連接數(shù)

    • 正確設(shè)置worker數(shù)


標(biāo)題名稱:面試官常問(wèn)的Nginx的那幾個(gè)問(wèn)題?
標(biāo)題網(wǎng)址:http://weahome.cn/article/jgjepp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部