灰度发布--根据客户端的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
用一个例子来演示会更加清晰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2018-04-27 做事需要愿景,产品都是人思想的投射 - 深度思考的方法 + 问题上报、处理流程是否合理
2018-04-27 sed 替换有单引号的行