项目部署

本文最后更新于:2024年3月18日 凌晨

项目部署

  • 科学部署的意义在于尽可能减少服务停机时间以及控制新版本带来的质量风险。

全量发布

蓝绿部署

  • 指同时运行两个版本的应用,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。

img

  • 步骤
    1. 首先通过网关配置断开集群A的连接。
    2. 在集群A上部署新版本。
    3. 断开集群B的连接,恢复集群A的连接。
    4. 在集群B上部署新版本。
    5. 恢复集群B的连接。
  • 缺点:蓝绿部署要求在升级过程中,同时运行两套程序,对硬件的要求就是日常所需的二倍。

红黑部署

  • 与蓝绿部署相比,红黑部署充分利用了云计算的弹性伸缩优势。

iShot2021-12-11 23.51.31

  • 步骤
    1. 首先在云上申请一个集群B
    2. 在集群B上部署新版本。
    3. 通过网关配置将连接切换至集群B
    4. 释放集群A中的所有机器。
  • 优点:避免了在升级的过程中,由于只有一半的服务器提供服务,而可能导致的系统过载问题。

增量发布

滚动发布

  • 滚动发布能够解决掉蓝绿部署时对硬件要求增倍的问题。

img

  • 步骤
    1. 在一台新服务器上部署新版本。
    2. 通过网关配置连接刚部署的新服务器。
    3. 断开连接旧版本服务器。
    4. 在旧版本服务器是上部署新版本,循环往复,直至部署完所有的服务器。
  • 优点
    • 节省服务器资源,如果日常需要10台服务器,那么升级过程中也就只需要11台就行了。
    • 出现问题影响范围很小,只会发生在若干台正在滚动发布的服务上。
  • 缺点
    • 发布和回滚需要较长的时间周期,按批次停止旧版本,启动新版本,由于旧版本不保留,一旦全部升级完毕后才发现问题,则无法快速回滚,必须重新降级部署。

灰度发布

  • 灰度发布也被叫做金丝雀发布,与蓝绿部署,红黑部署不同,灰度发布属于增量发布方法,也就是说,服务升级的过程中,新旧版本会同时为用户提供服务。

img

  • 步骤
    1. 在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀,如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。
    2. 当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力,直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。
    3. 如果在灰度发布过程中(灰度期)发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内,属无损发布。
  • 优点:灵活简单,不需要用户标记驱动,安全性高,新版本如果出现问题,只会发生在低比例的流量上。
  • 缺点:
    • 流量配比递增的配置修改,带来额外的操作成本,用户覆盖狭窄,低比例流量未必能发现所有问题。
  • 注意:
    • 由于新旧版本同时运行,如果存在无法协同作业的情况则需要放弃灰度,采用红黑方式全量发布。
    • 不能采用类似于Nginx的权重Weight均衡负载策略,否则会导致一个用户不同请求在新旧版本间反复横跳,出现无法预期的Bug

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!