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方案测试

      

 

相关内容

    暂无相关文章