系统灰度上线 AB测试

上线新版本代码一般都是通过灰度系统,灰度系统可以把流量划分成多份,一份走新版本代码,一份走老版本代码。
灰度系统支持设置流量的比例,比如可以把走新版本代码的流量设置为 5%,没啥问题再放到 10%,50%,最后放到 100% 全量。
灰度系统不止这一个用途,比如产品不确定某些改动是不是有效的,就要做 AB 实验,也就是要把流量分成两份,一份走 A 版本代码,一份走 B 版本代码。

基本演示:

  1. 使用nest示例创建两个项目,端口分别为3000、30001

    • git clone https://github.com/nestjs/typescript-starter.git project
    • cd project/ 并修改app.service.ts中为:Hello World 1!
    • npm install
    • npm run start
    • cd .. && cp -r project project2 同上,修改project2中的端口为3001并修改app.service.ts中为:Hello World 2!
  1. 此时可正常访问localhost:3000及localhost:3001
  2. 设置nginx负载均衡,依据cookie中version对应版本分别访问不同服务。即:默认或version=1.0访问3000,version=2.0访问3001
upstream version1.0_server {
    server localhost:3000;
}
 
upstream version2.0_server {
    server localhost:3001;
}

upstream default {
    server localhost:3000;
}

server
{
    ...
    
    set $group "default";
    if ($http_cookie ~* "version=1.0"){
        set $group version1.0_server;
    }
    
    if ($http_cookie ~* "version=2.0"){
        set $group version2.0_server;
    }
    
    location ^~ / {
        #rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://$group;
    }

    ...
}
  1. 流量渲染:如随机数在0到0.2之间就设置version=2.0的cookie,否则设置version=1.0。

使用cookie方式可以在程序中灵活定义任意灰度规则,如根据IP段或者归属地区分用户。同样使用这种方式还可以分流用户,把不同用户路由到不同地域的机房。

Tags: nginx

添加新评论