Openresty+Lua+Redis
Http协议的灰度功能主要基于ngx_http_lua_module模块实现
- 通过IP或者IP段验证客户端IP是否灰度白名单;
- 通过获取header头中的userid,验证是否灰度白名单;
- 通过获取header头中的device-id,验证是否灰度白名单。
Tcp协议的灰度功能主要基于ngx_stream_lua_module模块实现
- 通过IP或者IP段验证客户端IP是否灰度白名单;
后台管理系统实现如下功能: - 支持对设备deviceId灰度白名单新增、删除和查询功能;
- 支持对客户端IP灰度白名单新增、删除和查询功能;
- 支持对用户userId灰度白名单新增、删除和查询功能,同时可以根据配置灰度策略,将满足条件的用户自动导入灰度白名单中。
1、当用户请求到达前端web(代理)服务器Openresty,内嵌的lua模块解析Nginx配置文件中的lua脚本代码;
2、Lua获取客户端IP地址、userId和设备ID,去查询Redis中是否有该键值,如果有则转发到灰度环境,否则转发到生产环境中;
3、后端管理系统提供可视化界面,可以管理redis中的白名单信息,包括:客户端IP白名单、userId白名单、设备Id白名单。