成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Nginx 中 map 模塊的使用及性能測(cè)試

zhonghanwen / 1379人閱讀

摘要:每個(gè)請(qǐng)求來(lái)的時(shí)候都會(huì)先去看看中有沒(méi)有,即使使用的是的方式也不免會(huì)讓我對(duì)它的性能產(chǎn)生一些擔(dān)憂,所以性能測(cè)試就必須要來(lái)一發(fā)了。注也在阿里云執(zhí)行只要是為了在一個(gè)數(shù)據(jù)中心降低網(wǎng)絡(luò)延遲。測(cè)試因?yàn)榭紤]到服務(wù)器比較穩(wěn)定,減少壓測(cè)總數(shù)。

背景

最近我操刀了leetcode的論壇遷移,整個(gè)過(guò)程持續(xù)了幾周的時(shí)間,總算暫時(shí)告了一個(gè)段落。常使用leetcode論壇的用戶應(yīng)該已經(jīng)發(fā)現(xiàn)論壇已經(jīng)大變樣了吧~

期間遇到了不少坑坑洼洼,將來(lái)也還會(huì)有好多問(wèn)題等待去一一解決。關(guān)于這個(gè)遷移過(guò)程中的收貨,這篇文章中就不細(xì)說(shuō)了,有時(shí)間再另開(kāi)一篇博文。這篇文章主要關(guān)注在url-mapping以及它的性能問(wèn)題。

問(wèn):url-mapping的問(wèn)題從何而來(lái)呢?

舊的論壇和新的論壇是兩個(gè)不同的discuss框架。前者是phpbb,現(xiàn)在是nodebb。兩者的 url routing 完全不一樣,比如說(shuō)同一個(gè)topic,在原來(lái)的url是 http://hostname/discuss//,在新的論壇中是 http://hostname/topic//(這里就不討論兩者甚至連topic_id都不一樣的問(wèn)題了)。

而在廣袤的互聯(lián)網(wǎng)海洋中,舊論壇的url可能到處都存在。我們不希望在論壇遷移后,用戶點(diǎn)那些鏈接就失效了。我們希望的是用戶訪問(wèn)舊的url可以被重定向到新論壇的某個(gè)地址。所以就產(chǎn)生了url-mapping的問(wèn)題。

方法 生成url-mapping

感謝nodebb-plugin-import提供了數(shù)據(jù)遷移以后自動(dòng)生成url-mapping的方式,省了我自己寫(xiě)腳本生成這些mapping的時(shí)間。每一條mapping大致是這樣的:

~^/discuss/questions/oj/add-two-numbers(?[^/]*)*/?$  /category/10/add-two-numbers;

其中的slugid的mapping是由插件生成的。regular expression是為了匹配url中如果有param添加的。

Nginx Map

官方文檔的demo可能對(duì)于剛想上手的同學(xué)來(lái)說(shuō)不是那么友好,還是直接看現(xiàn)成的配置學(xué)得快:

http {
  ...

  map_hash_max_size 204800;
  map_hash_bucket_size 204800;
  map $request_uri $new {
     include /path/of/your/map/file;
  }

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;

  ...
}
server {
  ...

  if ($new) {
    rewrite ^ https://discuss.leetcode.com$new redirect;
  }

  location / {
    ...
  }
  ...
}

在server規(guī)則匹配中,$new值不為空,說(shuō)明當(dāng)前要訪問(wèn)的url已經(jīng)在http模塊的mapping文件中匹配到了,這個(gè)時(shí)候就不走各種location模塊了,直接rewrite成新的地址。:這里要是做成proxy_pass也行,后面的測(cè)試中就采用了proxy_pass。但線上的環(huán)境,擔(dān)心nginx的壓力太大了,就采用了rewrite方式給它減減壓。

測(cè)試

考慮到mapping的條目有點(diǎn)多,幾萬(wàn)量級(jí),又都是正則匹配。每個(gè)請(qǐng)求來(lái)的時(shí)候都會(huì)先去看看mapping中有沒(méi)有,即使mapping使用的是hash的方式也不免會(huì)讓我對(duì)它的性能產(chǎn)生一些擔(dān)憂,所以性能測(cè)試就必須要來(lái)一發(fā)了。

