最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

面試官:連漏桶算法和令牌桶算法都不知道嗎?回去多看看書吧

2021-07-20 21:49 作者:zjlala96  | 我要投稿

今天的面試題主要關(guān)于nginx中的限流是怎么做到的,下面請看內(nèi)容吧:

====nginx中限流怎么做的?

Nginx限流就是限制用戶請求速度,防止服務器受不了

限流有3種:

1. 正常限制訪問頻率(正常流量)

2. 突發(fā)限制訪問頻率(突發(fā)流量)

3. 限制并發(fā)連接數(shù)

Nginx的限流都是基于漏桶流算法

實現(xiàn)三種限流算法

1、正常限制訪問頻率(正常流量):

限制一個用戶發(fā)送的請求,我Nginx多久接收一個請求。

Nginx中使用ngx_http_limit_req_module模塊來限制的訪問頻率,限制的原理實質(zhì)是基于漏桶算法原理來實現(xiàn)的。在nginx.conf配置文件中可以使用limit_req_zone命令及l(fā)imit_req命令限制單個IP的請求處理頻率。

?

#定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;

#綁定限流維度

server{

location/seckill.html{

limit_req zone=zone;

proxy_pass http://lj_seckill;

}

}

1r/s代表1秒一個請求,1r/m一分鐘接收一個請求, 如果Nginx這時還有別人的請求沒有處理完,Nginx就會拒絕處理該用戶請求。

?

2、突發(fā)限制訪問頻率(突發(fā)流量):

限制一個用戶發(fā)送的請求,我Nginx多久接收一個。

上面的配置一定程度可以限制訪問頻率,但是也存在著一個問題:如果突發(fā)流量超出請求被拒絕處理,無法處理活動時候的突發(fā)流量,這時候應該如何進一步處理呢?Nginx提供burst參數(shù)結(jié)合nodelay參數(shù)可以解決流量突發(fā)的問題,可以設置能處理的超過設置的請求數(shù)外能額外處理的請求數(shù)。我們可以將之前的例子添加burst參數(shù)以及nodelay參數(shù):

#定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;

#綁定限流維度

server{

location/seckill.html{

limit_req zone=zone burst=5 nodelay;

proxy_pass http://lj_seckill;

}

}

為什么就多了一個 burst=5 nodelay; 呢,多了這個可以代表Nginx對于一個用戶的請求會立即處理前五個,多余的就慢慢來落,沒有其他用戶的請求我就處理你的,有其他的請求的話我Nginx就漏掉不接受你的請求

?

3、限制并發(fā)連接數(shù)

Nginx中的ngx_http_limit_conn_module模塊提供了限制并發(fā)連接數(shù)的功能,可以使用

limit_conn_zone指令以及l(fā)imit_conn執(zhí)行進行配置。接下來我們可以通過一個簡單的例子來看下:

http {

limit_conn_zone $binary_remote_addr zone=myip:10m;

limit_conn_zone $server_name zone=myServerName:10m;

}

server {

location / {

limit_conn myip 10;

limit_conn myServerName 100;

rewrite / http://www.lijie.net permanent;

}

}

上面配置了單個IP同時并發(fā)連接數(shù)最多只能10個連接,并且設置了整個虛擬服務器同時最大并發(fā)數(shù)最多只能100個鏈接。當然,只有當請求的header被服務器處理后,虛擬服務器的連接數(shù)才會計數(shù)。實際上限流一般都是基于漏桶算法和令牌桶算法實現(xiàn)的。

?

====講一講漏桶流算法和令牌桶算法?

1)漏桶算法是網(wǎng)絡世界中流量整形或速率限制時經(jīng)常使用的一種算法,它的主要目的是控制數(shù)據(jù)注入到網(wǎng)絡的速率,平滑網(wǎng)絡上的突發(fā)流量。漏桶算法提供了一種機制,通過它,突發(fā)流量可以被整形以便為網(wǎng)絡提供一個穩(wěn)定的流量。也就是我們剛才所講的情況。漏桶算法提供的機制實際上就是剛才的案例:突發(fā)流量會進入到一個漏桶,漏桶會按照我們定義的速率依次處理請求,如果水流過大也就是突發(fā)流量過大就會直接溢出,則多余的請求會被拒絕。所以漏桶算法能控制數(shù)據(jù)的傳輸速率。

2)令牌桶算法是網(wǎng)絡流量整形和速率限制中最常使用的一種算法。典型情況下,令牌桶算法用來控制發(fā)送到網(wǎng)絡上的數(shù)據(jù)的數(shù)目,并允許突發(fā)數(shù)據(jù)的發(fā)送。Google開源項目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的機制如下:存在一個大小固定的令牌桶,會以恒定的速率源源不斷產(chǎn)生令牌。如果令牌消耗速率小于生產(chǎn)令牌的速度,令牌就會一直產(chǎn)生直至裝滿整個令牌桶。如果請求獲取令牌失敗則請求會被禁止訪問。

?

====什么是動靜分離?為什么要做動靜分離?

Nginx是當下最熱的Web容器,網(wǎng)站優(yōu)化的重要點在于靜態(tài)化網(wǎng)站,網(wǎng)站靜態(tài)化的關(guān)鍵點則是是動靜分離,動靜分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們則根據(jù)靜態(tài)資源的特點將其做緩存操作。

讓靜態(tài)的資源只走靜態(tài)資源服務器,動態(tài)的走動態(tài)的服務器

Nginx的靜態(tài)處理能力很強,但是動態(tài)處理能力不足,因此,在企業(yè)中常用動靜分離技術(shù)。

對于靜態(tài)資源比如圖片,js,css等文件,我們則在反向代理服務器nginx中進行緩存。這樣瀏覽器在請求一個靜態(tài)資源時,代理服務器nginx就可以直接處理,無需將請求轉(zhuǎn)發(fā)給后端服務器tomcat。 若用戶請求的動態(tài)文件,比如servlet,jsp則轉(zhuǎn)發(fā)給Tomcat服務器處理,從而實現(xiàn)動靜分離。這也是反向代理服務器的一個重要的作用。

?

更多面試題或?qū)W習資源可查看我主頁或評論獲取

面試官:連漏桶算法和令牌桶算法都不知道嗎?回去多看看書吧的評論 (共 條)

分享到微博請遵守國家法律
小金县| 扎赉特旗| 堆龙德庆县| 徐州市| 沙河市| 呼玛县| 寿宁县| 梁山县| 乐山市| 平凉市| 邵阳县| 水富县| 平昌县| 安康市| 珲春市| 中宁县| 中卫市| 临武县| 台安县| 长宁县| 天祝| 于田县| 黄浦区| 广丰县| 临沂市| 宜州市| 莎车县| 安图县| 新宾| 辰溪县| 堆龙德庆县| 彰武县| 博爱县| 耒阳市| 绵阳市| 焦作市| 辰溪县| 崇文区| 夏河县| 师宗县| 饶平县|