亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nginx mirror 流量鏡像的具體使用

 更新時(shí)間:2024年08月06日 11:56:25   作者:lgq2016  
流量鏡像可以將實(shí)時(shí)流量的副本發(fā)送給被鏡像的服務(wù),本文主要介紹了nginx mirror 流量鏡像的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下

流量鏡像 (Traffic Mirroring),也稱(chēng)為流量影子 (Traffic Shadowing),是一種強(qiáng)大的、無(wú)風(fēng)險(xiǎn)的測(cè)試應(yīng)用版本的方法,它將實(shí)時(shí)流量的副本發(fā)送給被鏡像的服務(wù)。

采用這種方法,您可以搭建一個(gè)與原環(huán)境類(lèi)似的環(huán)境以進(jìn)行驗(yàn)收測(cè)試,從而提前發(fā)現(xiàn)問(wèn)題。由于鏡像流量存在于主服務(wù)關(guān)鍵請(qǐng)求路徑帶外,終端用戶(hù)在測(cè)試全過(guò)程不會(huì)受到影響。

nginx_http_mirror_module模塊特性

利用 mirror 模塊,可以將線上實(shí)時(shí)流量拷貝至其他環(huán)境同時(shí)不影響源站請(qǐng)求的響應(yīng),因?yàn)?Nginx 會(huì)丟棄 mirror 的響應(yīng)

mirror 模塊可用于以下幾個(gè)場(chǎng)景:

  • 通過(guò)預(yù)生產(chǎn)環(huán)境測(cè)試來(lái)觀察新系統(tǒng)對(duì)生產(chǎn)環(huán)境流量的處理能力
  • 復(fù)制請(qǐng)求日志以進(jìn)行安全分析
  • 復(fù)制請(qǐng)求用于數(shù)據(jù)科學(xué)研究

將生產(chǎn)環(huán)境的流量拷貝到預(yù)上線環(huán)境或測(cè)試環(huán)境的好處:

  • 可以驗(yàn)證功能是否正常,以及服務(wù)的性能;
  • 用真實(shí)有效的流量請(qǐng)求去驗(yàn)證,又不用造數(shù)據(jù),不影響線上正常訪問(wèn);
  • 這跟灰度發(fā)布還不太一樣,鏡像流量不會(huì)影響真實(shí)流量;
  • 可以用來(lái)排查線上問(wèn)題;
  • 重構(gòu),假如服務(wù)做了重構(gòu),這也是一種測(cè)試方式;

Nginx的流量鏡像是只復(fù)制鏡像發(fā)送到配置好的后端,但是后端響應(yīng)返回到nginx之后,nginx是自動(dòng)丟棄掉的,這個(gè)特性就保證了鏡像后端的不管任何處理不會(huì)影響到正??蛻?hù)端的請(qǐng)求。

錯(cuò)誤的說(shuō)法:復(fù)制的鏡像請(qǐng)求和原始請(qǐng)求是相關(guān)聯(lián)的,只要鏡像請(qǐng)求沒(méi)有處理完成,原始請(qǐng)求就會(huì)被阻塞。

經(jīng)過(guò)測(cè)試,鏡像 的接口很慢,或者500都不影響原始請(qǐng)求的響應(yīng)。

Nginx 如何實(shí)現(xiàn)流量鏡像

當(dāng)請(qǐng)求到達(dá) Nginx 時(shí),如果 Nginx 開(kāi)啟了流量鏡像功能,就會(huì)將請(qǐng)求復(fù)制一份,并根據(jù) mirror location 中的配置來(lái)處理這份復(fù)制的請(qǐng)求。復(fù)制的鏡像請(qǐng)求和原始請(qǐng)求是沒(méi)有關(guān)聯(lián),鏡像 的接口很慢,或者500都不影響原始請(qǐng)求的響應(yīng)。

Nginx 流量鏡像配置

upstream bd_interface {
    server 10.1.1.1:8080;
    check interval=3000 rise=2 fall=5 timeout=2000 type=http;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx http_4xx;
}

#鏡像流量也可以負(fù)載均衡
upstream mirror_interface1 {
    server 10.2.1.1:9090;
    check interval=3000 rise=2 fall=5 timeout=2000 type=http;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx http_4xx;
}

#鏡像流量也可以負(fù)載均衡
upstream mirror_interface2 {
    server 10.3.1.1:9090;
    check interval=3000 rise=2 fall=5 timeout=2000 type=http;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx http_4xx;
}


