AWS为caching页面/应用部署策略

我们有一个启用了服务器端渲染的单页面应用程序。 我们在AWS ELB上托pipe。

应用程序资源( jscss文件)在文件名中包含一个散列,用于控制客户端/代理端的caching,并且能够确保自从新版本到达后,我们的每个客户都将获得它的新版本。

要做得好,我们已经决定caching整个文件的标题,正文和页脚的一切。 这是预渲染(与所有组件)结果存储在caching中。 它工作得很好,但有一个问题。

无论我们使用什么样的部署策略,我们总是面对这个策略。 我们有两个实例,由于我们使用Rolling方法(这是AWS推荐的)将一个新构build部署到其中一个实例,所以我们使Memcache无效,但问题是:尚未更新的实例(以前的构build),正在工作(处理请求)。 这意味着如果旧的实例会比新的实例(有时候会发生什么)更快地接收到一个请求,那么我们将得到caching的老版本的文档,它指的是不存在的资源(在文件名中使用旧的散列) 。

我看到几个解决scheme:1.开始使用简单的文件名为资产(避免散列)2.不要使用memcache直到所有的实例更新,他们都不符合我们的要求。

有没有其他解决scheme?

你可以使用蓝/绿部署粘性负载平衡,但我想知道它是否足够可靠。 理论上,一定比例的stream量会转移到新服务器上,包括对静态资源的请求。

另一个select是将静态资产部署到所有服务器上,然后执行代码的滚动部署。 我不会在这里使用caching清除技术,我会使用文件名来指示资产版本。 这意味着您可以长时间caching静态资产,但在部署时仍然可以轻松移动到新版本。

另一个select可能是从一台机器提供所有stream量,更新另一台机器,然后进行切换/切换。

这真的取决于你的应用程序,你的负载,和你的喜好。 也许上面的想法之一会为你工作,或者至less给你一些select考虑。