如何利用cookie实现灰度发布?

生产环境

生产环境是直接面对用户的环境。

灰度概念

灰度是介于在内网环境和线上环境中间的一层服务层。灰度属于生产环境中的测试环境。可以让部分用户,去使用所更新代码的所提供的服务,去进行更加有安全性保证的测试。

解决痛点

1.内网无法测试环境

这里举一个比较典型的例子:
1.微信登陆需要安全域名认证。

2.内网无法完全保证环境与线上一致

灰度除代码外,其他环境完全一致。
在极大的可能性下,排除对线上用户服务造成影响。

代码上线流程

一般代码会经过

内网测试 -> 灰度测试 -> 上线生产

在经过内网和灰度的双重保证,可以超大概率保证生产环境不会产生较为严重的错误。而且能够使灰度使用的域名,数据源等保持一致。

以 NGINX 为例

NGINX 是一个比较著名的反响代理服务器,可以根据相关条件对 http 请求进行转发。这里要做的就是,准备两份代码,一份生产目录,一份灰度目录。检测COOKIE标记,如果有我们所做的灰度标记,就把 http 请求转发到灰度代码的目录。

当然

在处理程序当中要有通过GET方法设置 cookie 灰度标记位的相关处理。

就这么简单

下面开始做
nginx.conf
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操作就可以进入灰度了!

你可能感兴趣的:(如何利用cookie实现灰度发布?)