成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

基于Nginx實現一個灰度上線系統的示例代碼

瀏覽:2日期:2023-07-22 19:57:34

軟件開發一般不會上來就是最終版本,而是會一個版本一個版本的迭代。

新版本上線前都會經過測試,但就算這樣,也不能保證上線了不出問題。

所以,在公司里上線新版本代碼一般都是通過灰度系統。

灰度系統可以把流量劃分成多份,一份走新版本代碼,一份走老版本代碼。

而且灰度系統支持設置流量的比例,比如可以把走新版本代碼的流程設置為 5%,沒啥問題再放到 10%,50%,最后放到 100% 全量。

這樣可以把出現問題的影響降到最低。

不然一上來就全量,萬一出了線上問題,那就是大事故。

而且灰度系統不止這一個用途,比如產品不確定某些改動是不是要的,就要做 AB 實驗,也就是要把流量分成兩份,一份走 A 版本代碼,一份走 B 版本代碼。

那這樣的灰度系統是怎么實現的呢?

其實很多都是用 nginx 實現的。

nginx 是一個反向代理的服務,用戶請求發給它,由它轉發給具體的應用服務器。

這一層也叫做網關層。

由它負責轉發請求給應用服務器,那自然就可以在這里控制流量的分配,哪些流量走版本 A,哪些流量走版本 B。

下面我們實現一下:

首先,我們準備兩個版本的代碼。

這里創建個 nest 項目:

npx nest new gray_test -p npm

把 nest 服務跑起來:

npm run start

瀏覽器訪問下:

看到 hello world 代表 nest 服務跑起來了。

然后改下 AppService:

修改下端口:

然后再 npm run start:

瀏覽器訪問下:

現在我們就有了兩個版本的 nest 代碼。

接下來的問題是,如何用 nginx 實現灰度,讓一部分請求走一個版本的代碼,一部分請求走另一個版本呢?

我們先跑一個 nginx 服務。

docker desktop 搜索 nginx 鏡像(這步需要科學上網),點擊 run:

設置容器名為 gray1,端口映射宿主機的 82 到容器內的 80

現在訪問 http://localhost:82 就可以看到 nginx 頁面了:

我們要修改下配置文件,把它復制出來:

docker cp gray1:/etc/nginx/conf.d ~/nginx-config

然后編輯下這個 default.conf

添加這么一行配置:

