QPS破萬(wàn)的mock服務(wù)器搭建方法

在微服務(wù)架構(gòu)盛行的當(dāng)下披泪,做全鏈路壓測(cè)的時(shí)候難免會(huì)遇到一些服務(wù)無(wú)法直接壓測(cè)羽峰,我們可以通過(guò)自己搭建類(lèi)似服務(wù)的方式來(lái)將mock掉對(duì)應(yīng)的服務(wù)氛濒,如果這個(gè)服務(wù)本身QPS要求不高的話(huà)可能還好枚钓,比如筆者曾經(jīng)用FastAPI搭建個(gè)mock服務(wù)器哟忍,測(cè)試下來(lái)QPS基本在1500-1800的樣子狡门。如果QPS要求更高陷寝,通過(guò)增加worker的方式其實(shí)效果不是太好,這時(shí)不妨試試使用openresty直接來(lái)搭建一個(gè)mock服務(wù)器其馏。下面是具體的實(shí)測(cè)數(shù)據(jù)和相關(guān)配置教程:

測(cè)試數(shù)據(jù)

工具:wrk2凤跑,所在host為4CPU

服務(wù)器:使用openresty作為mock的http服務(wù)器,host為8CPU

測(cè)試指令:

wrk -t8 -c100 -d30 http://remotehost:8000/greet

結(jié)論:

  1. 使用openresty啟動(dòng)單個(gè)worker的情況下叛复,QPS可以達(dá)到2W左右仔引;
  2. 使用openresty啟動(dòng)八個(gè)worker的情況下,QPS可以達(dá)到7.5W左右褐奥;

Openresty配置

docker啟動(dòng)

# 直接用docker啟服務(wù)了
docker run -d -v /mnt/nginx/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf -v /mnt/nginx/conf.d/:/etc/nginx/conf.d/ -p 80:80 openresty/openresty:alpine

目錄及配置

nginx/
|---conf
|    |---nginx.conf
|---conf.d
     |--default.conf

nginx.conf:

重點(diǎn)看worker_processes的配置

#user  nobody;
worker_processes 8;

# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;



#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    # Enables or disables the use of underscores in client request header fields.
    # When the use of underscores is disabled, request header fields whose names contain underscores are marked as invalid and become subject to the ignore_invalid_headers directive.
    # underscores_in_headers off;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

        # Log in JSON Format
        # log_format nginxlog_json escape=json '{ "timestamp": "$time_iso8601", '
        # '"remote_addr": "$remote_addr", '
        #  '"body_bytes_sent": $body_bytes_sent, '
        #  '"request_time": $request_time, '
        #  '"response_status": $status, '
        #  '"request": "$request", '
        #  '"request_method": "$request_method", '
        #  '"host": "$host",'
        #  '"upstream_addr": "$upstream_addr",'
        #  '"http_x_forwarded_for": "$http_x_forwarded_for",'
        #  '"http_referrer": "$http_referer", '
        #  '"http_user_agent": "$http_user_agent", '
        #  '"http_version": "$server_protocol", '
        #  '"nginx_access": true }';
        # access_log /dev/stdout nginxlog_json;

    # See Move default writable paths to a dedicated directory (#119)
    # https://github.com/openresty/docker-openresty/issues/119
    client_body_temp_path /var/run/openresty/nginx-client-body;
    proxy_temp_path       /var/run/openresty/nginx-proxy;
    fastcgi_temp_path     /var/run/openresty/nginx-fastcgi;
    uwsgi_temp_path       /var/run/openresty/nginx-uwsgi;
    scgi_temp_path        /var/run/openresty/nginx-scgi;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    # Don't reveal OpenResty version to clients.
    # server_tokens off;
}

default.conf:

重點(diǎn)看location /greet的配置

# worker_processes  8;

server {
    listen       80;
    server_name  localhost;

    access_log off;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/local/openresty/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/local/openresty/nginx/html;
    }

    location /content-test {
        default_type text/html;
        content_by_lua_block {
            ngx.say('<html><body><p>Hello, world!</p></body></html>')
        }
    }

    location /greet {
        content_by_lua_block {
        local json = require("cjson")
        local data = { hello = "world", code = 0 }
        ngx.header.content_type = "application/json"
        ngx.say(json.encode(data))
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咖耘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撬码,更是在濱河造成了極大的恐慌儿倒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呜笑,死亡現(xiàn)場(chǎng)離奇詭異夫否,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)叫胁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)凰慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驼鹅,你說(shuō)我怎么就攤上這事溉瓶。” “怎么了谤民?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疾宏。 經(jīng)常有香客問(wèn)我张足,道長(zhǎng),這世上最難降的妖魔是什么坎藐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任为牍,我火速辦了婚禮,結(jié)果婚禮上岩馍,老公的妹妹穿的比我還像新娘碉咆。我一直安慰自己,他們只是感情好蛀恩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疫铜。 她就那樣靜靜地躺著,像睡著了一般双谆。 火紅的嫁衣襯著肌膚如雪壳咕。 梳的紋絲不亂的頭發(fā)上席揽,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音谓厘,去河邊找鬼幌羞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竟稳,可吹牛的內(nèi)容都是我干的属桦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼他爸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼聂宾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讲逛,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亏吝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盏混,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蔚鸥,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年许赃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了止喷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡混聊,死狀恐怖弹谁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情句喜,我是刑警寧澤预愤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站咳胃,受9級(jí)特大地震影響植康,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜展懈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一销睁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧存崖,春花似錦冻记、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春贞瞒,著一層夾襖步出監(jiān)牢的瞬間偶房,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工军浆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棕洋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓乒融,卻偏偏與公主長(zhǎng)得像掰盘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赞季,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容