点赞
评论
收藏
分享
举报
使用 NGINX 进行灰度金丝雀发布
发表于2022-10-20 17:32

浏览 1.8k

    灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用文档的旧版本,一部分用户开始用支持新产品特性的新版本,如果用户对新版本没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。


步骤1
    在保留原有v1版本的情况下,我们部署一个v2版本,并配置一个新的upstream,配置文件看起来像这样:
(upstream中的server列表可以手工配置,也可以通过dyups之类的插件进行配置)
upstream app_v1 {
server 10.214.1.1:8000;
server 10.214.1.2:8000;
server 10.214.1.3:8000;
}

upstream app_v2 {
server 10.214.2.1:8000;
}

server {
listen 80;
server_name mydomain.com;

location / {
proxy_pass http://app_v1;
}
}


步骤2
    部署完v2新版本后,我们需要让测试人员能访问到,并进行相关测试。


    通常我们在header头中添加一个标记,标记该请求需要proxy_pass到新版本中:
(实际使用中,也可以使用cookie等其他方法,具体可以参见官方文档 http://nginx.org/en/docs/http/ngx_http_core_module.html)


upstream app_v1 {
server 10.214.1.1:8000;
server 10.214.1.2:8000;
server 10.214.1.3:8000;
}

upstream app_v2 {
server 10.214.2.1:8000;
}

server {
listen 80;
server_name mydomain.com;

location / {
if ( $http_slb_grey='up' ) {
proxy_pass http://app_v2;
}
proxy_pass http://app_v1;
}
}


    对于浏览器发送的请求,需要安装 ModHeader 插件,并配置header


步骤3
    将小部分用户流量(如5%)切换到新版本v2上,若出现BUG,立即回退,保证业务安全。


    通过split_clients配置,具体可以参考官方文档 http://nginx.org/en/docs/http/ngx_http_split_clients_module.html


upstream app_v1 {
server 10.214.1.1:8000;
server 10.214.1.2:8000;
server 10.214.1.3:8000;
}

upstream app_v2 {
server 10.214.2.1:8000;
}

split_clients "${remote_addr}AAA" $grey_upstream {
5% app_v2; #5%灰度版本
* app_v1; #其余正常版本
}

server {
listen 80;
server_name mydomain.com;

location / {
if ( $http_slb_grey='up' ) {
proxy_pass http://app_v2;
}
proxy_pass http://$grey_upstream;
}
}


步骤4
    待运行一段时间后无问题,将所有流量切换到新版本v2中,并逐步下线老版本v1


upstream app_v1 {
server 10.214.1.1:8000;
}

upstream app_v2 {
server 10.214.2.1:8000;
server 10.214.2.2:8000;
server 10.214.2.3:8000;
}

server {
listen 80;
server_name mydomain.com;

location / {
if ( $http_slb_grey='v1' ) {
proxy_pass http://app_v1;
}
if ( $http_slb_grey='v2' ) {
proxy_pass http://app_v2;
}
proxy_pass http://app_v2;
}
}




已修改于2023-03-09 02:26
本作品系原创
创作不易,留下一份鼓励
Yihan

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
Yihan
这家伙很懒还未留下介绍~
3
文章
0
问答
2
粉丝
相关文章
#使用小号usernobody;#开启进程数worker_processes8;#制定进程到cpu(四cpu:0001001001001000)worker_cpu_affinity00010010010010000001001001001000;#每个进程最大打开文件数worker_rlimit_nofile10240;#进程号保存文件pidlogs/nginx.pid;events{#使用epoll(linux2.6的高性能方式)useepoll;#每个进程最大连接数(最大连接=连接数x进程数)worker_connections10240;}http{#文件扩展名与文件类型映射表includemime.types;#默认文件类型default_typetext/html;#日志文件格式log_formatmain'$remote_addr-$remote_user[$time_local]$request''"$stat
点赞 1
浏览 864
定义几个大目录类型,后续每个目录会填充相关专题整理,或随笔或转帖或其他: NGINX主要应用场景梳理1)常用TOPN场景2)现状与痛点剖析3)典型三大行业灯塔场景 NGINX的基础篇、进阶篇和高级篇1)从0到1了解和部署NGINX2)NGINX精选行业案例详解3)NGINX高级调优和功能演进 NGINX开源版本和商用版本的差异化对比1)官方版本差异化对比2)真实痛点剖析3)行业观点之开源版与商用版 NGINX行业典型最佳实践整理1)运营商行业最佳实践分享2)金融行业最佳实践分享3)互联网行业最佳实践分享 NGINX组件增值能力梳理和架构支点1)为什么是NGINX组件?2)组件的核心增值能力是什么?3)系统架构为何引入这些支点? 最佳实践测试报告/行业部署案例1)运营商行业:最佳实践测试报告/部署2)金融行业:最佳实践测试报告/部署3)互联网行业:最佳实践测试报告/部署 2020/08/02第一版
点赞 1
浏览 908
Nginx和Apache和Tomcat的区别及优缺点1、定义:1)ApacheApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页,它是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。缺点:配置相对复杂,自身不支持动态页面。优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。(Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。)2)Tomcat:Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目。Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器。Tomcat是应用(Java)服务器,它只是一个
点赞 4
浏览 2.4k