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

nginx mirror 流量鏡像的具體使用

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

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

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

nginx_http_mirror_module模塊特性

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

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

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

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

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

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

錯誤的說法:復制的鏡像請求和原始請求是相關聯的,只要鏡像請求沒有處理完成,原始請求就會被阻塞。

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

Nginx 如何實現流量鏡像

當請求到達 Nginx 時,如果 Nginx 開啟了流量鏡像功能,就會將請求復制一份,并根據 mirror location 中的配置來處理這份復制的請求。復制的鏡像請求和原始請求是沒有關聯,鏡像 的接口很慢,或者500都不影響原始請求的響應。

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; #只有內部請求可以調用
		proxy_pass http://127.0.0.1:10991$request_uri; #配置鏡像日志,mirror本身不支持日志
		proxy_set_header X-Original-URI $request_uri;
    }


    location /mirror2 {
		internal; #只有內部請求可以調用
		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設置為 off,則Content-Length必須設置為"",因為nginx(mirror_request_body)或tomcat(mirror_request_body)處理post請求時,會根據Content-Length獲取請求體,如果Content-Length不為空,而由于mirror_request_body或者proxy_pass_request_body設置為off,處理方以為post有內容,當request_body中沒有,處理方會一直等待至超時。mirror_request_body為off,nginx會報upstream請求超時;proxy_pass_request_body為off,tomcat會報異常。

案例一

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

錯誤如下所示:

 原因:

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

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

參考文章

Nginx流量鏡像 - 掘金

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    nginx中status的使用詳解

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

    Nginx網站根目錄更改及導致403 forbidden的問題解決

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

最新評論

古丈县| 菏泽市| 绩溪县| 新河县| 沅陵县| 政和县| 普兰店市| 雅安市| 阳新县| 梅州市| 贡觉县| 全州县| 高淳县| 民勤县| 合水县| 乌兰察布市| 宁河县| 新宁县| 阿克| 嘉峪关市| 五台县| 双峰县| 囊谦县| 琼海市| 平武县| 衡水市| 新乡市| 海门市| 长寿区| 股票| 海伦市| 海口市| 定日县| 五家渠市| 新泰市| 海淀区| 当涂县| 青川县| 美姑县| 府谷县| 客服|