日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

基于Nginx實(shí)現(xiàn)一個(gè)灰度上線(xiàn)系統(tǒng)的示例代碼

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

軟件開(kāi)發(fā)一般不會(huì)上來(lái)就是最終版本,而是會(huì)一個(gè)版本一個(gè)版本的迭代。

新版本上線(xiàn)前都會(huì)經(jīng)過(guò)測(cè)試,但就算這樣,也不能保證上線(xiàn)了不出問(wèn)題。

所以,在公司里上線(xiàn)新版本代碼一般都是通過(guò)灰度系統(tǒng)。

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

而且灰度系統(tǒng)支持設(shè)置流量的比例,比如可以把走新版本代碼的流程設(shè)置為 5%,沒(méi)啥問(wèn)題再放到 10%,50%,最后放到 100% 全量。

這樣可以把出現(xiàn)問(wèn)題的影響降到最低。

不然一上來(lái)就全量,萬(wàn)一出了線(xiàn)上問(wèn)題,那就是大事故。

而且灰度系統(tǒng)不止這一個(gè)用途,比如產(chǎn)品不確定某些改動(dòng)是不是要的,就要做 AB 實(shí)驗(yàn),也就是要把流量分成兩份,一份走 A 版本代碼,一份走 B 版本代碼。

那這樣的灰度系統(tǒng)是怎么實(shí)現(xiàn)的呢?

其實(shí)很多都是用 nginx 實(shí)現(xiàn)的。

nginx 是一個(gè)反向代理的服務(wù),用戶(hù)請(qǐng)求發(fā)給它,由它轉(zhuǎn)發(fā)給具體的應(yīng)用服務(wù)器。

這一層也叫做網(wǎng)關(guān)層。

由它負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求給應(yīng)用服務(wù)器,那自然就可以在這里控制流量的分配,哪些流量走版本 A,哪些流量走版本 B。

下面我們實(shí)現(xiàn)一下:

首先,我們準(zhǔn)備兩個(gè)版本的代碼。

這里創(chuàng)建個(gè) nest 項(xiàng)目:

npx nest new gray_test -p npm

把 nest 服務(wù)跑起來(lái):

npm run start

瀏覽器訪(fǎng)問(wèn)下:

看到 hello world 代表 nest 服務(wù)跑起來(lái)了。

然后改下 AppService:

修改下端口:

然后再 npm run start:

瀏覽器訪(fǎng)問(wèn)下:

現(xiàn)在我們就有了兩個(gè)版本的 nest 代碼。

接下來(lái)的問(wèn)題是,如何用 nginx 實(shí)現(xiàn)灰度,讓一部分請(qǐng)求走一個(gè)版本的代碼,一部分請(qǐng)求走另一個(gè)版本呢?

我們先跑一個(gè) nginx 服務(wù)。

docker desktop 搜索 nginx 鏡像(這步需要科學(xué)上網(wǎng)),點(diǎn)擊 run:

設(shè)置容器名為 gray1,端口映射宿主機(jī)的 82 到容器內(nèi)的 80

現(xiàn)在訪(fǎng)問(wèn) http://localhost:82 就可以看到 nginx 頁(yè)面了:

我們要修改下配置文件,把它復(fù)制出來(lái):

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

然后編輯下這個(gè) default.conf

添加這么一行配置:

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

這行就是加了一個(gè)路由,把 /api/ 開(kāi)頭的請(qǐng)求轉(zhuǎn)發(fā)給 http://宿主機(jī)IP:3001 這個(gè)服務(wù)。

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

然后我們重新跑個(gè) nginx 容器:

容器名為 gray2,端口映射 83 到容器內(nèi)的 80。

指定數(shù)據(jù)卷,掛載本地的 ~/nginx-config 目錄到容器內(nèi)的 /etc/nginx/conf.d 目錄。

點(diǎn)擊 run。

然后看下 files 部分:

可以看到容器內(nèi)的 /etc/nginx/conf.d 目錄標(biāo)識(shí)為了 mounted。

點(diǎn)開(kāi)看看:

這就是本地的那個(gè)文件。

我們?cè)诒镜馗囊幌略囋嚕?/p>

容器內(nèi)也同樣修改了。

在容器內(nèi)修改這個(gè)文件,本地同樣也會(huì)修改。

也就是說(shuō)掛載數(shù)據(jù)卷之后,容器內(nèi)的這個(gè)目錄就是本地目錄,是同一份。

然后我們?cè)L問(wèn)下 http://localhost:83/api/ 看看:

nest 服務(wù)訪(fǎng)問(wèn)成功了。

現(xiàn)在我們不是直接訪(fǎng)問(wèn) nest 服務(wù)了,而是經(jīng)歷了一層 nginx 反向代理或者說(shuō)網(wǎng)關(guān)層。

自然,我們可以在這一層實(shí)現(xiàn)流量控制的功能。

