1. 基本思路

  • 配置两个版本:将旧版本和新版本的应用都部署在不同的服务器或端口上。
  • 控制流量分配:使用 Nginx 的负载均衡功能,通过配置控制流量的分配比例,以实现灰度发布。

2. 配置示例

假设你有两个版本的应用,旧版本运行在 192.168.1.100:80,新版本运行在 192.168.1.101:80

1. 基础配置

http {
    upstream old_version {
        server 192.168.1.100:80;
    }

    upstream new_version {
        server 192.168.1.101:80;
    }

    server {
        listen 80;

        location / {
            # 控制流量分配
            # 例如,80%流量到旧版本,20%流量到新版本
            set $backend old_version;
            if ( $request_uri ~* "/new/") {
                set $backend new_version;
            }

            proxy_pass http://$backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

2. 动态流量调整

可以使用 split_clients 模块实现更灵活的流量分配:

http {
    upstream old_version {
        server 192.168.1.100:80;
    }

    upstream new_version {
        server 192.168.1.101:80;
    }

    server {
        listen 80;

        split_clients "${remote_addr}AAA" $backend {
            80% old_version;
            20% new_version;
        }

        location / {
            proxy_pass http://$backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

3. ⚠️

  • 健康检查:确保新版本在发布之前已通过充分的健康检查。
  • 监控:实时监控用户反馈和应用表现,以便快速回滚或调整发布策略。
  • 用户体验:灰度发布期间,尽量减少对用户的影响,避免用户体验上的显著差异。

逐步将流量从旧版本迁移到新版本,实现平滑的灰度发布。

348次浏览 1人点赞
没有回复
欢迎来到虚拟咖啡社区,这是一个专为程序员和技术爱好者设计的多元化在线社区。在这里,我们致力于打造一个充满活力和支持性的环境,让每一位成员都能在这里找到归属感和成就感
ethhacker 的推介