如何利用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操作就可以进入灰度了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容