前面我們講負(fù)載均衡的時(shí)候,是這么配的:

默認(rèn)會(huì)輪詢(xún)把請(qǐng)求發(fā)給 upstream 下的 server。

現(xiàn)在需要有多組 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 的,默認(rèn)的 server 列表。

然后需要根據(jù)某個(gè)條件來(lái)區(qū)分轉(zhuǎn)發(fā)給哪個(gè)服務(wù)。

我們這里根據(jù) cookie 來(lái)區(qū)分:

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 的服務(wù),有 version=2.0 的 cookie 就走 version2.0_server 的服務(wù),否則,走默認(rèn)的。

這樣就實(shí)現(xiàn)了流量的劃分,也就是灰度的功能。

然后我們重新跑下容器:

這時(shí)候,你訪(fǎng)問(wèn) http://localhost:83/api/ 走到的就是默認(rèn)的版本。

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

這樣,我們就實(shí)現(xiàn)了灰度的功能。

但現(xiàn)在還有一個(gè)問(wèn)題:

什么時(shí)候設(shè)置的這個(gè) cookie 呢?

比如我想實(shí)現(xiàn) 80% 的流量走版本 1.0,20% 的流量走版本 2.0

其實(shí)公司內(nèi)部一般都有灰度配置系統(tǒng),可以配置不同的版本的比例,然后流量經(jīng)過(guò)這個(gè)系統(tǒng)之后,就會(huì)返回 Set-Cookie 的 header,里面按照比例來(lái)分別設(shè)置不同的 cookie。

比如隨機(jī)數(shù)載 0 到 0.2 之間,就設(shè)置 version=2.0 的 cookie,否則,設(shè)置 version=1.0 的 cookie。

這也叫做流量染色。

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

第一次請(qǐng)求的時(shí)候,會(huì)按照設(shè)定的比例隨機(jī)對(duì)流量染色,也就是設(shè)置不同 cookie。

再次訪(fǎng)問(wèn)的時(shí)候會(huì)根據(jù) cookie 來(lái)走到不同版本的代碼。

這就實(shí)現(xiàn)了灰度功能,可以用來(lái)做 5% 10% 50% 100% 這樣逐步上線(xiàn)的灰度上線(xiàn)機(jī)制。

也可以用來(lái)做產(chǎn)品的 AB 實(shí)驗(yàn)。

公司里都會(huì)用這樣的灰度系統(tǒng)。

總結(jié)

新版本代碼的上線(xiàn)基本都會(huì)用灰度系統(tǒng),可以逐步放量的方式來(lái)保證上線(xiàn)過(guò)程不會(huì)出大問(wèn)題,也可以用來(lái)做產(chǎn)品 AB 實(shí)驗(yàn)。

我們可以用 nginx 實(shí)現(xiàn)這樣的功能。

nginx 有反向代理的功能,可以轉(zhuǎn)發(fā)請(qǐng)求到應(yīng)用服務(wù)器,也叫做網(wǎng)關(guān)層。

我們可以在這一層根據(jù) cookie 里的 version 字段來(lái)決定轉(zhuǎn)發(fā)請(qǐng)求到哪個(gè)服務(wù)。

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

不管灰度系統(tǒng)做的有多復(fù)雜,底層也就是流量染色、根據(jù)標(biāo)記轉(zhuǎn)發(fā)流量這兩部分,我們完全可以自己實(shí)現(xiàn)一個(gè)。

