【最佳实践】利用OpenNJet实现灰度发布
在应用的新版本测试发布过程中,经常需要先使用部分选定的账号进行验证,待验证完成后,再逐步将业务流量切换到新版本,直至所有流量均切换到新的集群。
测试账号的检测可以使用多种方式,如通过Header中字段,Cookie中的值,或者URL 中的参数等方式。
在之后章节的配置及场景中,将使用HTTP Header中的staffid 字段做为测试账号的判断依据,7xxxx 的账号将被认定为测试工号。
初始静态配置
初始配置中,将设置两组upstream: backendA , backendB , 并通过split_clients 指令设置使用header中的staffid值做为流量配比依据,并设置100%的流量将指向后端 backendA。
split_clients $http_staffid $backend { 100% backendA; * backendB; }
完整配置如下:
njet.conf worker_processes auto; cluster_name app1; node_name node1; error_log logs/error.log info; load_module modules/njt_http_split_clients_2_module.so; load_module modules/njt_http_dyn_bwlist_module.so; load_module modules/njt_http_lua_module.so; load_module modules/njt_dyn_ssl_module.so; load_module modules/njt_agent_dynlog_module.so; load_module modules/njt_http_location_module.so; helper ctrl modules/njt_helper_ctrl_module.so njet_ctrl.conf; helper broker modules/njt_helper_broker_module.so ; events { worker_connections 1024; } http { split_clients $http_staffid $backend { 100% backendA; * backendB; } upstream backendA { server 192.168.1.4:18081; } upstream backendB { server 192.168.2.4:18081; } server { listen 18080 ssl; ssl_certificate cert/server.crt; ssl_certificate_key cert/server.key; server_name www.test.com; location / { proxy_pass http://${backend}; } } } njet_ctrl.conf load_module modules/njt_http_sendmsg_module.so; load_module modules/njt_ctrl_config_api_module.so; load_module modules/njt_helper_health_check_module.so; load_module modules/njt_http_upstream_api_module.so; load_module modules/njt_http_location_api_module.so; load_module modules/njt_doc_module.so; load_module modules/njt_http_vtsd_module.so; error_log logs/error_ctrl.log error; events { worker_connections 1024; } http { include mime.types; access_log off; server { listen 8081; location / { return 200 "njet control panel\n"; } location /hc { health_check_api; } location /api { api write=on; } location /kv { dyn_sendmsg_kv; } location /config { config_api; } location /doc { doc_api; } location /dyn_loc { dyn_location_api; } location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }
灰度发布步骤
动态添加location
当新版本已经部署到backendB 集群后, 通过动态location提供的API 添加一个条件location, location 中设置所有的 7xxxx 测试工号将访问到 backendB。Njet 提供的条件表达式中,可以使用$http_* 获取到请求header 中的值, $http_staffid ~* "7.*" 表达式将匹配所有header中staffid 为7xxxx 的请求。
使用测试工号测试
通过上一个步骤添加条件location 后, 所有非 7xxxx 的工号将继续访问到集群 backendA, 所有 7xxxx 做为测试工号,将访问到集群backendB。
删除表达式location
当测试完成后,可以使用动态API 删除条件location。
删除条件location后,所有的流量均指向backendA, 包括 7xxxx 的测试工号。
逐步调整分流比例直至100%
使用模块提供的动态配置API, 逐步调整分流比例。
如调整到 50:50 的比例时:
最后调整到 0:100 的比例, 所有的流量将指向 backendB
这时,应用的新版本已经完成部署和切换 (A => B ), 当下一个版本发布时,可以使用相同的步骤,完成 (B => A) 的切换。
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,随着 NGINX 版本迭代,吸收上游 NGINX 的更新,已经同步更新到 NGINX1.23.1 版本,OpenNJet 具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。
作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
自动化接口回归测试神器 AREX 使用初体验
AREX 是一款开源的基于流量录制回放技术的自动化回归测试平台,目前官方文档仅介绍了如何在本地及私有云部署,本篇文章分享如何 AWS 环境下快速搭建 AREX 服务,并使用 AWS 的 DocumentDB 作为数据库替换官方默认的 MongoDB,使用 ElastiCache 替换默认的 Redis。 安装 AREX 使用前需要注册 AWS 账号并对相应概念有一定了解,详细可参考 AWS 官方文档。 步骤一:准备一台 EC2 用于部署 AREX 操作系统选择 Amazon Linux 2 AMI。(Amazon Linux 2023 AMI 有部分应用安装不上,所以这里选择使用稳定的低版本操作系统) 如果只是进行试用,建议最小配置选择 t3.large(2C8G)的机器。 密钥对名称可以按照自己的需求创建并使用(方便快速链接到自己的 EC2)。后续创建 DocumentDB 的时候也可以共用该秘钥。 存储配置默认 8G 即可。 步骤二:创建 Amazon DocumentDB 集群 注意:在使用 DocumentDB 时,需要将其部署在与之关联的 EC2 实例所在的同一个虚拟私有云(...
- 下一篇
MySQL Schema 比较同步工具汇总(2023 版)
数据库 schema 比较工具使你能够识别关系数据库中对象结构的差异,并在多个数据库中同步你的特定对象。它通常用于以下情况: 将数据库变更从私有分支合并到团队的主分支 在同构数据库中保持 schema 一致性 构建新的数据库测试环境 根据应用需求将数据库 schema 变更部署到生产环境 在服务中断时排除数据库问题 根据 DB-Engines 排名报告,MySQL 是排名第一的开源数据库。在这篇文章中,我们将分析 MySQL 的 5 个 schema 比较工具。 MySQL Workbench MySQL Workbench 是 Oracle 公司用于 MySQL 开发的官方图形用户界面。它包括 schema 比较和同步工具。它使你能够比较和同步模型、数据库和 SQL 文件之间的 schema。这三种类型可以是目标、源或两者。下图显示源为模型,目标为数据库。 此外,MySQL Workbench允许 您创建一个报告,显示比较对象之间的目录差异,如下图所示。 它可在 Windows、Linux 和 Mac OS X 上使用。 dbForge Schema Compare for MySQ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址