最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx mirror 流量鏡像的具體使用

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

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

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

nginx_http_mirror_module模塊特性

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

mirror 模塊可用于以下幾個場景:

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

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

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

Nginx的流量鏡像是只復(fù)制鏡像發(fā)送到配置好的后端,但是后端響應(yīng)返回到nginx之后,nginx是自動丟棄掉的,這個特性就保證了鏡像后端的不管任何處理不會影響到正??蛻舳说恼埱?/strong>。

錯誤的說法:復(fù)制的鏡像請求和原始請求是相關(guān)聯(lián)的,只要鏡像請求沒有處理完成,原始請求就會被阻塞。

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

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

當(dāng)請求到達 Nginx 時,如果 Nginx 開啟了流量鏡像功能,就會將請求復(fù)制一份,并根據(jù) mirror location 中的配置來處理這份復(fù)制的請求。復(fù)制的鏡像請求和原始請求是沒有關(guān)聯(lián),鏡像 的接口很慢,或者500都不影響原始請求的響應(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;
}

#鏡像流量也可以負載均衡
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;
}

#鏡像流量也可以負載均衡
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)部請求可以調(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)部請求可以調(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ā)大時必須使用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ā)大時必須使用http1.1
		proxy_pass http://mirror_interface1;
	}
}

Nginx流量拷貝的注意事項

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

案例一

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

錯誤如下所示:

 原因:

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

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

參考文章

Nginx流量鏡像 - 掘金

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

相關(guān)文章

  • nginx代理返回代碼499問題分析與處理

    nginx代理返回代碼499問題分析與處理

    我們通過nginx作為互聯(lián)網(wǎng)代理服務(wù)器,通過它實現(xiàn)我行內(nèi)部系統(tǒng)向互聯(lián)網(wǎng)系統(tǒng)的接口訪問及調(diào)用,但是在使用過程中,不時的會出現(xiàn)大量返回代碼為499的問題,所以本文我們對為什么nginx會返回499錯誤代碼展開分析和研究
    2023-06-06
  • Nginx配置React項目Url后直接輸入路由路徑時報404問題的解決

    Nginx配置React項目Url后直接輸入路由路徑時報404問題的解決

    這篇文章主要給大家介紹了關(guān)于Nginx配置React項目Url后面直接輸入路由路徑時報404問題的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Nginx中配置HTTP/2協(xié)議的詳細指南

    Nginx中配置HTTP/2協(xié)議的詳細指南

    HTTP/2 是 HTTP 協(xié)議的下一代版本,旨在提高性能、減少延遲并優(yōu)化現(xiàn)代網(wǎng)絡(luò)環(huán)境中的通信效率,本文將為大家介紹Nginx配置HTTP/2協(xié)議想詳細步驟,需要的可以參考下
    2025-04-04
  • 前端如何修改nginx配置(在VSCode)

    前端如何修改nginx配置(在VSCode)

    前端開發(fā)中Nginx是最常用的?Web?服務(wù)器和反向代理工具,主要用于部署靜態(tài)資源、處理跨域、配置緩存策略等,這篇文章主要介紹了前端如何修改nginx配置的相關(guān)資料,需要的朋友可以參考下
    2025-09-09
  • Nginx訪問控制及安全配置文檔詳解

    Nginx訪問控制及安全配置文檔詳解

    本文檔介紹了Nginx服務(wù)的訪問控制、密碼認證及版本隱藏配置,適用于主流Linux系統(tǒng),可直接復(fù)制使用,主要內(nèi)容包括生成密碼文件、配置訪問控制和密碼認證、隱藏Nginx版本號,以及相關(guān)注意事項和常見問題排查
    2026-05-05
  • Nginx負載均衡中的Memcached緩存模塊

    Nginx負載均衡中的Memcached緩存模塊

    Nginx?的?ngx_http_memcached_module?模塊本身并沒有提供緩存功能,它只是一個將用戶請求轉(zhuǎn)發(fā)到?Memcached?服務(wù)器的代理模塊,這篇文章主要介紹了Nginx負載均衡之Memcached緩存模塊,需要的朋友可以參考下
    2024-06-06
  • Nginx 實現(xiàn) TCP/DUP流量按 IP 動態(tài)轉(zhuǎn)發(fā)操作方法

    Nginx 實現(xiàn) TCP/DUP流量按 IP 動態(tài)轉(zhuǎn)發(fā)操作方法

    為優(yōu)化網(wǎng)絡(luò)性能和提升服務(wù)可用性,通過Nginx配置stream模塊根據(jù)客戶端IP地址動態(tài)轉(zhuǎn)發(fā)TCP請求至不同后端服務(wù)器節(jié)點,適用于數(shù)據(jù)庫代理、TCP服務(wù)負載均衡及地域或來源IP分流的流量調(diào)度等場景,本文給大家介紹Nginx 實現(xiàn) TCP/DUP流量按 IP 動態(tài)轉(zhuǎn)發(fā)的操作
    2024-10-10
  • Nginx虛擬主機的六種配置(最全)

    Nginx虛擬主機的六種配置(最全)

    利用虛擬主機,不用為每個要運行的網(wǎng)站提供一臺單獨的Nginx服務(wù)器或單獨運行一組Nginx進程,本文主要介紹了Nginx虛擬主機的六種配置,具有一定的參考價值,感興趣的可以了解下
    2023-08-08
  • nginx中status的使用詳解

    nginx中status的使用詳解

    本文主要介紹了nginx中status的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • Nginx網(wǎng)站根目錄更改及導(dǎo)致403 forbidden的問題解決

    Nginx網(wǎng)站根目錄更改及導(dǎo)致403 forbidden的問題解決

    最近因為工作需要,要將Nginx網(wǎng)站根目錄更改下,通過網(wǎng)上的一些教程更改后,但發(fā)現(xiàn)測試的時候一直提示403 forbidden錯誤,后臺通過一個朋友的提示也解決了,所以現(xiàn)在將詳細的步驟分享給大家,有需要的朋友們可以參考學(xué)習(xí)。
    2016-10-10

最新評論

富锦市| 桓仁| 自治县| 开阳县| 卓尼县| 和静县| 渭南市| 靖远县| 太仆寺旗| 阿鲁科尔沁旗| 迭部县| 岳阳市| 灌云县| 方山县| 永靖县| 湘潭县| 界首市| 台中市| 涟源市| 桃源县| 迁西县| 沙坪坝区| 岱山县| 通州市| 清原| 崇左市| 平遥县| 新龙县| 万年县| 靖远县| 缙云县| 桂平市| 务川| 阜宁县| 龙门县| 屏东市| 大安市| 龙山县| 彭山县| 神池县| 新余市|