測(cè)試方案:

在新機(jī)器上跑helloworld

自動(dòng)生成隨機(jī)100個(gè)url-mapping,都重定向到helloworld

使用abtest分別對(duì)helloworld和隨機(jī)url作壓測(cè)

增大url-mapping的條目,重復(fù)1,2

壓測(cè)機(jī)器

臨時(shí)租了兩臺(tái)阿里云服務(wù)器(因?yàn)槭桥R時(shí)的,所以我也就不在意在后文暴露ip了),配置都是:1核,2048M內(nèi)存,40G硬盤(pán)。一臺(tái)用作nginx和helloworld程序,一臺(tái)專門做abtest。

:abtest也在阿里云執(zhí)行只要是為了在一個(gè)數(shù)據(jù)中心降低網(wǎng)絡(luò)延遲。最后發(fā)現(xiàn)效果真不錯(cuò),rps從100多直接飆升到2700多。

helloworld

采用了nodejs的helloworld:

var http = require("http");
var i = 0;
http.createServer(function (req, res) {
  console.log(i++);
  res.writeHead(200, {"Content-Type": "text/plain"});
  res.end("Hello World
");
}).listen(1337, "0.0.0.0");
console.log("Server running at http://0.0.0.0:1337/");
url-mapping

生成urlmapping寫(xiě)了一個(gè)python腳本:

import hashlib

m2 = hashlib.md5()
current = "hello world"
f = open("./url.map", "w")

for i in range(100):
    m2.update(current)
    current = m2.hexdigest()
    f.write("~^/hello/world/" + current + "(?[^/]*)*/?$	/;
")

f.close()

nginx配置:

server {
  listen 80;
  server_name 120.26.138.197;

  location ^~ /{
    if ($new) {
      proxy_pass http://120.26.138.197:1337$new;
      break;
    }

    return 404;
  }
}
abtest

rps測(cè)試(request per second):并發(fā)壓測(cè)使用100000次請(qǐng)求,并發(fā)100個(gè)用戶的方式。

# 不走nginx
ab -n100000 -c100 120.26.138.197:1337/
# 走nginx
ab -n100000 -c100 120.26.138.197/hello/world/5eb63bbbe01eeed093cb22bb8f5acdc3/
mapping條目 直接訪問(wèn)(rps) map第一條url(rps) map最后一條url(rps) 不存在的url(rps)
100 2829.44 1819.63 1765.25 9740.53
1000 - 1816.00 1509.52 4094.68
10000 - 1813.22 514.24 658.32
100000 - 1836.02 62.40 65.80

跟預(yù)想的一樣,mapping的條目確實(shí)會(huì)對(duì)請(qǐng)求效率產(chǎn)生影響。而且?guī)兹f(wàn)條的映射在較高并發(fā)的情況下已經(jīng)到了勉強(qiáng)能用的臨界了。還好以后mapping的條目不會(huì)再增加了,并且論壇的并發(fā)很難到100的量級(jí)。

tpr測(cè)試(time per request):因?yàn)榭紤]到服務(wù)器比較穩(wěn)定,減少壓測(cè)總數(shù)。同時(shí)把并發(fā)用戶減為1個(gè)。

# 不走nginx
ab -n1000 -c1 120.26.138.197:1337/
# 走nginx
ab -n1000 -c1 120.26.138.197/hello/world/5eb63bbbe01eeed093cb22bb8f5acdc3/
mapping條目 直接訪問(wèn)(ms) map第一條url(ms) map最后一條url(ms) 不存在的url(ms)
100 0.690 0.922 0.933 0.507
1000 - 0.925 1.043 0.648
10000 - 0.921 2.340 1.915
100000 - 0.926 16.321 15.469

在并發(fā)不是很高的時(shí)候mapping的條目可以更多。100000個(gè)條目大概只會(huì)影響整個(gè)請(qǐng)求15ms左右,可以忽略不計(jì)。如果說(shuō)150ms的延遲是可以接受的,那么在一個(gè)并發(fā)不是很高的情況下,mapping最多可以有100w條,還是很多的。

