基于Nginx实现灰度发布的详细流程

 更新时间:2024年05月31日 08:51:12   作者:云牧  
灰度发布系统的核心是将用户流量分成不同部分,一部分用户使用新版本,而另一部分用户继续使用旧版本,其灰度发布通常是通过 Nginx 实现的,所以本文给大家介绍了基于Nginx实现灰度发布的详细流程,需要的朋友可以参考下

灰度发布概述

软件开发过程中,通常不会直接推出最终版本,而是通过逐步迭代的方式进行降低风险。
灰度发布系统的核心是将用户流量分成不同部分,一部分用户使用新版本,而另一部分用户继续使用旧版本。通过控制流量比例,例如最初只有 5% 的用户使用新版本,如果没有问题,比例可以逐步提高到 10%、50%,最终实现 100% 用户使用新版本。这种方法可以最大程度地减少潜在问题对用户的影响。
除了逐步推出新版本外,灰度发布系统还可用于产品的 A/B 测试。通过将流量分成两部分,一部分用户使用 A 版本,另一部分用户使用 B 版本,可以测试哪个版本更有利于业务。

灰度发布的流程

  • 用户首次请求时,根据设定的比例随机设置 cookie,实现流量染色。
  • 用户再次访问时,根据 cookie 转发至不同版本的服务。
  • 后端根据 cookie 请求不同的服务,前端根据 cookie 执行不同逻辑。

实现灰度发布

其灰度发布通常是通过 Nginx 实现的。Nginx 是一个反向代理服务,可以将用户请求转发给具体的应用服务器,这一层也被称为网关层。在网关层,可以控制流量分配,决定哪些流量使用 A 版本,哪些使用 B 版本。

创建 nest

创建个 nest 项目开启两个端口,一个 3000,一个 3001:

npx nest new gray_test -p npm

分别访问返回 Hello111 和 Hello 222:

现在我们就有了两个版本的 nest 代码。

使用 docker 运行 nginx 服务

设置容器名为 gray1,端口映射宿主机的 82 到容器内的 80:

现在访问 http://localhost:82/ 就可以看到 nginx 页面了:

继续跑个 nginx 容器:

容器名为 gray2,端口映射 83 到容器内的 80。
挂载目录不变。

修改 Nginx 配置文件,设置路由规则,将特定请求转发给指定的服务

把配置文件复制出来:

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

编辑复制文件:

# 定义一个location块,用于处理以/api开头的请求
location ^~ /api {
    # 使用rewrite模块来重写请求的URI
    # 将请求中/api/(.*)的部分重写为/$1,即去掉/api前缀
    # 'break'标志表示停止后续的重写操作
    rewrite ^/api/(.*)$/$1 break;

    # 将重写后的请求代理到后端服务器
    # 请求将被转发到192.168.0.100:3001这个地址
    proxy_pass http://192.168.0.100:3001;
}

然后我们访问下 http://localhost:83/api/:

创建多组 upstream,分别代表不同版本的服务

之前负载均衡的时候,是这么配的:

现在我们需要配置多组 upstream:

# 定义上游服务器组,用于版本1.0的服务
upstream version1.0_server {
    server 192.168.0.100:3000; # 指定服务器IP地址和端口号
}

# 定义上游服务器组,用于版本2.0的服务
upstream version2.0_server {
    server 192.168.0.100:3001; # 指定服务器IP地址和端口号
}

# 定义默认的上游服务器组,当请求没有指定版本时使用
upstream default {
    server 192.168.0.100:3000; # 指定默认的服务器IP地址和端口号
}

根据请求中的 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;
}

测试验证

我们重新跑下容器:

访问 http://localhost:83/api/ 走到的就是默认的版本:

带上 version=2.0 的 cookie,走到的就是另一个版本的代码:

以上就是基于Nginx实现灰度发布的详细流程的详细内容,更多关于Nginx灰度发布的资料请关注脚本之家其它相关文章!

相关文章

  • 使用nginx做负载均衡的模块解读

    使用nginx做负载均衡的模块解读

    这篇文章主要介绍了使用nginx做负载均衡的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Nginx实现浏览器可实时查看访问日志的步骤详解

    Nginx实现浏览器可实时查看访问日志的步骤详解

    我们经常需要在页面上实时查看nginx的日志输出,并且能在页面上显示,那么下面小编就给大家说下怎么在浏览器上实时动态的查看nginx的访问日志,有需要的朋友们可以参考借鉴。
    2016-09-09
  • Nginx出现请求重复提交的处理方法

    Nginx出现请求重复提交的处理方法

    在网络世界的大舞台上,Nginx 就像是一位兢兢业业的交通警察,指挥着网络请求的有序流动,然而,有时候也会出现一些让人头疼的状况,比如请求的重复提交,该如何应对呢?本文介绍了Nginx出现请求重复提交的处理方法,需要的朋友可以参考下
    2024-07-07
  • Django+Nginx+uwsgi服务器部署

    Django+Nginx+uwsgi服务器部署

    这篇文章介绍了Django+Nginx+uwsgi服务器部署的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Nginx正反向代理及负载均衡等功能实现配置代码实例

    Nginx正反向代理及负载均衡等功能实现配置代码实例

    这篇文章主要介绍了Nginx正反向代理及负载均衡等功能实现配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Nginx配置Tcp负载均衡的方法

    Nginx配置Tcp负载均衡的方法

    这篇文章主要为大家详细介绍了Nginx配置Tcp负载均衡的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Nginx反向代理的主被动健康检查方式

    Nginx反向代理的主被动健康检查方式

    这篇文章主要介绍了Nginx反向代理的主被动健康检查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • CentOS系统rpm安装Nginx和配置

    CentOS系统rpm安装Nginx和配置

    大家好,本篇文章主要讲的是CentOS系统rpm安装Nginx和配置,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Nginx部署项目上传文件报错413的解决方法

    Nginx部署项目上传文件报错413的解决方法

    本文主要介绍了Nginx部署项目上传文件报错413的解决方法,报错413是因为Nginx对上传大小做了限制,所以我们需要配置文件,下面就来解决这个问题,感兴趣的可以了解一下
    2024-03-03
  • 详解nginx 配置文件解读

    详解nginx 配置文件解读

    这篇文章主要介绍了详解nginx 配置文件解读,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论