天天看点

运维发布/部署的各种方式

文章目录

      • 运维发布/部署的方式
        • 蓝绿部署
            • 概述
            • 特点
            • 布署过程
            • 小结
            • 注意事项
            • 特点
            • 适用场景
        • 灰度发布(金丝雀发布)
            • 灰度发布/金丝雀发布由以下几个步骤组成:
            • 好处
        • 滚动发布
            • 特点
            • 缺点
          • 红黑部署

运维发布/部署的方式

蓝绿部署

概述

蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本。

特点

蓝绿部署无需停机,并且风险较小。

布署过程

部署版本1的应用(一开始的状态)

所有外部请求的流量都打到这个版本上。

部署版本2的应用

版本2的代码与版本1不同(新功能、Bug修复等)。

利用负载均衡将流量从版本1切换到版本2。

如版本2测试正常,就删除版本1正在使用的资源(例如实例),从此正式用版本2。

小结

在部署的过程中,应用始终在线,保证系统在不间断提供服务。新版本上线的过程中,并没有修改老版本的任何内容,在部署期间,老版本的状态不受影响。这样风险很小,并且,只要老版本的资源不被删除,理论上可以在任何时间回滚到老版本。

注意事项

当你切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果你的数据库后端无法处理,会是一个比较麻烦的问题;

特点

优点:升级切换和回退速度非常快。

缺点:切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响。 需要两倍机器资源。

适用场景

对用户体验有一定容忍度的场景。

机器资源有富余或者可以按需分配(AWS 云,或自建容器云)。

灰度发布(金丝雀发布)

金丝雀发布这个名称来源于旷工下矿之前会用金丝雀去探毒

灰度发布/金丝雀发布由以下几个步骤组成:

运维发布/部署的各种方式

在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。

好处

提前获得目标用户的使用反馈;

根据反馈结果,做到查漏补缺;

发现重大问题,可回滚“旧版本”;

补充完善产品不足;

快速验证产品的 idea。

滚动发布

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。

运维发布/部署的各种方式
  • 红色:正在更新的实例
  • 蓝色:更新完成并加入集群的实例
  • 绿色:正在运行的实例

特点

  • 用户无感知,平滑过渡;
  • 节约资源。

缺点

  • 部署时间慢,取决于每阶段更新时间;
  • 发布策略较复杂;
  • 无法确定OK的环境,不易回滚。
红黑部署
这是Netflix采用的部署手段,Netflix的主要基础设施是在AWS上,所以它利用AWS的特性,在部署新的版本时,通过AutoScaling Group用包含新版本应用的AMI的LaunchConfiguration创建新的服务器。测试不通过,找到问题原因后,直接干掉新生成的服务器以及Autoscaling Group就可以,测试通过,则将ELB指向新的服务器集群,然后销毁掉旧的服务器集群以及AutoScaling Group。

红黑部署的好处是服务始终在线,同时采用不可变部署的方式,也不像蓝绿部署一样得保持冗余的服务始终在线。

需要注意: 在蓝绿色部署中,两个版本可能暂时同时获取请求,而在红黑中,只有一个版本在任何时间点获得流量。