到此這篇關(guān)于基于Nginx實(shí)現(xiàn)一個(gè)灰度上線(xiàn)系統(tǒng)的示例代碼的文章就介紹到這了,更多相關(guān)Nginx灰度上線(xiàn)系統(tǒng)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Nginx
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲ww精品| 亚洲一区日韩在线| 日本久久一区| 日韩精品国产精品| 日本亚洲欧美天堂免费| 日韩不卡一区二区| 日韩不卡一区二区三区| 国产精品久久久久久av公交车| 国产精品videosex极品| 福利一区二区| 色综合www| 久久国产中文字幕| 黑丝一区二区| 蘑菇福利视频一区播放| 亚洲欧美在线综合| 亚欧洲精品视频在线观看| 亚洲精品四区| 国产精品一区2区3区| 成人在线观看免费视频| 四虎4545www国产精品| 亚洲精品自拍| 国产精品久久| 日韩和的一区二在线| 午夜影院欧美| 日本不卡一区二区三区| 国语精品一区| 在线国产一区二区| 日韩一区中文| 久久婷婷国产| 特黄特色欧美大片| 丝袜脚交一区二区| 国产日韩一区二区三区在线播放| 麻豆久久久久久久| 99久久亚洲精品| 一区二区亚洲视频| 久久91视频| 亚洲欧洲一区二区天堂久久| 日韩午夜视频在线| 福利视频一区| 日韩影院在线观看| 精品国产欧美日韩| 亚洲欧美高清| 国产精成人品2018| 欧美日韩国产一区二区三区不卡| 日韩精品亚洲专区在线观看| 国产白浆在线免费观看| 亚洲免费激情| 国产精品极品在线观看| 午夜久久tv| 国产精品扒开腿做爽爽爽软件| 欧美成人精品三级网站| 日韩区一区二| 精品国模一区二区三区| 日本va欧美va精品发布| 日韩精品一区二区三区免费观看| 奇米色欧美一区二区三区| 欧美成人基地| 日韩av一区二区三区四区| 九九精品调教| 国产欧美自拍一区| 黄色成人精品网站| 久久丁香四色| 久色成人在线| 欧美精品日日操| 国产精品三级| 天堂成人国产精品一区| 五月天av在线| 国产精品qvod| 亚洲精品系列| 婷婷六月综合| 91欧美在线| 国产免费久久| 老牛影视一区二区三区| 日韩专区精品| 国产精品国产三级在线观看| 亚洲精品小说| jizzjizz中国精品麻豆| 国产欧美自拍| 亚洲v天堂v手机在线| 欧美日韩国产免费观看视频| 精品久久久中文字幕| 国产亚洲精品精品国产亚洲综合| 国产偷自视频区视频一区二区| yellow在线观看网址| 欧美伊人影院| 亚洲一区二区免费在线观看| 欧美成人高清| 亚洲四虎影院| 亚洲风情在线资源| 欧美成人一二区| 日本伊人午夜精品| 亚洲自拍另类| 蜜桃国内精品久久久久软件9| 国产一区二区三区国产精品| 国产剧情在线观看一区| 在线观看一区| 日韩视频一区二区三区在线播放免费观看 | 国产精品7m凸凹视频分类| 久久久久伊人| 国产精品一区二区99| 日本不卡高清视频| 免费在线欧美视频| 亚洲欧洲另类| 欧美影院三区| 精品国模一区二区三区| 日韩欧美精品综合| 国产一区二区三区探花| 国产精品2区| 国产精品v一区二区三区| 国产欧美综合一区二区三区| 91福利精品在线观看| 日韩久久99| 日韩黄色av| 97se亚洲| 欧美日本不卡高清| 日本色综合中文字幕| 日本中文字幕视频一区| 日韩精品导航| 日韩三区四区| 久久国产乱子精品免费女| 青青草精品视频| 日韩av中文字幕一区二区三区| 日本精品国产| 国产一级成人av| 免费亚洲一区| 成人国产精品一区二区免费麻豆| 91亚洲自偷观看高清| 欧洲av不卡| 免费精品国产的网站免费观看| 激情综合在线| 久久亚洲色图| 国产视频一区二| 国产成人免费精品| 日韩在线精品| 国产高清一区二区| 视频在线观看国产精品| 亚洲天堂免费| 国产乱码精品一区二区三区亚洲人| 国产精品午夜一区二区三区| 麻豆一区二区99久久久久| 日韩av在线播放网址| 亚洲成av人片一区二区密柚| 亚洲精品2区| 亚洲欧美在线综合| 国产精品亚洲二区| av日韩中文| 在线精品小视频| 日本中文字幕视频一区| 国产高清亚洲| 日韩不卡视频在线观看| 丝袜亚洲精品中文字幕一区| 日本午夜精品视频在线观看| 国产精品不卡| 尤物精品在线| 青青伊人久久| 国产精品蜜芽在线观看| 日韩午夜高潮| 国产精品一区二区av日韩在线| av免费不卡国产观看| 亚洲一区二区成人| 国产精品视频一区二区三区 | 国产精品久久免费视频| 在线天堂中文资源最新版| 一区在线免费观看| 91国内精品| 久久久久蜜桃| 97精品资源在线观看| 91一区二区| 日韩中文欧美在线| 精品国产亚洲日本| 亚洲黄色在线| 麻豆一区二区99久久久久| 欧美成a人免费观看久久| 老鸭窝毛片一区二区三区| 国产精品伊人| 欧美日韩尤物久久| 日韩精品国产精品| 国产成人精品亚洲日本在线观看| 久久成人精品| 精品久久久网| 蜜桃av一区| 一区二区精品伦理...| 亚洲精品高潮| 青青青免费在线视频| 亚洲18在线| 四虎4545www国产精品| 日本亚洲欧美天堂免费| 91精品国产91久久久久久黑人| 日韩在线网址| 亚洲成人二区| 国产精品任我爽爆在线播放 | 免费看av不卡| 欧美午夜网站| 女人天堂亚洲aⅴ在线观看| 国产精品视频一区二区三区| 99在线精品视频在线观看| 精品国产亚洲一区二区三区大结局| 日韩专区一卡二卡| 日本精品不卡| 国产精品观看|