蓝绿发布
蓝绿部署,以颜色命名,简单的理解就是,线上有两套集群环境,在架构图中,一套标记成蓝色,称为蓝色集群BLUE;一套标记为绿色,称为绿色集群GREEN。通过将流量引入两个集群,完成系统升级切换。
优点
- 蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。
- 两套系统没有耦合的时候才能百分百保证不干扰
缺点
- 成本太高,随着实例服务的增长要部署相同的实例
灰度发布(金丝雀发布)
API网关支持灰度
- 使用API网关的APP进行灰度:获得授权的APP事实上代表身份不同的API调用者,这种情况下当有两个以上授权APP的时候,可以根据调用者APP将请求转发到不同后端。假设,某个API授权给了多个应用,在API后端服务有升级的情况下,为了控制升级对线上可能存在的未知影响,我们可以参照本文3.1 给出的后端路由插件配置,将其中两个应用的请求路由到新版后端服务。
- 基于JWT的灰度: 当API绑定JWT插件时,API网关可以从JWT中解析没有加密过的用户身份相关的claim,比如用户userId, 支持按照从 Token 中解析得到的参数路由到不同后端,从而实现灰度发布。比如用户可以参考本文 3.2 节给出的插件配置,通过限制userId字段的尾数,实现20%的用户请求到新版本服务。
- 基于HTTP Reuqest 内的用户参数进行灰度,当Query | Form | Header 中存在和用户身份直接相关的参数时,我们就可以直接利用该请求参数转发请求到不同后端。比如针对一部分使用老版本客户端的用户返回特定的提示信息,提示用户升级客户端
- 针对特定访问IP段进行灰度:可以利用不同的请求源IP地址段进行后端路由,从而实现灰度发布。比如有的时候我们为了更高效的测试,需要在内测环境和生产环境使用完全相同的前端请求代码,可以参考3.4节的说明实现不同环境访问不同后端。
好处:
- 提前获得目标用户的使用反馈;
- 根据反馈结果,做到查漏补缺;
- 发现重大问题,可回滚“旧版本”;
- 补充完善产品不足;
- 快速验证产品的 idea。