使用nginx实现的灰度发布思路研究(待实践)

灰度发布也叫 A/B 测试,原理是一套系统在实现了负载均衡,全国节点都部署了系统之后,可以在新功能上线后,让一小部分用户先使用,从中收集使用信息来做对比和发现bug,及时调整,最终分发到全国的节点。

实现灰度发布的几个思路:

1、以nginx为例的分流,IP是最终的关键,从而以IP围绕中心,可以衍生出很多定义,比如用户标识、用户分组、设备ID及分组等,但是最终还是离不开IP去分流。

2、nginx支持模块开发,如果在一套成熟的系统中,可以开发自己的模块,从而脱离IP为分流导向,指定自己的精确分流的导向,比如设备ID这样更小颗粒度的定向风流。

3、nginx支持一些lua脚本的配置,比如lua更新nginx的配置,可以通过热重启重新加载lua脚本配置,但是现在我发现还有一种更简单的方法,就是nginx本身的配置文件,针对特定的IP分流配置,可以通过热重启nginx(也叫重新加载nginx的配置文件)来进行重新加载。

4、要实现灰度发布,还有一种非常重要的点,就是日志的收集,针对负载均衡的系统,由于节点很多,日志的收集非常重要,所以需要一套统一的日志平台进行收集和分析平台。

实现的具体方式:

在github上,我发现了在发布时,通过修改配置文件的形式,让nginx进行热重启重新加载配置文件的方式去实现;比如实现一套管理nginx的配置系统,再结合配置系统开发自己特定的业务发布平台,然后生成的配置文件上传到nginx上,最终重新让nginx加载新配置文件。

下面是我收集的一些链接,可以作为参考:

https://github.com/CNSRE/ABTestingGateway

https://github.com/boylegu/regal

https://github.com/Web4Nginx/Web4Nginx

https://github.com/pbchen/versionSwitchTool

https://github.com/zenxds/grey

https://github.com/songweihang/knight

https://github.com/xausky/ngx_http_dyabt_module

在github上搜索的关键字:灰度部署,灰度发布,AB TEST

现在这里做个思路研究记号,后续再实现。

时间: 2024-10-20 21:21:32

使用nginx实现的灰度发布思路研究(待实践)的相关文章

基于cookie在nginx实现业务灰度发布

基于cookie在nginx实现业务灰度发布 背景 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式. 灰度发布可以保证整体系统的稳定, 在初始灰度的时候就可以发现.调整问题,以保证其影响度. 业务存在灰度发布的需求, 可以通过nginx+lua形式实现业务的灰度发布, 目前这一形式已在广平互动广告相关业务已经实现. 流程 用户使用帐号登录后,判断用户帐号是否在灰度发布的名单中,如果再则给用户的cookie中增加灰度发布标识,然后刷新页面. 当用户访问页面时,业务接入层的nginx方向代理会

18. Nginx与Lua灰度发布

安装 memcached yum install -y memcached #启动memcached服务,端口11211,以nobody身份启动,-d后台模式运行 memcached -p11211 -u nobody -d #将自己的IP设为灰度测试的IP telnet 127.0.0.1 11211 set 119.32.216.122 0 0 1 1 quit 安装 memcached for lua wget https://github.com/openresty/lua-resty-

客户端灰度发布,NGINX+GeoIP2+GeoIP Database

需求的产生 (分地区更新) 我们公司呢是做电商平台的,其主打商品里有一款智能饮水机产品,而每台智能饮水机产品都是装在全国客户的家里.为了售后维护需要服务端如何保存数据并传回这块实现较简单,而在远程展示水机的余额.归属地.出水的质量等功能这块是由水机自身所镶嵌的一块智能PAD屏所完成,其PAD内部安装的是安卓系统:在由开发完成新功能的开发后需迭代智能PAD屏内部安卓系统APK版本时,在更新版本这块我们一直做的方法是全量更新不做任何更新上的限制.但随着业务量的增加全国大概有30万台水机版本需要更新,

nginx 根据IP 进行灰度发布

灰度发布,简单来说,就是根据各种条件,让一部分用户使用旧版本,另一部分用户使用新版本. nginx 的语法本身可以看作是一门小型的编程语言,通过简单的编程,可以轻松实现基于IP的灰度发布. 需求:搭建准生产环境,供开发人员/运维在线上做最后的调整.如果OK,直接用rsync推送至生产环境. 条件:办公室网络出口有固定IP 解决办法: nginx 负载均衡器判断客户端IP地址, 如果是办公室IP,则反向代理到准生产环境: 如果不是,则反向代理到生产环境. 1 2 3 4 5 6 7 8 9 10

使用Nginx+Lua实现Web项目的灰度发布

使用Nginx+Lua实现Web项目的灰度发布 Nginx编译安装Lua模块 一.安装LUA环境及相关库 官方网站:https://github.com/openresty/lua-nginx-module 1.LuaJIT wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz make && make install PREFIX=/usr/local/LuaJIT # vim /etc/profile export LUAJIT_LIB

nginx+lua+redis实现灰度发布_test

nginx+lua+redis实现灰度发布: 灰度发布是指在黑白之间能够平滑过渡的一种方式 AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来.灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现.调整问题,以保证其影响度. 灰度发布可以保证应用系统的稳定,降低产品升级影响的用户范围:也可以按照一定的策略让部分用户提前参与产品测试,从而提早获取到用户的反馈,完善应用功能 原理:使用ngi

Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布

一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和重启 service nginx startservice nginx stopservice nginx restart浏览器中 输入服务器的 ip 地址,即可看到相应信息 3. 其他信息 rpm -ql nginx 来查看安装路径yum remove nginx 来卸载 nginx -s rel

Nginx详解二十四:Nginx深度学习篇之灰度发布

实战场景 - 灰度发布 灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线实现方式: 1.用户的信息cookie等信息区别 2.根据用户的IP地址 安装memcached:yum -y install memcached 准备好两个tomcat,9090代表生产环境,8080代表预发布环境 为避免冲突,修改tomcat9090的端口号 这里分别在同个tomcat/webapp/ROOT/下放了同样内容的jsp文件 把8080下的jsp问价内容改一下区别于9090

线上版本灰度发布策略

从接触运维开始,最苦逼的事情就是业务上线,为什么这么说? 就是因为有了很多的大坑队友.不是因为开发的童鞋漏提代码,就是因为测试童鞋线下测试的不到位导致代码扔到线上后出现各种问题,各种404.近期和各位童鞋研究了应对这种现象的解决方案,得到了如下结果: 上线分为如下几种等级:测试发布.预发布.灰度发布.正式发布,下面分来来针对这四种发布介绍下区别. 测试发布:写完程序在线下测试,测试的过程和结果成为测试发布. 预发布:程序经历过测试发布后要把代码在线上部署一套(和生产环境一模一样的环境),使用生产