server {
    listen       80;
    server_name  xxx;
    access_log  logs/bd-interface.log  access_json;
    charset utf8;
    client_max_body_size 800M;

    gzip  on;
    gzip_min_length 5k;
    gzip_comp_level 8;
    gzip_types application/javascript text/css text/javascript image/jpeg image/gif image/png application/json;

    proxy_read_timeout 600s;
    proxy_connect_timeout   600s;
    proxy_send_timeout      600s;


    location / {
		mirror /mirror1;
		mirror /mirror2; #兩份鏡像
		mirror_request_body on;

		proxy_http_version 1.1;
		proxy_pass http://bd_interface;
		proxy_next_upstream http_500 http_502 http_503 http_504 http_403 http_404 http_429 error timeout invalid_header non_idempotent;
		proxy_redirect off;
		proxy_set_header Host $host:$server_port;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_connect_timeout    20;
		proxy_read_timeout       1000;
		proxy_send_timeout       300;
		proxy_buffer_size 64k;
		proxy_buffers   32 32k;
		proxy_busy_buffers_size 128k;
    }
    location /mirror1 {
		internal; #只有內(nèi)部請(qǐng)求可以調(diào)用
		proxy_pass http://127.0.0.1:10991$request_uri; #配置鏡像日志,mirror本身不支持日志
		proxy_set_header X-Original-URI $request_uri;
    }


    location /mirror2 {
		internal; #只有內(nèi)部請(qǐng)求可以調(diào)用
		proxy_pass http://127.0.0.1:10992$request_uri; #配置鏡像日志,mirror本身不支持日志
		proxy_set_header X-Original-URI $request_uri;
    }


    #狀態(tài)監(jiān)控
    location /nginx_status {
        stub_status on;
        access_log off;
    }
    #狀態(tài)監(jiān)控
    location /check_status {
        check_status;
        access_log off;
    }
}

server {
	listen 10992;
	server_name 127.0.0.1;
	client_max_body_size 800M;

    proxy_read_timeout 600s;
    proxy_connect_timeout   600s;
    proxy_send_timeout      600s;

	access_log  logs/bd-interface.log  access_json;
	location / {
		    proxy_http_version 1.1; #流量和并發(fā)大時(shí)必須使用http1.1
			proxy_pass http://mirror_interface2;
	}
}


server {
	listen 10991;
	server_name 127.0.0.1;
	client_max_body_size 800M;

    proxy_read_timeout 600s;
    proxy_connect_timeout   600s;
    proxy_send_timeout      600s;

	access_log  logs/bd-interface.log  access_json;
	location / {
		proxy_http_version 1.1;#流量和并發(fā)大時(shí)必須使用http1.1
		proxy_pass http://mirror_interface1;
	}
}

Nginx流量拷貝的注意事項(xiàng)

mirror_request_body/proxy_pass_request_body與Content-Length需配置一致。如果mirror_request_body或者proxy_pass_request_body設(shè)置為 off,則Content-Length必須設(shè)置為"",因?yàn)閚ginx(mirror_request_body)或tomcat(mirror_request_body)處理post請(qǐng)求時(shí),會(huì)根據(jù)Content-Length獲取請(qǐng)求體,如果Content-Length不為空,而由于mirror_request_body或者proxy_pass_request_body設(shè)置為off,處理方以為post有內(nèi)容,當(dāng)request_body中沒(méi)有,處理方會(huì)一直等待至超時(shí)。mirror_request_body為off,nginx會(huì)報(bào)upstream請(qǐng)求超時(shí);proxy_pass_request_body為off,tomcat會(huì)報(bào)異常。

案例一

最近某個(gè)機(jī)房a空間不夠,考慮遷移到分公司的機(jī)房b,從當(dāng)前機(jī)房a到新機(jī)房b有將近2000公里,往返時(shí)延41ms。而老機(jī)房a在內(nèi)網(wǎng)環(huán)境下延小于1ms。拍腦袋計(jì)劃使用nginx流量鏡像雙寫(xiě)到a和b兩個(gè)機(jī)房,反向代理到a機(jī)房,鏡像到b機(jī)房。先不說(shuō)方案的問(wèn)題,比如無(wú)法保證數(shù)據(jù)一致性。僅僅從流量復(fù)制來(lái)說(shuō)就有問(wèn)題。大流量高并發(fā)測(cè)試發(fā)現(xiàn),nginx報(bào)400的錯(cuò)誤,kafka客戶(hù)端報(bào)超時(shí)的錯(cuò)誤,并發(fā)稍微增加就會(huì)出現(xiàn)這兩種報(bào)錯(cuò),到b機(jī)房流量的吞吐量遠(yuǎn)不及a機(jī)房。

錯(cuò)誤如下所示:

 原因:

使用nginx mirror進(jìn)行流量鏡像,壓測(cè)時(shí)發(fā)現(xiàn),情況1(反向代理到機(jī)房a,流量鏡像到機(jī)房b),kafka客戶(hù)端報(bào)超時(shí)錯(cuò)誤,nginx代理報(bào)400錯(cuò)誤,推測(cè)主要原因是:到a機(jī)房延時(shí)1ms, 到b機(jī)房延時(shí)41ms, 在情況1時(shí),假設(shè)a服務(wù)端每秒處理10個(gè)請(qǐng)求,b由于延時(shí)較長(zhǎng),導(dǎo)致請(qǐng)求一定程度的堆積(壓測(cè)時(shí)發(fā)送的請(qǐng)求速度是以a的消費(fèi)能力為準(zhǔn)的,鏡像到b只是順帶著做轉(zhuǎn)發(fā)),結(jié)果就是b服務(wù)端每秒鐘要處理的請(qǐng)求>10個(gè),處理不過(guò)來(lái)拋出錯(cuò)誤。

 反向佐證,如果是情況2(直連b服務(wù)),情況3(只反向代理到b),情況4(反向代理到b,同時(shí)流量鏡像到a),情況5(情況1在并發(fā)請(qǐng)求數(shù)較小時(shí))都不會(huì)出現(xiàn)報(bào)錯(cuò)的問(wèn)題。

