在Web场中滚动部署Web应用程序

时间:2011-09-06 07:09:57

标签: asp.net sql-server release-management web-farm

我们有带有sql server的asp.net Web应用程序,该服务器部署在具有联合数据库的服务器场上。我们使用存储过程(而不是准备好的sql语句)和inproc会话。作为实现高可用性的一部分(至少对于具有受控变更集的服务包),我们打算在服务器场上使用滚动部署,这意味着我们这样做:

  1. 关闭一组服务器
  2. 在这些服务器上部署应用程序
  3. 启动这些服务器
  4. 关闭另一组。对所有组重复1-3次。
  5. 虽然这意味着有些用户会被启动,但应用程序仍然可用,并且无需提供维护页面。

    简单的部分是部署Web应用程序,但更难的部分是存储过程是否有变化(例如添加新参数)。当需要存储过程的两个版本(现有的和正在部署的新版本)时,将会有一个点。

    我们已考虑存储过程的4个选项:

    1. 如果版本存储过程发生更改,请不要使用滚动部署
    2. 如果在版本中使用滚动部署,则只允许 new 存储过程,即使这意味着代码重复
    3. 在app层中引入存储过程版本控制和一些框架组件,以自动将版本号附加到正在调用的sproc中。
    4. 覆盖现有存储过程并允许某些存储过程调用失败。
    5. 所有方法都有利有弊,其中3)是最可行的,但也是最复杂的。 你会推荐哪一个?在SQL Server中有任何技巧来处理这种情况吗?还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

如果要覆盖数据库的任何类型的更改,可能需要查看database mirroring and rolling upgrades

摘自链接:

在升级期间提高生产数据库的可用性。

要最大程度地减少镜像数据库的停机时间,可以按顺序升级参与数据库镜像会话的SQL Server实例。这将导致仅一次故障转移的停机时间。这种升级形式称为滚动升级。