部署ASP.NET网站和更新MSSQL数据库,零停机时间

时间:2011-04-11 08:08:09

标签: asp.net sql-server deployment

我对ASP.NET网站和MSSQL数据库部署有疑问。我们正在托管asp.net网站并开发了新版本,一些asp.net文件被更改,数据库被修改了一点。在没有停机的情况下上传新版网站和升级MSSQL数据库的最佳原因是什么?

3 个答案:

答案 0 :(得分:13)

我在过去的5年中通过每月发布管理了一个大型网站,并且在95%以上的时间内实现零停机。遗憾的是,密钥是确保数据库始终向后兼容,但仅限于之前的版本,因此您有机会回滚。

因此,如果您打算删除一个列,例如,您的应用程序依赖于:

  1. 将您的应用程序代码更改为不依赖于该列,并将其释放(不删除数据库中的列)。
  2. 下一个版本中删除列(因为应用程序不再依赖它)。
  3. 您的开发团队需要一些纪律,但如果您拥有合适的环境设置(开发/测试/升级/生产),则可以轻松实现。

    发布时:

    1. 将数据库更改部署到暂存环境,该环境尽可能接近生产环境。最好以自动方式执行此操作,使用SQL Compare和SQL Data Compare之类的东西,这样您就知道数据库与您的测试环境完全一致。
    2. 使用应用程序执行“冒烟测试”,但使用数据库架构,确保数据库未引入重大更改。
    3. 发布您的应用程序代码。
    4. 对测试应用程序进行冒烟测试。
    5. 发布到生产。
    6. 我们确保在网站上实现零停机的另一件事是蓝绿色部署。这涉及为每个网站提供2个文件夹,更新一个并在IIS主目录更新后切换。我在这里写了博客:http://davidduffett.net/post/4833657659/blue-green-deployment-to-iis-with-powershell

答案 1 :(得分:1)

不要这样做。点。

ZERO停机安装非常困难,涉及数据库的多重复制副本,在分段启动中进行预先检查,仔细编程并重新同步数据库。

停机时间过长总是好一点。在深夜睡觉,早上2点部署。或者早点醒来。确定何时对您的用户来说不方便。

就花费的时间而言,100%的正常运行时间对于imeplement来说是非常昂贵的。除非这是一个严格的商业案例,否则偶尔的停工时间是一个更加明智的商业决策。

答案 2 :(得分:0)

即使像salesforce.com和ebay.com这样的大型网站也安排了维护窗口,其中由于后端的更改,这些网站中至少有一部分在一段时间内不可用。

对于ebay来说,它是每Thursday nig ht并且持续4小时,其中“某些功能在此期间可能很慢或不可用”。对于salesforce,they schedule and notify users根据需要。

根据您的网站,您可能最好安排在您的网站处于最低流量水平的某个较晚时间安排1小时的窗口。在1周前,1天前和1小时前提前通知用户。

在将其脱机之前,请确保从另一台服务器上当前生产数据库的副本测试部署。这将让您了解可能遇到的任何问题,并让您知道应该花多长时间。通知用户时该号码加倍。多次运行测试以确保不仅要花费时间,还要验证数据的一致性。

对于在非常短的时间内并行运行版本以便推送更新,Duffman有一个很好的答案。但是,它们通常是数据模型更改的原因,通常最好在部署时转换所有现有数据。运行此转换可能使某些事务在进行时无效并导致数据损坏。

经历了许多“热门”的生产推动后,我可以100%肯定地说,我和我的客户都不想再与他们打交道。绝对没有错误的余地。