參考文章

Nginx流量鏡像 - 掘金

到此這篇關(guān)于nginx mirror 流量鏡像的具體使用的文章就介紹到這了,更多相關(guān)nginx mirror 流量鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx反向代理location和proxy_pass配置規(guī)則詳細(xì)總結(jié)

    Nginx反向代理location和proxy_pass配置規(guī)則詳細(xì)總結(jié)

    nginx代理訪問(wèn)很好用,但是好多人不清楚location和proxy_pass組合在一起使用時(shí)訪問(wèn)的url被代理的url真實(shí)地址是什么,下面這篇文章主要給大家介紹了關(guān)于Nginx反向代理location和proxy_pass配置規(guī)則的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • nginx 不同的訪問(wèn)路徑對(duì)應(yīng)項(xiàng)目不同的目錄的實(shí)現(xiàn)方法

    nginx 不同的訪問(wèn)路徑對(duì)應(yīng)項(xiàng)目不同的目錄的實(shí)現(xiàn)方法

    要在 Nginx 中配置不同的訪問(wèn)路徑對(duì)應(yīng)不同的項(xiàng)目目錄,可以使用 Nginx 的?location?指令來(lái)實(shí)現(xiàn),本文主要介紹了nginx不同的訪問(wèn)路徑對(duì)應(yīng)項(xiàng)目不同的目錄的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Nginx實(shí)現(xiàn)服務(wù)端集群搭建

    Nginx實(shí)現(xiàn)服務(wù)端集群搭建

    本文介紹了如何搭建Nginx服務(wù)端集群,主要包括動(dòng)靜分離及其Tomcat集群搭建,通過(guò)本文可以了解如何搭建高效、可擴(kuò)展、高可用的服務(wù)器架構(gòu),提高網(wǎng)站性能和可靠性,感興趣的可以了解一下
    2023-08-08
  • Nginx下無(wú)法使用中文URL的解決方法

    Nginx下無(wú)法使用中文URL的解決方法

    最近發(fā)現(xiàn)有很多的url打不開(kāi),后來(lái)仔細(xì)觀察后發(fā)現(xiàn)是中文url的問(wèn)題,所以這篇文章主要給大家介紹了Nginx下無(wú)法使用中文URL的解決方法,文中提供了兩種方法供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • nginx代理實(shí)現(xiàn)靜態(tài)資源訪問(wèn)的示例代碼

    nginx代理實(shí)現(xiàn)靜態(tài)資源訪問(wèn)的示例代碼

    本文主要介紹了nginx代理實(shí)現(xiàn)靜態(tài)資源訪問(wèn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Nginx URL重寫(xiě)rewrite機(jī)制原理及使用實(shí)例

    Nginx URL重寫(xiě)rewrite機(jī)制原理及使用實(shí)例

    這篇文章主要介紹了Nginx URL重寫(xiě)(rewrite)機(jī)制原理及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • prometheus監(jiān)控nginx的實(shí)現(xiàn)

    prometheus監(jiān)控nginx的實(shí)現(xiàn)

    這篇文章主要介紹了prometheus監(jiān)控nginx的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Centos7 安裝Nginx整合Lua的示例代碼

    Centos7 安裝Nginx整合Lua的示例代碼

    這篇文章主要介紹了Centos7 安裝Nginx整合Lua的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Windows下Nginx的啟動(dòng)停止重啟等命令操作過(guò)程

    Windows下Nginx的啟動(dòng)停止重啟等命令操作過(guò)程

    最近在window 上安裝了nginx ,對(duì)nginx 的操作不是很熟,故在此記錄一下常用操作,本文詳細(xì)介紹了Windows下Nginx的啟動(dòng),停止,重啟等命令,需要的朋友可以參考下
    2024-03-03
  • Nginx負(fù)載均衡以及動(dòng)靜分離的原理與配置

    Nginx負(fù)載均衡以及動(dòng)靜分離的原理與配置

    動(dòng)靜分離和負(fù)載均衡都是配置nginx實(shí)現(xiàn)對(duì)請(qǐng)求進(jìn)行操作,所以下面這篇文章主要給大家介紹了關(guān)于Nginx負(fù)載均衡以及動(dòng)靜分離的相關(guān)資料,需要的朋友可以參考下
    2021-06-06

最新評(píng)論