服务架构调整1——通过nginx灰度发布应用

3 篇文章 0 订阅

前言

       随着公司业务规模扩大,传统的架构已无法支撑业务量阶梯式的增长,应用发布也必须迎来调整。之前的发布方式,需要通过脚本切换nginx,然后通过ansible进行批量发布;由于业务的特殊性质,原有方案一旦上线代码出现bug或者人为出现操作失误,将导致大面积应用无法提供服务,为了避免故障发生造成毁灭性的后果,决定分布进行架构调整。

灰度发布方式选择

       通过nginx进行灰度发布大概有如下三种方式,三种方式各有优缺点:

       1、Nginx+Lua脚本实现(可定制化高,需要编程基础,实现难度较大)

       2、通过判断cookie值实现(可定制cookie值,精准定位到指定用户,配置简单)

       3、通过判断源IP实现(配置简单,但是大多情况ip可变,无法准确定位)

       通过商讨,决定使用判断cookie值实现灰度发布,可以快速达到我们的需求

架构图

       现有Nginx集群变更成公共Nginx集群,增加区域Nginx集群若干及主入口Nginx集群,用户通过SLB访问进入主入口Nginx集群,再通过指定的cookie值转发到区域集群,没有cookie标记的统一转发到公共集群。主入口Nginx集群仅做转发功能,不额外配置其他服务,减少Nginx配置文件的改动。

配置过程

操作系统:CentOS-7.5

Nginx版本:openresty-1.11.2

主入口nginx.conf配置如下,主要增加cookie判断:

http {
	upstream common {
		server 10.0.0.1 weight=10;
		server 10.0.0.2 weight=10;
	}
	
	upstream area1 {
		server 10.10.0.1 weight=10;
		server 10.10.0.2 weight=10;
	}
	
	upstream area2 {
		server 10.20.0.1 weight=10;
		server 10.20.0.2 weight=10;
	}
	
	server {
		listen 80;
		server_name www.test.com;
		
		set $server "common";
		if ($http_cookie ~* "area_code=A01"){
			set $server area1;
		}
		if ($http_cookie ~* "area_code=A02"){
			set $server area2;
		}
		
		location / {
			proxy_pass  http://$server;
		}
	}
}

公共及区域Nginx配置,只需配置转发到后端服务器即可。

测试

       用户第一次访问时,因为没有带cookie,默认访问到公共Nginx,服务器向用户端存放指定区域cookie;第二次访问时,主入口Nginx通过判断,用户cookie中的area_code,将用户转向指定区域Nginx。

结束语

       通过以上配置,可以灰度发布某个小流量区域的版本,通过测试后再按百分比进行逐步发布到全服,以此减小发布失败对项目造成的影响。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值