前端资源的零停机时间部署

时间:2016-10-01 10:57:25

标签: amazon-web-services web-deployment amazon-cloudfront

我的堆栈是Wildfly,有角度,弹簧,RDS,云端。前端资源(html / js等)存储在应用程序中(即由Wildfly提供)。

对于后端和数据库,我可以在零停机时部署ELB后面有2个EC2,但我不知道如何处理这种情况:

  • 用户从我们的服务器获取旧的js / html - >完成新版本的部署 - >用户点击使用旧api的东西(例如,新版本有一个新的强制参数)

有没有办法避免这种情况?我只能考虑为新参数设置默认值。或者API版本在这里有意义吗?

另一个问题:如果前端资源是由cloudfront + s3提供的,该怎么办?如何将新资源部署到s3与后端同步?

1 个答案:

答案 0 :(得分:2)

  

我只能考虑为新参数设置默认值。或者会   API版本在这里有意义吗?

这听起来恰好是API版本要解决的问题。只要存在会破坏先前版本客户端的更改,您就可以更改API版本。

  

另一个问题:前端资源是如何传递的   cloudfront + s3?如何在s3中部署新资源   与后端同步?

同时部署它们取决于您。您需要以某种方式实现自动化的部署过程的一部分。您可以使用版本控制和部署顺序来帮助一些人。例如,如果您的整个前端部署在S3上:

  1. 在新的API版本号
  2. 下部署新版API
  3. 部署新的静态UI资源
  4. 发出CloudFront缓存失效
  5. 用户开始看到引用新后端API版本的新前端资源
  6. 如果您的前端UI是EC2服务器动态资源和S3静态资源的混合,并且EC2 UI组件和API作为同一部署的一部分进行更新,那么您可以为静态资源使用版本前缀在S3上允许一次提供多个版本。例如:

    1. 使用新版本前缀将新的静态UI资源部署到S3。这可确保S3资源的先前版本和新版本同时可用。
    2. 部署EC2应用程序,该应用程序同时更新EC2 UI组件和API
    3. 用户开始从EC2加载新版本的应用程序,EC2引用新版本前缀下的静态资源,然后CloudFront将缓存并提供服务
    4. 显然,这只是一些场景,你的情况可能会有所不同。通常,您需要使用任何资源(静态S3资源,API资源等)和智能部署顺序的版本控制,以确保最终用户不会看到服务中断。