【问题标题】:Blue/Green deployment with Nuxt使用 Nuxt 进行蓝/绿部署
【发布时间】:2019-06-11 14:11:41
【问题描述】:

我在我们的基础设施中有一个蓝绿色的部署设置(快速信息 - 一个新的服务器/容器以新的构建启动;流量以滚动方式转移到这些新服务器;从旧集下降 1 个,从新集上升 1 个一)。 问题是,在某一时刻,可能会出现两种(旧/新)部署都提供流量的情况。一个部署的 JS 可能在另一个部署上不可用。

在控制台的请求选项卡中,我可以看到对块的请求是domain.com/_nuxt/<component>/<part><hash>.js 的形式。在nuxt的build文件夹中,组件以<component>_<part><hash>.js的形式存在。

将生成的 js 文件同步到 s3 并通过静态托管(例如 AWS-S3)提供它们是否安全,并在 Nginx 上创建代理服务器用于重新路由部分。我找不到任何现有的解决方案。

大多数解决方案都描述了如何以零停机时间进行部署,并建议通过软链接更改目录以处理零停机时间的方法。它并不能解决用户可能已经在网站上,并且不一定已经浏览过 webapp 的所有页面(因此所有 js 文件都已加载)的情况。

【问题讨论】:

  • 您也可以为最后 1-2 次部署存储旧块。在 nuxt 2.4 中,丢失块的默认行为是自动重新加载页面
  • 通过上述路由服务_nuxt/*是否安全?
  • 我不太明白。 /.js - 这不应该发生
  • 检查此站点,例如 gamevix.com(网络选项卡请求 - _nuxt/pages/news.d4619c07d2bed3d1170e.js)。同名的必须有一个文件在构建文件夹pages_news.d4619c07d2bed3d1170e.js
  • 它肯定不是默认行为。你在你的配置中有一些定制的东西。或者你有一些旧版本的 nuxt..

标签: vue.js nuxt.js server-side-rendering


【解决方案1】:

只要您的 S3 拥有所有部署的所有文件,JS 和资产文件就是安全的。但是,在切换发生之前,您必须确保所有文件都在 S3 中。

唯一关心的是您的 API、服务、业务逻辑。切换期间,不得部署冲突的 API 版本。

  • 绿色:example.com/v1.0/data,返回一个数组
  • 蓝色:example.com/v1.0/data,返回一个对象

在切换期间,您的绿色代码可能会调用蓝色代码,并且由于响应结构不同,您的绿色 Vue 代码未准备好处理新的数据结构。

您可以通过正确升级 API 版本来缓解这种情况。

有多个 API 版本 example.com/v1.0/dataexample.com/v1.1/data。在部署期间,您的蓝/绿将被路由到各自的 API。这很乏味。

我使用 AWS Rolling Updates 简要介绍了它:AWS Nuxt Zero Downtime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 2020-07-21
    • 1970-01-01
    • 2019-01-01
    • 2021-07-18
    • 1970-01-01
    • 2023-02-04
    • 2019-12-22
    相关资源
    最近更新 更多