如何利用cookie实现灰度发布?
生产环境
生产环境是直接面对用户的环境。
灰度概念
灰度是介于在内网环境和线上环境中间的一层服务层。灰度属于生产环境中的测试环境。可以让部分用户,去使用所更新代码的所提供的服务,去进行更加有安全性保证的测试。
解决痛点
1.内网无法测试环境
这里举一个比较典型的例子:
1.微信登陆需要安全域名认证。
2.内网无法完全保证环境与线上一致
灰度除代码外,其他环境完全一致。
在极大的可能性下,排除对线上用户服务造成影响。
代码上线流程
一般代码会经过
内网测试 -> 灰度测试 -> 上线生产
在经过内网和灰度的双重保证,可以超大概率保证生产环境不会产生较为严重的错误。而且能够使灰度使用的域名,数据源等保持一致。
以 NGINX 为例
NGINX 是一个比较著名的反响代理服务器,可以根据相关条件对 http 请求进行转发。这里要做的就是,准备两份代码,一份生产目录,一份灰度目录。检测COOKIE标记,如果有我们所做的灰度标记,就把 http 请求转发到灰度代码的目录。
当然
在处理程序当中要有通过GET方法设置 cookie 灰度标记位的相关处理。
就这么简单
下面开始做
server {
listen 80;
#首先设置生产代码的目录
set $root_dir "/product_code_dir";
if ($http_cookie ~* "IS\_GRAY=1")
{
#这里以IS_GRAY标记为例,如果检测到的话,就设置为灰度代码目录
set $root_dir "/gray_code_dir";
}
root $root_dir;
index index.html index.htm index.php;
# 域名配置
server_name www.domain-name.com;
#尝试寻找文件配置
location / {
try_files $uri $uri/ =404;
}
#这里是NGINX转发给PHP-FPM的配置,可以忽视
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
进入灰度
只要 GET 请求带有IS_GRAY=1,经过代码的set_cookie操作就可以进入灰度了!
http://www.jianshu.com/p/9736cb8e2129