摘要:在生產(chǎn)環(huán)境中,建議不要使用連接數(shù)限制單個(gè)連接的帶寬限制不易過低像迅雷這種下載器的限速,可能需要?jiǎng)e的辦法注文中部分內(nèi)容參考自關(guān)于的限速模塊
nginx 限速研究匯報(bào) 寫在前面
? ? ? ?這兩天服務(wù)器帶寬爆了,情況如下圖:
出于降低帶寬峰值的原因,我開始各種瘋狂的研究nginx限速。下面是我研究過程中的心得!(花了好幾個(gè)小時(shí)的時(shí)間寫的人生第一篇技術(shù)類網(wǎng)文)
限速的方案:
聲明:
連接數(shù):單個(gè)ip的請(qǐng)求數(shù)
nginx限速的實(shí)現(xiàn)原理:
? ? ? ?通過控制單個(gè)連接的下載帶寬和控制連接數(shù)來實(shí)現(xiàn)。
? ? ? ?首先限制單個(gè)連接的帶寬,然后限制連接數(shù)。如果要實(shí)現(xiàn)限速,限制單個(gè)連接帶寬是必須的,限制連接數(shù)是非必須的。
? ? ? ?在實(shí)際情況中,我們可能出于單個(gè)IP會(huì)存在大量連接數(shù)的情況而不去限制連接數(shù)。
? ? ? ?比如:公司用的是專線,全公司的人用的是同一個(gè)IP,如果你限制連接數(shù)為5,下載器默認(rèn)連接數(shù)為5,那么就只能供一個(gè)人下載,而別的人訪問都是503。還有很多情況,都不允許我們?nèi)ハ拗七B接數(shù),所以,我們只能限制單個(gè)連接的帶寬。
? ? ? ?在限制單個(gè)連接帶寬時(shí)要注意,有一些下載器使用的是單鏈接,你不能將單個(gè)連接的帶寬限制的太小。
? ? ? ?比如nginx限速配置如下:
http { limit_conn_zone $binary_remote_addr zone=addr:10m; #實(shí)例化nginx對(duì)象(哈哈,這樣理解美滋滋) server { listen 80; server_name xx.com; access_log xx.log main; error_log xx.log; root xx; index index.html; limit_conn perip 5; #調(diào)用nginx對(duì)象屬性并賦值 limit_rate 20k; #調(diào)用nginx對(duì)象屬性并賦值 #上面這兩個(gè)limit的意思是:單個(gè)IP最大允許5個(gè)連接,單個(gè)連接帶寬為20K,若下載器一次可以發(fā)起5個(gè)請(qǐng)求(5個(gè)連接數(shù)),那么這個(gè)下載器最大下載速度為100K; } }
? ? ? ?限速效果圖:
google 下載情況:
360 下載情況:
迅雷下載情況:
? ? ? ?對(duì)比發(fā)現(xiàn):nginx限速對(duì)瀏覽器自帶的下載器來說,都可以限制,但是唯獨(dú)下載軟件(如:迅雷)不受限制。(畢竟人家就是靠這個(gè)吃飯的)。當(dāng)然你也可以連開多個(gè)下載任務(wù),測試一下連接數(shù)限制,如果你設(shè)置了連接數(shù)為5,你可以最多在瀏覽器打開5個(gè)下載,下載軟件(如:迅雷)中可能只能打開一個(gè)下載任務(wù)(因?yàn)樗麜?huì)打開很多連接,已經(jīng)超過了你設(shè)置的5個(gè)連接數(shù))。如果超過的話,下面我們說的連接數(shù)限制中的兩個(gè)方法返回的結(jié)果略有不同:
方法1. 會(huì)將超出的請(qǐng)求放入burst隊(duì)列中,隊(duì)列的長度取決于你設(shè)置的burst值,一個(gè)一個(gè)處理,超過隊(duì)列長度的返回503。 方法2. 直接返回503。
如何控制這兩個(gè)量(單個(gè)連接數(shù)的下載速度, 連接數(shù))
在http中添加的都像是實(shí)例化一個(gè)nginx對(duì)象,并給nginx對(duì)象賦初值,在server中的配置就像是調(diào)用這個(gè)nginx類的屬性(個(gè)人理解)
連接數(shù)控制
第一種方式:
首先在http下添加:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
然后在server中添加:
limit_req zone=one burst=5 nodelay;
示例一
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location /download/ { limit_req zone=one burst=5 nodelay; #nodelay 的大概意思是告訴nginx將超出**rate**限制的連接直接返回503,不需要等待處理 #這句話的意思就是說,每秒處理1個(gè)請(qǐng)求,隊(duì)列中最多有5個(gè)待處理請(qǐng)求,多余請(qǐng)求直接返回503(個(gè)人理解) } } }
第二種方式:
首先在http中添加:
limit_conn_zone $binary_remote_addr zone=addr:10m;
然后在server中添加:
limit_conn addr 1;
示例二
http { limit_conn_zone $binary_remote_addr zone=addr:10m; ... server { ... location /download/ { limit_conn addr 1; #通過這個(gè)限制鏈接數(shù) } } }
單個(gè)連接數(shù)的下載帶寬控制:
首先在http中添加:
limit_conn_zone $binary_remote_addr zone=addr:10m;
然后在server中添加:
limit_rate 100K;
示例
http { limit_conn_zone $binary_remote_addr zone=addr:10m; ... server { ... location /download/ { limit_rate 100k; #通過這個(gè)限制單個(gè)連接數(shù)的帶寬 } } }
OK,我們知道了nginx限速原理,并學(xué)會(huì)配置這兩個(gè)配置項(xiàng),測試效果我也已經(jīng)給出了效果圖,下面我們來總結(jié)一下:
要想實(shí)現(xiàn)限速,還是我之前說的,單個(gè)連接帶寬限制是必須的。
在生產(chǎn)環(huán)境中,建議不要使用連接數(shù)限制
單個(gè)連接的帶寬限制不易過低
像迅雷這種下載器的限速,可能需要?jiǎng)e的辦法
注:文中部分內(nèi)容參考自 關(guān)于nginx的限速模塊
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40573.html
摘要:在生產(chǎn)環(huán)境中,建議不要使用連接數(shù)限制單個(gè)連接的帶寬限制不易過低像迅雷這種下載器的限速,可能需要?jiǎng)e的辦法注文中部分內(nèi)容參考自關(guān)于的限速模塊 nginx 限速研究匯報(bào) 寫在前面 ? ? ? ?這兩天服務(wù)器帶寬爆了,情況如下圖:showImg(https://segmentfault.com/img/bVUXj3?w=1884&h=352); 出于降低帶寬峰值的原因,我開始各種瘋狂的研究ng...
摘要:但是,你的連接數(shù)限制配置為允許單個(gè)連接數(shù),單個(gè)連接數(shù)最大帶寬為。就降低單個(gè)連接數(shù)帶寬吧要知道大家誰沒事會(huì)用瀏覽器自帶下載器下載呢注本文只探討限速模塊在不同業(yè)務(wù)下的限速彩蛋偶爾發(fā)現(xiàn),將連接數(shù)限制為迅雷不能高速下載了。 nginx 內(nèi)置模塊限速怎么使用就不多說了,今天來說說連接數(shù)和單個(gè)連接數(shù)限速的事。 場景:A公司有100人,A公司只有一個(gè)公網(wǎng)IP,假設(shè)A公司可能有100個(gè)人同時(shí)在下載你的...
摘要:但是,你的連接數(shù)限制配置為允許單個(gè)連接數(shù),單個(gè)連接數(shù)最大帶寬為。就降低單個(gè)連接數(shù)帶寬吧要知道大家誰沒事會(huì)用瀏覽器自帶下載器下載呢注本文只探討限速模塊在不同業(yè)務(wù)下的限速彩蛋偶爾發(fā)現(xiàn),將連接數(shù)限制為迅雷不能高速下載了。 nginx 內(nèi)置模塊限速怎么使用就不多說了,今天來說說連接數(shù)和單個(gè)連接數(shù)限速的事。 場景:A公司有100人,A公司只有一個(gè)公網(wǎng)IP,假設(shè)A公司可能有100個(gè)人同時(shí)在下載你的...
摘要:下面是幾種常見的限流技術(shù)一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是網(wǎng)絡(luò)流量整形和速率限制中最常使用的一種算法。 就秒殺接口來說,當(dāng)訪問頻率或者并發(fā)請(qǐng)求超過其承受范圍的時(shí)候,這時(shí)候我們就要考慮限流來保證接口的可用性,以防止非預(yù)期的請(qǐng)求對(duì)系統(tǒng)壓力過大而引起的系統(tǒng)癱瘓。通常的策略就是拒絕多余的訪問,或者讓多余的訪問排隊(duì)等待服務(wù)。下面是幾種常見的限流技術(shù) 一、限流算法常用的限流算...
摘要:作為一組獨(dú)立的微服務(wù)之一被實(shí)現(xiàn)并作為一個(gè)單獨(dú)的進(jìn)行發(fā)布。該配置將暴露所有由網(wǎng)關(guān)發(fā)布的,入口位于,用協(xié)議加密保護(hù)。由網(wǎng)關(guān)發(fā)布的所有的所有后端服務(wù)均在中被定義。與瀏覽器不同,網(wǎng)關(guān)并不能向客戶端發(fā)送帶有新的命名的重定向。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文來自云+社區(qū)翻譯社,作者ArrayZoneYour Nginx往往是構(gòu)建微服務(wù)中必不可缺的一部分,從本文中...
閱讀 1681·2019-08-30 12:51
閱讀 669·2019-08-29 17:30
閱讀 3706·2019-08-29 15:17
閱讀 861·2019-08-28 18:10
閱讀 1373·2019-08-26 17:08
閱讀 2183·2019-08-26 12:16
閱讀 3445·2019-08-26 11:47
閱讀 3510·2019-08-23 16:18