JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

基于Nginx实现灰度发布的实现方案

wys521 2024-09-14 13:45:52 精选教程 48 ℃ 0 评论

灰度发布(又称金丝雀发布)是指在黑与白之间能够平滑过渡的一种发布方式。在其上可以进行A/B 测试,先让让一部分用户继续用产品特性A,另一部分用户开始用产品特性B,如果特性B没有什么问题,那么逐步扩大范围,把所有用户都迁移到B上面来。

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,目前国内的很多大厂都在使用灰度发布方式。下面介绍几种通过Nginx实现的灰度发布的方案。

1、基于Nginx的权重实现方案

首先将服务器A下线(从Nginx的服务列表中剔除),运维人员通过Jenkins一键发布最新的代码到服务器A上,代码发布成功之后运维人员开始配置Nginx,配置Nginx核心就是配置Nginx的upstream这块,如下图所示的Nginx配置:

upstream webservers {
      server 192.168.201.121 weight=90;
      server 192.168.201.120 weight=10;
}

server {
      listen   80;
      location / {
          proxy_pass http://webservers
      }
}

值得注意的是权重值没有限定,如果weight的值设置的越大,那么这台服务器分配的流量就越高。通过上面的配置就可以实现对服务器A的灰度发布了,运维人员执行Nginx的重新加载配置命令将新的Nginx配置生效。此时将会有90%的流量分配到服务器B上,10%的流量分配到服务器A上。

如果新版本验证没有问题了,那么可以逐步将流量放到服务器A上。随后可以采用同样的方式升级服务器B。这种实现灰度发布的方式比较简单,Nginx自带的功能就可以实现。


2、基于客户端请求的方式



首先下掉服务器A,运维人员一键发布最新的代码到服务器A上,随后运维人员配置Nginx配置文件来处理客户端请求到底是要发送到哪个服务器上。Nginx的配置文件中的核心配置如下所示:

upstream webservers {
      server 192.168.201.121;
}
#新版本的服务器配置
upstream webservers-newweb {
      server 192.168.201.120;
}
server {
      listen   80;
      set $backend "webservers";
      #判断请求中是否存在特点的标识,如果存在特点的标识就转发服务器A
      if ($http_cookie~*"A=a") {  
        set $backend="webservers-newweb"
      }
      location / {
          # 根据上面的$backend参数值转发到对应的服务器上
          proxy_pass http://$backend
      }
}

基于客户端请求是Nginx通过获取客户端携带的Cookie或者Http请求头指定的键值对(如A=a键值对)将流量转发到新版本上(服务器A),如果新版本测试通过,那么可以将全部流量或者部分流量切换到新版上,这种策略比较适合特定的用户或者客户端访问新的版本。

总结:

以上的两种方式都是基于Nginx来实现,实现过程也是不复杂的。如果希望某一群体的用户使用新版本,那么此时可以通过基于客户端请求的方式来实现灰度发布;如果只是单纯的线上验证新版本,那么可以通过基于权重的方式实现灰度发布。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表