nginx实现灰度切换,流量比例和灰度策略,
nginx实现灰度切换,流量比例和灰度策略,
github代码:https://github.com/singgel/nginx-luaDemo/
一. 需求背景
需要把旧的推荐服务逐步切换到新的推荐服务上,需要灰度切换,流量比例和灰度策略可以控制。
二. 方案
当前数据请求流程是:外部请求—>易车nginx --->后端服务 ;
经过跟运维沟通发现,目前易车nginx 是公司级别的 不允许某个业务对配置的修改,所以我们在易车nginx 和 后端服务之间添加了一个新的转发组件;已经跟运维沟通过该方案可行。
小流量数据请求流程为:外部请求--->易车nginx---->小流量转发组件—>后端服务
目前对于转发组件的选型有两种:
1.使用nginx + lua来实现
2.使用openresty
经过调研我们打算使用的转发组件是 openresty 方案,在原有业务之上加入openresty代理,使用lua来控制流量比例和灰度策略;
OpenResty是在nginx的基础上,集成了很多第三方模块,比如默认带了lua模块,开发人员可以使用Lua语言对Nginx进行脚本编程,很多第三方模块跟openresty更加兼容,比如
https://github.com/openresty/lua-nginx-module, https://github.com/openresty/lua-resty-redis这些都是openresty的第三方模块,不过兼容nginx罢了。另外安装openresty有自己的repo仓库,安装其第三方模块也很简单方便;
该方案在 360 ,新浪等公司有较为成熟的运用;
具体安装配置方案已经在测试环境测试成功,具体如下诉 OpenResty方案测试
三.上线前准备:
四.部署方案:
可能存在的问题:跨机房严重依赖内网专线,内网专线属于机房间内部线路,发生故障后维修时间难以保证,以天级别计算,存在重大隐患。
针对上述问题,我们的解决方案是,当流量进入M5之后,在openResty根据小量策略做判断,命中策略之后直接通过新服务域名转发到新推荐服务,未命中策略则还走之前的老的服务。
经过跟运维的沟通,通过域名转发请求的时候 会有限使用专线,如果专线有故障则会走公网;公网跟专线之间的切换由运维同事完成。
五. 待完成事项:
六. OpenResty方案测试
评论暂时关闭