网站首页 > 精选教程 正文
通常产品优化迭代,直接将某版本上线发布给全部用户,若遇到线上事故(或BUG),解决周期较长,则不得不回滚到前一版本,会严重影响用户体验。使用灰度发布或蓝绿发布,能够有效避免因发布导致的流量丢失或服务不可用问题。究竟什么是灰度发布和蓝绿发布,怎么实现,让我们一探究竟。
应用现状
应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。如果直接将某版本上线发布给全部用户,一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得不回滚到前一版本,严重影响了用户体验。
解决方案
长期以来,业务升级逐渐形成了几个发布策略:灰度发布、蓝绿发布、A/B测试、滚动升级以及分批暂停发布,尽可能避免因发布导致的流量丢失或服务不可用问题。本文着重介绍灰度发布和蓝绿发布的原理及实践。
- 灰度发布,又称金丝雀发布,是版本升级平滑过渡的一种方式,当版本升级时,使部分用户使用新版本,其他用户继续使用老版本,待新版本稳定后,逐步扩大范围把所有用户流量都迁移到新版本上面来。这样可以最大限度地控制新版本发布带来的业务风险,降低故障带来的影响面,同时支持快速回滚。
以下示意图可描述灰度发布的大致流程:先切分20%的流量到新版本,若表现正常,逐步增加流量占比,继续测试新版本表现。若新版本一直很稳定,那么将所有流量都切分到新版本,并下线老版本。
切分20%的流量到新版本后,新版本出现异常,则快速将流量切回老版本。
- 蓝绿发布提供了一种零宕机的部署方式,是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。在保留老版本的同时部署新版本,将两个版本同时在线,新版本和老版本相互热备,通过切换路由权重的方式(非0即100)实现应用的不同版本上线或者下线,如果有问题可以快速地回滚到老版本。
灰度发布或蓝绿发布实现方式
利用Kubernetes原生的特性可以实现简单的灰度发布或蓝绿发布,比如:通过修改Service的selector中决定服务版本的label的值来改变Service后端对应的Pod,实现让服务从一个版本直接切换到另一个版本,从而实现蓝绿发布。
如果您的灰度或蓝绿发布需求较复杂,可以向集群额外部署其他开源工具,例如Nginx Ingress、Traefik,或将业务部署至应用服务网格(Application Service Mesh,简称ASM),利用开源工具和服务网格的能力实现。
三种实现方式对比:
这三种方式是如何实现灰度发布和蓝绿发布的。
猜你喜欢
- 2024-10-19 3 种发布策略,解决 K8s 中快速交付应用的难题
- 2024-10-19 Nginx 一个牛X的功能,流量拷贝! nginx 流量统计
- 2024-10-19 「技术干货」Argo Rollouts argocd rollout
- 2024-10-19 zero down-time update服务的方案
- 2024-10-19 面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章
- 2024-10-19 应用拆分、解耦与灰度发布的探索与实践
- 2024-10-19 Nginx 又一牛 X 功能!流量拷贝 nginx复制转发tcp
- 2024-10-19 tke nginx 操作实例 nginxkeepalive
- 2024-10-19 高可用集群——业务分发和灰度发布
- 2024-10-19 阿里云 MSE + ZadigX ,无门槛实现云原生全链路灰度发布
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)