灰度发布
概述
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
实现
- nginx: ./nginx -s reload 过程不会对业务产生影响,阅读:https://www.cnblogs.com/wsjhk/p/11430613.html
- zuul/gateway: nginx 内, 后端接口 proxy 使用 upstream, 做到 gateway 的灵活切换.
- application:
- 服务请求过程中,服务消费方(C1,C2)附带自身实例信息在 header 中传递给服务生产方
- 服务生产方(S1, S2)缓存调用来源信息.
- 服务生产方需要进行发布, 向服务方S1发起发布请求
- S1 依据,调用来源信息, 发布下线通知(C1,C2 将收到通知)
- C1, C2 接收通知,并把S1 服务标记到 loadBanacer, 不再主动调用 S1
- S1 继续处理残余请求
- 统计 S1 残余请求数,直到请求数为0
- 向S1 发布下线命令, 更新版本,重新上线
- S1 广播重新上线通知, C1, C2 恢复 loadBanacer 策略
- S1 完成发布, 以同样的方式发布 S2