技术栈:
注册中心:eureka
服务之间调用:feign
前端网关:nginx
灰度发布(Canary Release)是一种逐步发布新版本的方式,通过控制请求中传递的特定参数或请求头来将流量按比例导入到新版本的应用中,逐步扩大流量直到所有用户都能接触到新版本。基于请求头的参数传递是实现这种控制的常见方法。
思路:
- 从灰度域名网站访问的客户端请求发送时,附带一个特定的请求头(如
jc-lane,不区分大小写)来标记灰度发布的用户组。 - 发布灰度服务时,可以修改服务注册到eureka时的元数据MetaData(nacos可以注册到不同分组、添加tag、通过命名空间区分等),通过修改服务不同分区(例如灰度发布时,修改其分区zone为canaryZone,正常服务为defaultZone),调用时,根据请求头判断调用不同分区的服务实例instance。
- 通过调整请求头中的标记,可以控制不同用户群体使用不同版本。
实现步骤:
1. 请求头传递参数
假设你将请求头中的 jc-lane 用作灰度发布的标识符,需要保证服务之间进行调用时,不会丢失该染色标记请求头,并按照某种规则决定是否路由到新版本。
2. 后端服务逻辑
后端服务进行feign负载均衡时,根据请求头的值来判断返回哪个版本的服务实例。
3. 自动化与监控
- 在灰度发布过程中,可以通过监控系统(如 Prometheus 或 ELK Stack)来实时跟踪不同版本的性能表现。
- 如果新版本在某些情况下表现不佳,不会影响到正常用户的访问,调整修改后重新发布灰度即可
小结
基于请求头传递参数的灰度发布方式能够灵活地控制流量的分配,逐步验证新版本的稳定性。通过控制请求头中的标记或流量策略,可以实现对不同版本的分流,同时减少全量发布带来的风险。