location ^~ /api { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://192.168.1.6:3001;}

這行就是加了一個路由,把 /api/ 開頭的請求轉發給 http://宿主機IP:3001 這個服務。

用 rewrite 把 url 重寫了,比如 /api/xxx 變成了 /xxx。

然后我們重新跑個 nginx 容器:

容器名為 gray2,端口映射 83 到容器內的 80。

指定數據卷,掛載本地的 ~/nginx-config 目錄到容器內的 /etc/nginx/conf.d 目錄。

點擊 run。

然后看下 files 部分:

可以看到容器內的 /etc/nginx/conf.d 目錄標識為了 mounted。

點開看看:

這就是本地的那個文件。

我們在本地改一下試試:

容器內也同樣修改了。

在容器內修改這個文件,本地同樣也會修改。

也就是說掛載數據卷之后,容器內的這個目錄就是本地目錄,是同一份。

然后我們訪問下 http://localhost:83/api/ 看看:

nest 服務訪問成功了。

現在我們不是直接訪問 nest 服務了,而是經歷了一層 nginx 反向代理或者說網關層。

自然,我們可以在這一層實現流量控制的功能。

前面我們講負載均衡的時候,是這么配的:

默認會輪詢把請求發給 upstream 下的 server。

現在需要有多組 upstream:

upstream version1.0_server { server 192.168.1.6:3000;}upstream version2.0_server { server 192.168.1.6:3001;}upstream default { server 192.168.1.6:3000;}

有版本 1.0 的、版本 2.0 的,默認的 server 列表。

然后需要根據某個條件來區分轉發給哪個服務。

我們這里根據 cookie 來區分:

set $group 'default';if ($http_cookie ~* 'version=1.0'){ set $group version1.0_server;}if ($http_cookie ~* 'version=2.0'){ set $group version2.0_server;}location ^~ /api { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://$group;}

如果包含 version=1.0 的 cookie,那就走 version1.0_server 的服務,有 version=2.0 的 cookie 就走 version2.0_server 的服務,否則,走默認的。

這樣就實現了流量的劃分,也就是灰度的功能。

然后我們重新跑下容器:

這時候,你訪問 http://localhost:83/api/ 走到的就是默認的版本。

然后帶上 version=2.0 的 cookie,走到的就是另一個版本的代碼:

這樣,我們就實現了灰度的功能。

但現在還有一個問題:

什么時候設置的這個 cookie 呢?

比如我想實現 80% 的流量走版本 1.0,20% 的流量走版本 2.0

其實公司內部一般都有灰度配置系統,可以配置不同的版本的比例,然后流量經過這個系統之后,就會返回 Set-Cookie 的 header,里面按照比例來分別設置不同的 cookie。

比如隨機數載 0 到 0.2 之間,就設置 version=2.0 的 cookie,否則,設置 version=1.0 的 cookie。

這也叫做流量染色。

完整的灰度流程是這樣的:

第一次請求的時候,會按照設定的比例隨機對流量染色,也就是設置不同 cookie。

再次訪問的時候會根據 cookie 來走到不同版本的代碼。

這就實現了灰度功能,可以用來做 5% 10% 50% 100% 這樣逐步上線的灰度上線機制。

也可以用來做產品的 AB 實驗。

公司里都會用這樣的灰度系統。

總結

新版本代碼的上線基本都會用灰度系統,可以逐步放量的方式來保證上線過程不會出大問題,也可以用來做產品 AB 實驗。

我們可以用 nginx 實現這樣的功能。

nginx 有反向代理的功能,可以轉發請求到應用服務器,也叫做網關層。

我們可以在這一層根據 cookie 里的 version 字段來決定轉發請求到哪個服務。

在這之前,還需要按照比例來給流量染色,也就是返回不同的 cookie。

不管灰度系統做的有多復雜,底層也就是流量染色、根據標記轉發流量這兩部分,我們完全可以自己實現一個。

到此這篇關于基于Nginx實現一個灰度上線系統的示例代碼的文章就介紹到這了,更多相關Nginx灰度上線系統內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Nginx
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品无人码麻豆乱码1区2区 | 日韩一区日韩二区| 久久66热re国产| 国产一区免费视频| 欧美二区三区的天堂| 香蕉久久一区二区不卡无毒影院| 91视频xxxx| 91精品国产综合久久蜜臀 | 亚洲一二三区在线观看| 欧美在线三级| 欧美精选在线播放| 日韩和欧美一区二区| 99久久婷婷国产综合精品电影| 欧美午夜电影网| 午夜免费欧美电影| 中文亚洲免费| 国产精品乱人伦| 91视频com| 欧美xxxx老人做受| 国产成人精品一区二区三区四区| 一本到不卡精品视频在线观看| 中文字幕欧美一| 色综合婷婷久久| 性感美女久久精品| 午夜精品视频| 欧美xxx久久| 狠狠色综合色综合网络| 一本高清dvd不卡在线观看 | 91污在线观看| 久久亚洲欧美国产精品乐播 | 久久av在线| 婷婷国产v国产偷v亚洲高清| 在线精品视频一区二区三四| 六月丁香综合在线视频| 91精品国产综合久久久久久久 | 国产精品久久久久久亚洲毛片 | 5858s免费视频成人| 国产成人精品aa毛片| 日韩欧美另类在线| 午夜国产精品视频| 亚洲欧美电影一区二区| 国产美女诱惑一区二区| 爽爽淫人综合网网站| 色香蕉久久蜜桃| 韩国av一区二区三区四区| 日韩色在线观看| 欧美激情第8页| 有码一区二区三区| 久久久久久久久久久久久久一区 | 国产午夜精品一区二区三区视频| 欧美日本亚洲| 亚洲最色的网站| 在线亚洲精品福利网址导航| 国产成a人无v码亚洲福利| 亚洲国产高清不卡| 亚洲一区二区三区免费在线观看| 性欧美大战久久久久久久久| 欧美日韩国产免费一区二区| 91亚洲国产成人精品一区二三| 一区在线观看视频| 久久久久久九九九九| 国产一区二区在线视频| 国产色一区二区| 欧美在线综合| 国产aⅴ综合色| 国产精品福利影院| 色婷婷香蕉在线一区二区| 丁香婷婷综合五月| 亚洲日本一区二区| 欧美日韩你懂得| 欧美日韩1区| 香蕉久久一区二区不卡无毒影院| 91精品欧美一区二区三区综合在| 欧美巨乳波霸| 日韩av午夜在线观看| 精品国产sm最大网站| 国产日韩欧美一区二区三区四区| 精品一区二区三区的国产在线播放 | 亚洲永久免费精品| 麻豆传媒一区二区三区| 国产午夜精品理论片a级大结局| 国产亚洲精品久久久久婷婷瑜伽| 狠狠色丁香久久婷婷综合_中| 国产婷婷色一区二区三区在线| 久久久久久久久久久久久久一区| 懂色一区二区三区免费观看| 日韩美女视频一区| 欧美日韩亚洲丝袜制服| 欧美日韩在线不卡一区| 人禽交欧美网站| 久久一留热品黄| 美女诱惑黄网站一区| 99精品久久免费看蜜臀剧情介绍| 一区二区三区毛片| 欧美一卡2卡三卡4卡5免费| 亚洲精品日韩久久| 久久精品国产第一区二区三区| 中文字幕不卡在线播放| 欧美日韩aaa| 亚洲狼人精品一区二区三区| 国产在线不卡一卡二卡三卡四卡| ●精品国产综合乱码久久久久| 欧美疯狂性受xxxxx喷水图片| 在线午夜精品| 99久久综合99久久综合网站| 亚洲成人激情自拍| 国产亚洲1区2区3区| 欧美日韩精品二区第二页| 亚洲第一精品影视| 国产精品996| 亚洲国产aⅴ成人精品无吗| 精品国产一二三| 一本大道久久a久久综合婷婷| 欧美成人综合一区| 精品一区二区三区久久| 一区二区三区资源| 久久久蜜臀国产一区二区| 在线观看国产91| 9国产精品视频| 色综合中文综合网| 久久久久国产精品人| 欧美午夜在线观看| 亚洲高清资源综合久久精品| 粉嫩蜜臀av国产精品网站| 日本视频在线一区| 伊人一区二区三区| 亚洲国产精华液网站w| 欧美一区二区三区在线电影| 在线观看日韩一区| 亚洲一卡久久| 国内精品**久久毛片app| 粉嫩蜜臀av国产精品网站| 日本不卡免费在线视频| 亚洲一区二区三区中文字幕在线| 国产日韩精品视频一区| 日韩亚洲国产中文字幕欧美| 欧美性色aⅴ视频一区日韩精品| 亚洲视频成人| 今天的高清视频免费播放成人| 豆国产96在线|亚洲| 韩国三级在线一区| 蜜桃久久精品一区二区| 亚洲成a人v欧美综合天堂| 亚洲乱码国产乱码精品精的特点| 国产午夜久久久久| 精品国产乱码久久久久久久 | 亚洲国产成人porn| **网站欧美大片在线观看| 国产欧美日韩综合精品一区二区| 欧美不卡一区二区| 91精品国产福利| 欧美美女黄视频| 欧美特级限制片免费在线观看| 久久狠狠一本精品综合网| 亚洲美女啪啪| 在线免费观看欧美| 韩国一区二区三区美女美女秀| 欧美激情aⅴ一区二区三区| 99久久精品国产网站| 成人黄色一级视频| 成人性生交大片免费看中文网站| 国产精品一区二区久久不卡| 国产在线播放一区二区三区| 精品亚洲免费视频| 久久99精品国产麻豆婷婷洗澡| 免费成人在线视频观看| 奇米四色…亚洲| 日韩精品国产精品| 日韩1区2区3区| 另类专区欧美蜜桃臀第一页| 久久精品国产亚洲一区二区三区| 老司机精品视频导航| 麻豆成人免费电影| 久久精品国产精品亚洲精品| 麻豆中文一区二区| 久久精品国产99久久6| 国产最新精品精品你懂的| 国模一区二区三区白浆| 国产麻豆成人传媒免费观看| 国产91清纯白嫩初高中在线观看| 菠萝蜜视频在线观看一区| 欧美一区二视频在线免费观看| 欧美在线日韩精品| 亚洲午夜在线观看| 宅男噜噜噜66一区二区 | 97久久精品人人澡人人爽| www.成人网.com| 欧美激情成人在线| 国产精品国产三级欧美二区| 亚洲精品少妇| 免费h精品视频在线播放| 美女诱惑一区| 欧美三区免费完整视频在线观看| 欧美日韩黄色影视| 日韩欧美一区二区在线视频| 久久精品人人爽人人爽| 国产精品青草久久| 一区二区免费看| 免费成人在线播放| 国产激情精品久久久第一区二区 |