确保网站部署期间客户端的一致性

时间:2019-02-16 03:29:54

标签: web-deployment

假设我有一个网站。与许多其他文件一样,它提供引用CSS和JavaScript文件的HTML页面。部署新版本时,我担心以下情况:

  1. 客户端加载/index.html
  2. 发生我的原子无缝部署。
  3. 客户端加载/app.js,该客户端在步骤1中加载的HTML页面已对其进行引用。

现在,客户端对我的网站的视图不一致:他们的浏览器已加载/index.html版本和{{1}的 new 版本}。然后:

  1. 随后出现错误。客户愤怒地将自己的钱转移到其他地方。

避免这种情况并确保客户端一致性的最佳方法是什么?我想保证所有客户都能看到该网站的旧版本或新版本,而不是混合版本。

1 个答案:

答案 0 :(得分:0)

我找不到有关此问题的很多信息。开箱即用的部署解决方案似乎没有任何策略,在线上的任何地方也没有太多讨论。

我见过的最好的方法归结为一些关键思想:

    HTML网页引用的
  1. 静态资产是不可变的且永恒的;一旦部署了/assets/app.js,您将永远无法更改它。
  2. 使用显式版本号部署资产的新版本; HTML网站的版本23应该仅引用/assets/app-v23.js
  3. 如果您的部署不是完全原子的,请分阶段进行部署。在第一阶段,在整个机队中部署所有新版本的静态资产。由于它们具有新的版本号,因此尚未被任何HTML页面引用。在第二阶段中,引用所有新资产,部署HTML的所有新版本。

来源:

  • Static assets in an eventually consistent webapp:讨论原始问题中的问题以及部署不是原子部署时的其他问题。当解决方案过度紧张时,它会提供一些有趣的想法。
  • Stealthy shipping with atomic deploys:讨论如何处理XHR API的更新,这是此问题的一种变体。用户的浏览器具有旧版本的JavaScript应用,但如果用户不经常刷新,则可能会访问API的较新版本。