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

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

服务变更的主要原因

  • 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%的服务器进行流量验证,国内也称为金丝雀测试, 流量测试通过, 慢慢将剩余机器也进行发布, 可以达到一个平滑过渡效果.

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

流程

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

优点

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

缺点

  • 发布自动化程度不够,发布期间可引发服务中断

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