常见的代码部署方式

常见的代码部署方式


蓝绿发布

关键点:需要有两套独立的环境,消耗服务器资源

概念

  • 蓝绿部署指的是不停止老版本代码(不影响上一个版本访问),而是在另外一套环境部署新版本然后进行测试,测试通过后将用户流量切到新版本
  • 蓝绿发布是一种用于升级与更新的发布策略,部署的最小维度是容器,而发布的最小维度是应用
  • 目的是安全稳定地发布新版本应用,并在必要时回滚
  • 其特点为业务无中断,升级风险相对较小
  • 注意:发布全程都只有一套正式环境在线

=

具体过程

  1. 当前版本业务正常访问(v1)
  2. 在另外一套环境部署新代码(v2),代码可能是增加了功能或者是修复了某些 bug
  3. 测试通过之后将用户请求流量切到新版本环境
  4. 观察一段时间,如有异常直接切换旧版本
  5. 若版本稳定无问题,表示本次蓝绿发布成功完成
  6. 下次升级,将旧版本(v1)所在环境升级到新版本(V3),继续进行蓝绿发布

=

适用场景

  • 不停止老版本,额外部署一套新版本
  • 对于增量升级有比较好的支持

灰度发布

关键点:在现有环境选择部分服务器升级并测试效果

概念

  • 金丝雀发布也叫灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式
  • 灰度发布是增量发布的一种类型,灰度发布是在原有版本可用的情况下,同时部署一个新版本应用作为“金丝雀”(小白鼠),测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题
  • 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

=

具体过程

  1. 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件
  2. 从负载均衡列表中移除掉“金丝雀”服务器
  3. 升级“金丝雀”应用(排掉原有流量并进行部署)
  4. 对应用进行自动化测试
  5. 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)
  6. 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器(否则就回滚)

=

适用场景

  • 不停止老版本,额外做一套新版本,不同版本应用共存
  • 灰度发布中,常常按照用户设置路由权重,例如 90%的用户维持使用老版本,10%的用户尝鲜新版本
  • 经常与 A/B 测试一起使用,用于测试选择多种方案

滚动发布

概念

  • 是在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑
  • 取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用,周而复始,直到集群中所有的实例都更新成新版本
# 滚动发布与灰度本质区别
1.灰度强调是部分节点给指定用户体验没问题后再扩大发布   # 先测试再升级,偏重测试
2.滚动强调的是各个服务器的自动更新                   # 主要是为了完成升级

适用场景

  • K8s环境
  • 自动化程度很高的环境

A/B 测试

关键点:两套环境同时上线作比较

概念

  • A/B 测试是用来测试应用功能表现的方法。
  • 两套环境同时上线提供给用户,用来比较差异(例如可用性、受欢迎程度、可见性等等)

你可能感兴趣的