2016-11-23 43 views
4

我试图实现零宕机时间部署的Azure网络应用程序,其中数据库架构更新需要应用作为部署的一部分。如何使用数据库更新实现零宕机部署到Azure Web应用程序?

我有以下设置:

生产 Web应用程序与生产-DB连接字符串。

分段部署插槽与staging-db连接字符串。

我的伪部署过程是这样的:

  1. 充分利用生产DB数据库
  2. 配置分期插槽使用数据库副本
  3. 部署的副本代码到分段插槽
  4. 应用次架构更新到数据库副本
  5. 试运行应用程序在分期插槽(与更新的数据库)和预温它
  6. 如果一切正常,执行热插拔,使预在分期插槽-warmed应用程序上线,即成为采油槽,依然采用了更新的数据库

换句话说,热插拔后,我想无论是新代码和更新的数据库生活。

如果在这一点上出现问题,我可以再次更换插槽,使旧的生产应用程序(及其数据库)生效。

正如我现在明白了吧,当我换插槽,应用程序将使用生产槽的连接字符串,重新启动应用程序,并迫使我申请的数据库架构更新后更新的代码上线。

我希望我正确地描述这个。 :)这似乎应该是一个相当普遍的情况?

任何帮助或指针,非常感谢!

PS。我查看了Azure seamless upgrade when database schema changes,但该答案无效,因为我无法在不影响应用程序的情况下应用架构更新。

编辑:只是一个念头:也许我应该跳过把连接字符串作为门户设置,而不是保持它在web.config。这样,当交换时,应用程序将不需要重新启动,因为网络。配置将被包含在交换中,新的生产插槽将使用更新后的数据库。

编辑2:我认为当应用程序设置或连接字符串在插槽之间不同时,我错误地认为应用程序重新启动。看来我确实可以为部署插槽设置不同的连接字符串(指向数据库副本),然后在不重新启动应用程序的情况下切换影响网站访问者。

+1

出于好奇,你找到了一个有效的解决方案吗? –

+0

@ d.rodriguez下面是我们如何为Episerver网站做到的:https://tedgustaf.com/blog/2017/zero-downtime-deployment-of-episerver/ –

回答

0

你不能让连接字符串粘到插槽上吗?

enter image description here

全部细节here

+0

并非如此。 :/在交换时,应用程序将重新启动并指向原始生产数据库,而不是通过部署插槽升级的数据库。 –

相关问题