zoukankan      html  css  js  c++  java
  • 灰度发布--根据客户端的TOKEN来判断是否进灰度

    1.拓扑图

    2.原理:

    浏览器发送的报文头部带TOKEN,在openresty会被拼凑成:TOKEN_MyToken。

    在redis中每个用户的TOKEN_MyToken对应一个Id.

     lua脚本拿Id跟redis的IdStart和IdStop对比,判断是否进灰度

    3.nginx.conf的配置

    [root@VM_0_7_centos conf]# cat nginx.conf
    worker_processes  1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    [root@VM_0_7_centos conf]# cat nginx.conf|egrep -v "^$"
    worker_processes  1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    # 通过 redis 获取灰度用户区间,执行灰度操作
    # 灰度测试完毕后,所有用户切换到灰度服务器,更新正式服务器
    # 清空灰度服务器列表
    http {
        # 灰度服务器
        upstream grayscale.server{
            server 10.0.0.7:44444;
        }
        # 正式服务器
        upstream prod.server{
            server 10.0.0.7:55555;
        }
        server {
            listen 22222;
            location /test {
                expires 5s;
                # 默认为生产环境
                   set $target 'prod.server';
                    default_type text/html;
                    access_by_lua_file /Users/wangjie/data/nginx/lua/grayscale.lua;
    #            proxy_pass $scheme://$target$request_uri;
                proxy_pass $scheme://$target$request_uri;
            }
        }
    }

    4.lua脚本

    [root@VM_0_7_centos conf]# cat /Users/wangjie/data/nginx/lua/grayscale.lua|egrep -v "^$"
    local cjson = require('cjson')
    local redis = require('resty.redis')
    local red = redis:new()
    red:connect("10.0.0.205",6379)
    red:auth("test")
    
    local IdStart = red:get("idStart")
    local IdEnd = red:get("idEnd")
    local UserToken = ngx.req.get_headers()["TOKEN"]
    local UserId = red:get("TOKEN_"..UserToken)
    -- ngx.say(UserId)
    if (UserToken ~= nil)
    then
        if ((UserId > IdStart) and (UserId < IdEnd))
        then
            ngx.var.target = "grayscale.server"
        end
    else
            ngx.var.target = "prod.server"
    end

    5.redis的设置  -- 通过调整idEnd的值来决定用户是否进灰度

     6.浏览器的TOKEN

     参考:https://blog.csdn.net/weixin_42085428/article/details/104898500

  • 相关阅读:
    python3 字典的常用方法
    python3 列表的常用方法
    【自动化测试之路】目录
    《Python编程从入门到实践》练习题
    【python3】第20章设置项目“学习笔记”的样式
    【python3】第19章用户账户
    【python3】第18章Django入门
    【python3】第15章生成数据
    【python3】第12~14章外星人入侵
    【python3】第10章文件
  • 原文地址:https://www.cnblogs.com/hixiaowei/p/12783738.html
Copyright © 2011-2022 走看看