常见的代码部署方式
蓝绿发布
关键点:需要有两套独立的环境,消耗服务器资源
概念
- 蓝绿部署指的是不停止老版本代码(不影响上一个版本访问),而是在另外一套环境部署新版本然后进行测试,测试通过后将用户流量切到新版本
- 蓝绿发布是一种用于升级与更新的发布策略,部署的最小维度是容器,而发布的最小维度是应用
- 目的是安全稳定地发布新版本应用,并在必要时回滚
- 其特点为业务无中断,升级风险相对较小
- 注意:发布全程都只有一套正式环境在线
=
具体过程
- 当前版本业务正常访问(v1)
- 在另外一套环境部署新代码(v2),代码可能是增加了功能或者是修复了某些 bug
- 测试通过之后将用户请求流量切到新版本环境
- 观察一段时间,如有异常直接切换旧版本
- 若版本稳定无问题,表示本次蓝绿发布成功完成
- 下次升级,将旧版本(v1)所在环境升级到新版本(V3),继续进行蓝绿发布
=
适用场景
- 不停止老版本,额外部署一套新版本
- 对于增量升级有比较好的支持
灰度发布
关键点:在现有环境选择部分服务器升级并测试效果
概念
- 金丝雀发布也叫灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式
- 灰度发布是增量发布的一种类型,灰度发布是在原有版本可用的情况下,同时部署一个新版本应用作为“金丝雀”(小白鼠),测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题
- 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
=
具体过程
- 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件
- 从负载均衡列表中移除掉“金丝雀”服务器
- 升级“金丝雀”应用(排掉原有流量并进行部署)
- 对应用进行自动化测试
- 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)
- 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器(否则就回滚)
=
适用场景
- 不停止老版本,额外做一套新版本,不同版本应用共存
- 灰度发布中,常常按照用户设置路由权重,例如 90%的用户维持使用老版本,10%的用户尝鲜新版本
- 经常与 A/B 测试一起使用,用于测试选择多种方案
滚动发布
概念
- 是在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑
- 取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用,周而复始,直到集群中所有的实例都更新成新版本
# 滚动发布与灰度本质区别
1.灰度强调是部分节点给指定用户体验没问题后再扩大发布 # 先测试再升级,偏重测试
2.滚动强调的是各个服务器的自动更新 # 主要是为了完成升级
适用场景
- K8s环境
- 自动化程度很高的环境
A/B 测试
关键点:两套环境同时上线作比较
概念
- A/B 测试是用来测试应用功能表现的方法。
- 两套环境同时上线提供给用户,用来比较差异(例如可用性、受欢迎程度、可见性等等)