灰度(金丝雀)发布、蓝绿部署、滚动发布

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 灰度(金丝雀)发布、蓝绿部署、滚动发布

概念

一、灰度(金丝雀)发布

定义

灰度发布又叫金丝雀发布,只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。 (金丝雀发布由来。以前,旷工开矿,在下矿洞前需要检查下方是否有毒气,矿工们先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来。)

实现

原理流量切换与灰度策略.实现方式参考以下 - 基于openresty+nginx实现前端灰度 - 基于apollo+ribbon实现后台灰度(关联知识点eureka元数据metadata-map)

二、蓝绿部署

定义

把环境分为AB组,首先把A组从负载均衡中摘除,把B组加入负载均衡中提供服务。类型A/B Test出发点不一样。

优缺点

  • 发布简单
  • 硬件数量翻倍
三、滚动发布

定义

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式。

总结
  • 蓝绿发布:操作简单,硬件数量翻倍,以硬件换取操作。SLB进行切换几乎不停机,需考虑新旧环境切换对业务的影响。
  • 灰度发布:硬件数量在原数量+1,此方式实现不停机发布,并且通过分流实现新旧并行,出问题后也可区分出新旧环境。
  • 滚动发布:硬件数量在原数量+1,此方式实现不停机发布,并没有灰度发布明确的分流,出问题后不能快速区分出新旧环境,滚动发布主要体现出自动的发布策略依赖自动发布工具。如k8s就是现成的支持。滚动发布对于达到一定业务体量的公司,考虑到用户体验对业务的关键性,则需要投入研发资源开发支持滚动式发布的工具和配套的智能 LB,实现自动化和零停机的发布。
  • 滚动与灰度:*滚动式发布一般和金丝雀发布配合,先发一台金丝雀去验证流量,再按批次增量发布。两者主要区别在于灰度强调是部分节点给指定用户体验没问题后再扩大发布,而滚动强调的是自动节点的更换,相对有一定风险两都结合即减少人工工作量风险也降低。*

实际实现

Kubernetes 项目中一个重要的设计思想:控制器模式Deployment,即Pod的“水平扩展 / 收缩”(horizontal scaling out/in)。这个功能,是从 PaaS 时代开始,一个平台级项目就必须具备的编排能力。

举个例子,如果你更新了 Deployment 的 Pod 模板(比如,修改了容器的镜像),那Deployment 就需要遵循一种叫作“滚动更新”(rolling update)的方式,来升级现有的容器。而这个能力的实现,依赖的是 Kubernetes 项目中的一个非常重要的概念(API 对象):ReplicaSet。

ReplicaSet 的结构

更重要的是,Deployment 控制器实际操纵的,正是这样的 ReplicaSet 对象,而不是 Pod 对象

Deployment,与 ReplicaSet,以及 Pod 的关系

通过这张图,我们就很清楚的看到,一个定义了 replicas=3 的 Deployment,与它的ReplicaSet,以及 Pod 的关系,实际上是一种“层层控制”的关系。

其中,ReplicaSet 负责通过“控制器模式”,保证系统中 Pod 的个数永远等于指定的个数(比

如,3 个)。这也正是 Deployment 只允许容器的 restartPolicy=Always 的主要原因:只有在容器能保证自己始终是 Running 状态的前提下,ReplicaSet 调整 Pod 的个数才有意义。

而在此基础上,Deployment 同样通过“控制器模式”,来操作 ReplicaSet 的个数和属性,进

而实现“水平扩展 / 收缩”和“滚动更新”这两个编排动作。

有了 Deployment 的能力之后,你可以非常轻松地用它来实现金丝雀发布、蓝绿发布,以及 A/B 测试等很多应用发布模式


相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
9月前
|
Kubernetes 监控 测试技术
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
|
测试技术 微服务 负载均衡
微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。
2789 0
|
2月前
|
运维 负载均衡 Kubernetes
一文搞懂蓝绿发布、灰度发布和滚动发布
一文搞懂蓝绿发布、灰度发布和滚动发布
|
12月前
|
Kubernetes 容器
K8s 金丝雀发布
K8s 金丝雀发布
91 0
|
2月前
|
监控 负载均衡 网络协议
企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
68 0
|
Kubernetes Cloud Native Java
灰度发布、蓝绿部署、金丝雀都是啥?
在滚动部署中,应用的新版本逐步替换旧版本。实际的部署发生在一段时间内。在此期间,新旧版本会共存,而不会影响功能和用户体验。这个过程可以更轻易的回滚和旧组件不兼容的任何新组件。
灰度发布、蓝绿部署、金丝雀都是啥?
|
测试技术 Serverless vr&ar
Knative 灰度发布和自动弹性|学习笔记(一)
快速学习 Knative 灰度发布和自动弹性
128 0
Knative 灰度发布和自动弹性|学习笔记(一)
|
Kubernetes 负载均衡 监控
Kubernetes 实现灰度和蓝绿发布
Kubernetes 实现灰度和蓝绿发布
1115 1
|
Kubernetes Java 应用服务中间件
PolarisMesh系列文章——灰度发布系列(蓝绿发布)
蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行)。
657 0
PolarisMesh系列文章——灰度发布系列(蓝绿发布)
|
负载均衡 Kubernetes 算法
你居然只知道蓝绿发布?今天教你全链路灰度~
在我上家公司其实只有小型的灰度发布,可能会有人跳起来喊:那你们怎么发布服务的? 通过k8s的**滚动发布**来实现无缝上线,如果上线失败呢,通过旧release分支构回去。这其实是灰度里头的**流量比**负载。
867 0
你居然只知道蓝绿发布?今天教你全链路灰度~