企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)

部署是将服务的某个版本投入生产环境的过程。部署的总体目标是:对系统用户产生最小影响的情况下,把服务的升级版本投放到生产环境中。

服务变更的主要原因

  • 1、修复错误
  • 2、提高服务的质量
  • 3、增加新的功能

服务变更需要注意哪些(或者说如何产生最小影响)?

SRE 经验告诉我们,大概 70% 的生产事故由某种部署的变更而触发。变更管理的最佳实践可使用自动化来完成以下几点:

  • 1、部署尽可能在用户少的时候。
  • 2、每次部署前备份原始数据。
  • 3、采用渐进式发布机制。
  • 4、迅速而准确地检测到问题的发生。
  • 5、当出现问题时,安全迅速地回退改动。

常用部署方式存在以下几种:

  • 蓝绿部署
  • 滚动部署
  • 灰度部署/金丝雀部署

蓝绿部署

正常将项目分为两组, 蓝组和绿组, 正常运转的情况下每组承载 50% 的流量. 当准备发布服务时, 将蓝组流量设置为0%, 将绿组空闲出来, 将服务部署到绿组的机器, 然后利用SLB将流量切换到绿组的机器, 让绿组来运行业务, 没问题的话流量全部导向绿组, 把蓝组也进行服务更新

优点

  • 更新过程无需停机,风险较少
  • 回滚方便,只需要更改路由或者切换DNS服务器,效率较高

缺点

  • 需要部署两套机器,费用开销大
  • 在非隔离的机器(Docker、VM)上操作时,可能会导致蓝绿环境被摧毁风险
  • 负载均衡器/反向代理/路由/DNS处理不当,将导致流量没有切换过来情况出现

滚动部署

生产中的N台机器都为版本A的机器, 部署取出一个或者多个服务器停止服务,执行更新版本B,更新后重新将其投入使用,继续不断更新其他机器,直到集群中所有的实例都更新成版本B。这个其实就是K8S里面的更新策略

流程

  • 1、负载均衡或者路由移除一台或者多台实例(正常监控也需要移除)
  • 2、移除后的实例开始更新
  • 3、上线测试后无异常开始接入负载均衡器或者路由
  • 4、新增实例监控
  • 5、继续上线后一批实例,直到集群中所有的实例都更新

优点

  • 更新过程体验影响少,风险较少
  • 费用对比蓝绿花费开销较少,无需额外新增机器

缺点

  • 上线/回滚完成时间相对较慢
  • 需要监控和负载均衡器的移除和接入能力

金丝雀部署(灰度发布)

以前旷工开矿下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。

金丝雀发布一般先发布一台, 或者小比例, 例如2%的服务器进行流量验证,国内也称为金丝雀测试, 流量测试通过, 慢慢将剩余机器也进行发布, 可以达到一个平滑过渡效果.

灰度发布可以保证整体系统的稳定性, 在初始灰度的时候就可以发现 调整以保证其影响度

流程

  • 首先部署少量服务器密切
  • 观察是否因为版本产生预期结果
  • 当结果满意时候再全量部署

优点

  • 用户体验影响小,金丝雀发布过程出现问题只影响少量用户

缺点

  • 发布自动化程度不够,发布期间可引发服务中断
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
Kubernetes 网络协议 前端开发
k8s更新策略-系列文章第一篇:蓝绿发布
k8s更新策略-系列文章第一篇:蓝绿发布
|
Kubernetes 监控 测试技术
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
|
测试技术 微服务 负载均衡
微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。
2873 0
|
3月前
|
Kubernetes 监控 测试技术
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
|
3月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
391 0
|
3月前
|
Kubernetes 监控 测试技术
在K8S中,如何实现上线发布流程(灰度发布)?
在K8S中,如何实现上线发布流程(灰度发布)?
|
6月前
|
应用服务中间件 测试技术 nginx
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介
|
6月前
|
运维 负载均衡 Kubernetes
一文搞懂蓝绿发布、灰度发布和滚动发布
一文搞懂蓝绿发布、灰度发布和滚动发布
|
6月前
|
Java 关系型数据库 MySQL
部署和发布
部署和发布
39 0
|
Kubernetes 容器
K8s 金丝雀发布
K8s 金丝雀发布
108 0