2011-04-11 49 views
8

我对ASP.NET网站和MSSQL数据库部署有疑问。我们主持了asp.net网站并开发了新版本,一些asp.net文件被改变了,数据库被修改了一些。什么是最好的为什么上传新版本的网站和升级MSSQL数据库没有宕机?部署ASP.NET网站和更新MSSQL数据库,零宕机时间

+0

网站的旧版本是否可以与新版本的数据库一起使用? – 2011-04-11 08:10:48

+0

不,新数据库版本有许多新字段,有些旧字段被删除。 – Tomas 2011-04-11 08:11:42

回答

1

不这样做。点。

ZERO停机安装很难做到,并且涉及数据库的多个副本,预先检查它在分期工作中,谨慎编程和重新同步数据库。

采取小的停机时间几乎总是更好。在夜间长时间睡眠,早上2点部署。或早点醒来。确定租赁时间不便于您的用户。

100%的正常运行时间对于执行时间的花费非常昂贵。除非这是一个严格的商业案例,否则偶尔的停机时间是一个非常理想的商业决策。

+1

100%是不可能的 – gbn 2011-04-11 09:08:10

+1

这是可能的。正在处理零计划停机时间要求的系统。除了重大更新每年可能一次。不过,这是BRUTAL。对操作和工作的要求是可怕的。 – TomTom 2011-04-11 09:23:36

+1

“零计划停机时间”......“除一年一次外”。与100%运行时间不一样。 – NotMe 2011-04-22 17:08:52

12

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

所以,如果你打算删除列,例如,您的应用程序依赖于:

  1. 更改应用程序代码不依赖于列,并释放(没有除去列数据库)。
  2. 下一个版本删除列(因为应用程序不再依赖它)。

它需要开发团队的一些训练,但是如果您有适当的环境设置(dev/test/staging/production),实现起来非常容易。

当你松开:

  1. 部署数据库更改为分期环境,这是因为接近生产越好。最好使用SQL Compare和SQL Data Compare等自动化方式进行此操作,以便您知道数据库与您的测试环境完全一致。
  2. 使用旧的应用程序执行“冒烟测试”,但使用新的数据库模式,确保没有在数据库中引入重大中断更改。
  3. 发布您的应用程序代码。
  4. 烟雾测试您的舞台应用程序。
  5. 正式投入生产。

我们做的另一件事情是确保网站零停机时间是蓝绿色部署。这涉及到每个网站有2个文件夹,更新一个,并且在IIS主目录更新后切换。我在这里发布了博客:http://davidduffett.net/post/4833657659/blue-green-deployment-to-iis-with-powershell

0

即使是像salesforce.com和eBay这样的大型网站。com已经安排了维护窗口,其中由于后端的变化,这些站点的至少部分在一段时间内不可用。

对于易趣而言,它的每个Thursday nig ht并持续4个小时,其中“某些功能在此期间可能会很慢或无法使用”。对于销售人员,根据需要they schedule and notify users

根据您的网站,您可能最好安排一个1小时的窗口,在您的网站处于最低流量级别的某个深夜。在提前1周,提前1天和提前1小时提前通知用户。

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

为了获得推送的更新,Duffman在很短的时间内并行运行版本方面有很好的答案。但是,它们通常是数据模型更改的原因,通常在部署时转换所有现有数据通常会更好。运行此转换可能会使在发生某些事务时无效并导致数据损坏。

经历了许多“热”生产推动,我可以100%肯定地说,我和我的客户都不想再次处理这些问题。绝对没有错误的余地。