源和目标之间的 Azure 应用服务交换 "Bounces"
Azure App-Service Swap "Bounces" Between Source and Destination
我在 Azure 应用服务上看到了一些有趣的行为,我希望有人能对此发表评论。
复制步骤(所有 Azure 步骤都可以在门户中完成):
- 在应用服务中创建一个新的 Web 应用(标准定价级别,单个实例可以),例如
mysite
- Create a new staging slot 该应用程序,例如
mysite-staging
- 使用内容为
//ONE
的文件 /scripts/test.js 将基本 ASP.NET 应用程序部署到 mysite
- 使用内容为
//TWO
的文件 /scripts/test.js 将基本 ASP.NET 应用程序部署到 mysite-staging
- Swap the deployment slots
- 交换开始后,立即导航到
mysite.azurewebsites.net/scripts/test.js
并在交换操作期间监视返回的内容(通过在浏览器中不断执行强制刷新)
我希望看到的内容:
- 在交换期间的某个时刻,内容 seamlessly/consistently/irreversibly 从
//ONE
变为 //TWO
我实际看到的:
- 交换操作时,
//ONE
和//TWO
之间的内容"flickers"/"bounces"。 swap操作完成后,行为稳定,一致返回//TWO
观察到的行为表明,没有一个时间点可以说所有流量都流向了新版本。
让我担心的原因是以下情况:
- 用户请求页面 mysite.azurewebsites.net,在此 "bouncing" 阶段,该页面以 "v2" 版本的页面响应 link 到 CDN 托管脚本
mycdn.com/scripts/test.js?v2
(?v2
是一个新的查询字符串)
- 浏览器从 CDN 请求脚本,CDN 又从
mysite.azurewebsites.net
请求脚本。这一次,"bouncing" 导致响应成为脚本的 v1 版本。
- 现在我们在 CDN 中缓存了 v1 版本的脚本,该地区的所有用户都将加载 v2 版本的页面
我的问题:这是 "bouncing" 交换操作 "by design" 期间的行为吗?如果是这样,解决上述病理情况的推荐方法是什么?
您描述的行为目前是设计使然。当我们执行交换时,我们更新主机名和数据库中站点之间的映射,但我们的前端实例缓存这些映射并每 30 秒刷新一次。因此 "bouncing" 周期最多可能持续 30 秒。
我目前没有关于如何解决此案的好建议,但会研究解决此问题的可能方法。
我在 Azure 应用服务上看到了一些有趣的行为,我希望有人能对此发表评论。
复制步骤(所有 Azure 步骤都可以在门户中完成):
- 在应用服务中创建一个新的 Web 应用(标准定价级别,单个实例可以),例如
mysite
- Create a new staging slot 该应用程序,例如
mysite-staging
- 使用内容为
//ONE
的文件 /scripts/test.js 将基本 ASP.NET 应用程序部署到 - 使用内容为
//TWO
的文件 /scripts/test.js 将基本 ASP.NET 应用程序部署到 - Swap the deployment slots
- 交换开始后,立即导航到
mysite.azurewebsites.net/scripts/test.js
并在交换操作期间监视返回的内容(通过在浏览器中不断执行强制刷新)
mysite
mysite-staging
我希望看到的内容:
- 在交换期间的某个时刻,内容 seamlessly/consistently/irreversibly 从
//ONE
变为//TWO
我实际看到的:
- 交换操作时,
//ONE
和//TWO
之间的内容"flickers"/"bounces"。 swap操作完成后,行为稳定,一致返回//TWO
观察到的行为表明,没有一个时间点可以说所有流量都流向了新版本。
让我担心的原因是以下情况:
- 用户请求页面 mysite.azurewebsites.net,在此 "bouncing" 阶段,该页面以 "v2" 版本的页面响应 link 到 CDN 托管脚本
mycdn.com/scripts/test.js?v2
(?v2
是一个新的查询字符串) - 浏览器从 CDN 请求脚本,CDN 又从
mysite.azurewebsites.net
请求脚本。这一次,"bouncing" 导致响应成为脚本的 v1 版本。 - 现在我们在 CDN 中缓存了 v1 版本的脚本,该地区的所有用户都将加载 v2 版本的页面
我的问题:这是 "bouncing" 交换操作 "by design" 期间的行为吗?如果是这样,解决上述病理情况的推荐方法是什么?
您描述的行为目前是设计使然。当我们执行交换时,我们更新主机名和数据库中站点之间的映射,但我们的前端实例缓存这些映射并每 30 秒刷新一次。因此 "bouncing" 周期最多可能持续 30 秒。
我目前没有关于如何解决此案的好建议,但会研究解决此问题的可能方法。