前言
应用程序的更新发布,如何降低对用户的影响面,人们研究出了几种发布策略。
更新历史
- 20200720 - 初稿 - 左程立
- 原文地址 - https://blog.zuolinux.com/2020/07/20/how-to-deployment.html
蓝绿部署
流程
准备 A/B 两个集群,运行相同的程序。
在项目升级时,首先把 A 集群从负载均衡中移除,进行新版本的部署。
B 集群仍提供服务。
A 集群升级完成后加入负载均衡,B 集群从负载均衡中移除。
优点
平滑发布,不会因发布导致服务中断,策略简单,回滚速度快,用户无感知
缺点
消耗资源,硬件成本高,需要两倍以上服务器资源。
滚动部署
流程
先启动一台新服务器运行新版本,加入生产环境。
然后停止一台老版本服务器,将其更新为新版本,然后加入生产环境。
依此类推,直到集群中全部服务器升级为新版本。
优点
解决了蓝绿发布成本高的问题。如果业务需要 10 台服务器,那么升级中一共有 11 台服务器即可。
缺点
部署周期长,发布策略复杂。
如果此时用户访问出现问题,无法快速确定是新版本导致还是旧版本 BUG。即无法进行精确流量控制。
金丝雀部署、也叫灰度部署
流程
在具备精确流量控制的情况下,将部分服务器升级为新版本,然后将指定来源 IP 的小部分流量导向到这部分服务器。
确定这部分用户没问题后,将全部服务器升级为新版本。
K8S 中可以使用两套 Deployment,其中一套 Deployment 运行新版本 Pod,通过 ingress 映射出来后,通过 DNS 将指定来源地区的解析,或者公司内部用户的解析,导向到该 ingress。
优点
由于我们控制了指定来源的 IP 访问新版本,所以出现问题后,我们能够知道受影响用户访问的是新版本还是旧版本,从而避免了滚动发布的缺点。
缺点
依然无法避免新版本出现问题后对用户的影响,但我们已经将其控制在可控范围之内。
结束语
金丝雀部署,即灰度发布,是相对比较完美的应用程序发布解决方案。
联系我
微信公众号:zuolinux_com