測(cè)試中的不足

壓測(cè)的url請(qǐng)求并不隨機(jī)

所有的url都被重定向到一個(gè)地方。不過(guò)從結(jié)果來(lái)看,nginx確實(shí)是根據(jù)條目一個(gè)個(gè)請(qǐng)求的。這點(diǎn)倒沒(méi)有什么影響

沒(méi)有測(cè)試http://hostname/path?param=xxx這樣類型的url

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/38057.html

相關(guān)文章

  • Nginx map 模塊使用性能測(cè)試

    摘要:每個(gè)請(qǐng)求來(lái)的時(shí)候都會(huì)先去看看中有沒(méi)有,即使使用的是的方式也不免會(huì)讓我對(duì)它的性能產(chǎn)生一些擔(dān)憂,所以性能測(cè)試就必須要來(lái)一發(fā)了。注也在阿里云執(zhí)行只要是為了在一個(gè)數(shù)據(jù)中心降低網(wǎng)絡(luò)延遲。測(cè)試因?yàn)榭紤]到服務(wù)器比較穩(wěn)定,減少壓測(cè)總數(shù)。 背景 最近我操刀了leetcode的論壇遷移,整個(gè)過(guò)程持續(xù)了幾周的時(shí)間,總算暫時(shí)告了一個(gè)段落。常使用leetcode論壇的用戶應(yīng)該已經(jīng)發(fā)現(xiàn)論壇已經(jīng)大變樣了吧~ 期間遇...

    newsning 評(píng)論0 收藏0
  • 使用 Nginx map 指令匹配 User Agent 自定義值

    摘要:指令正則匹配指令使用模塊提供的,模塊可以創(chuàng)建變量,這些變量的值與另外的變量值相關(guān)聯(lián)。根據(jù)不同的設(shè)置網(wǎng)站根目錄通過(guò)指令獲取到自定義值后,可以做如下設(shè)置,讓不同的測(cè)試人員對(duì)應(yīng)不同的網(wǎng)站根目錄這里行,網(wǎng)站目錄可以用變量來(lái)表示。 原文鏈接:https://blog.tanteng.me/2016/... ,原文內(nèi)容會(huì)不斷完善,以原文為準(zhǔn)。 本文介紹有關(guān) User-Agent 的知識(shí),以及使用 ...

    shiweifu 評(píng)論0 收藏0
  • 在開(kāi)發(fā)環(huán)境下使用nginx重寫(xiě)uri代理功能

    摘要:本文同步在個(gè)人博客上,歡迎關(guān)注這篇文章整理了在前端開(kāi)發(fā)中,在開(kāi)發(fā)環(huán)境下使用重寫(xiě)及代理功能的方法。表示該規(guī)則是使用正則定義的,區(qū)分大小寫(xiě)。因此牢記在上下文中使用,而在上下文中使用。 本文同步在個(gè)人博客shymean.com上,歡迎關(guān)注 這篇文章整理了在前端開(kāi)發(fā)中,在開(kāi)發(fā)環(huán)境下使用nginx重寫(xiě)uri及代理功能的方法。 參考 nginx中文文檔 前端開(kāi)發(fā)者必備的 Nginx 知識(shí) Ngin...

    LMou 評(píng)論0 收藏0
  • 切圖仔 Nginx 小書(shū)?

    摘要:切圖仔的小書(shū)本文陸續(xù)介紹的功能配置及一些實(shí)用場(chǎng)景待完善。更可貴的是配置簡(jiǎn)單文檔豐富大大降低了學(xué)習(xí)的門檻。為什么選擇自年發(fā)布以來(lái),一直是服務(wù)器市場(chǎng)的霸主。雖然發(fā)布較晚,但是卻因?yàn)樵诟卟l(fā)下卓越的表現(xiàn)而迅速嶄露頭角。 切圖仔的 Nginx 小書(shū) 本文陸續(xù)介紹 Nginx 的功能、配置、及一些實(shí)用場(chǎng)景(待完善...)。 一、介紹 Nginx 1. Nginx 是什么? Nginx,很多工程師...

    pubdreamcc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<