我有一个小的边缘案例,我的应用程序在生产中失败了。让我试着解释一下场景。
我正在使用 webpack 构建许多反应应用程序。静态资产被复制到单个 nodejs 应用程序,不同的路由呈现不同的反应应用程序。我用来codeship
将我的应用程序代码构建到 docker 映像中。并aws ecs
部署它
这是我尝试将新更改部署到生产/登台时的典型场景。
TAG1 => ecs 上现有的正在运行的应用程序。
路线/dashboard/
/dashboard/index.html
将具有静态参考的呈现为
/static/app/dashboard/main.a1.js
. a1 是 webpack 生成的 chunk hash
/static/app/dashboard/homepage.a2.js.
TAG2 => 当前部署/部署的新应用
路线/dashboard/
/dashboard/index.html
将具有静态参考的呈现为
/static/app/dashboard/main.b1.js
. b1 是 webpack 生成的 chunk hash
/static/app/dashboard/homepage.b2.js.
现在块散列更改,因为我的应用程序代码已更改。这次也是一个新的码头工人形象
我还在 ALB 上启用了持续时间为 1 分钟的粘性会话
现在的问题是部署后我有一个大约 1-2 分钟的时间窗口,静态资产开始给我404
。1-2 分钟后,应用程序稳定下来,一切正常。
可能是因为以下问题。
旧容器请求将转到新容器,因为粘性会话已过期。并且用户尚未刷新页面。
新容器请求将转到旧容器,因为粘性会话不起作用。
无论如何,我都会为应用程序获得 404。
我想知道可以做些什么来避免这种情况。