为什么网站(甚至是这个网站)有时会“停机维护”?


36

我个人从未这样做过。我不明白为什么会有这么多站点,如果您在开发服务器上进行开发,为什么要关闭生产站点?

我一直想知道这一点。

他们在这段时间在做什么,需要做什么?


56
他们正在更换服务器中的真空管。
mipadi

11
我以为他们在堆放打孔卡。
Christopher Mahan

5
请记住,该网站可能确实可以进行大多数更新。显然,您只会看到它实际需要离线一段时间的地方。
Dean Harding

4
没有人提出安全理由;可能存在已知的漏洞利用程序(又名有人发布了如何利用某些网站的信息),管理员将其离线使用,以减轻修复过程中来自其他方的滥用。
弗朗西斯科·普雷森西亚

1
我想到问“我可以使用哪些策略在数据库支持的Web应用程序中实现零(计划内)停机时间?” 需要数据库架构更改的特定升级: softwareengineering.stackexchange.com/questions/336945/…–
Stephen

Answers:


59

对于任何规模较大的事情,最大的好处是,如果有人以某种方式更改数据库架构,则通常需要运行一些大型的,讨厌的维护脚本。

现在,这些可能需要一秒钟左右的时间才能与您的开发数据集一起运行。但是,当您开始以TB和PB为单位测量数据时,即使将单个列添加到表中也要花费数小时。

因此,无论部署的速度和自动化程度如何,您仍然要解决数据维护问题。如果您确实计划得很好,则可以在进行此过程的同时建立站点的只读镜像,但是对于许多站点,只读是没有意义的,因此不值得付出努力。


3
+1-只读堆栈溢出不会很好。您在Google上找不到的东西将不多:)
corsiKa 2011年

10
@glowcoder:当您在Google上搜索时,会找到SO答案。
Donal Fellows,

@Donal正是我的意思。
corsiKa 2011年

1
Google庞大,并且肯定拥有庞大的数据库;为什么我从来没有见过Google的“停机维护”?(Google.com主页)
alexyorke,2012年

7
@ alexy13-google是规模的特殊类别,他们无法拥有单个数据库甚至数据中心,系统的某些部分始终处于故障状态,并且它们已经编写了前端来处理它。如果您把我的时间和研发预算交给我,我也会。
Wyatt Barnett 2012年

7

有多种原因可能导致您需要关闭站点进行维护。仅举几例:

  • 数据库变更
  • DAL变更
  • 更新服务

基本上,如果您的网站不是静态的,则在执行逻辑更新时,您希望将其删除,否则访问您网站的用户可能会收到错误或意外行为。

另外,如果要触摸站点的web.config(在ASP.NET中),则应先将其删除进行维护,因为它将使用户的会话中断。因此,如果它们在某物中间,它将丢失。


2
如果使用“处理中”会话状态,则该会话将丢失。如果使用进程外会话状态,则更改web.config时,会话不会丢失。
安东尼

2
最后一点只有在进行过程中的会话时才是正确的,我希望您不在生产现场!除了触摸web.config之外,还有很多事情可以减少工作进程。
Dean Harding

7

好吧,这是一个抽象的问题-我什至看到网站使用“停机维护”而不是HTTP 500。

对于网站,有时需要进行一些升级。例如,如果您要更改数据库,则在此期间您不希望任何其他用户接触该数据库。如果数据库脱机,则还必须正常关闭该站点,因为显示SqlException并不是很好。另一个原因是某些硬件故障或系统故障(例如资源泄漏),这需要应用程序甚至系统重新启动。

有一次,我参加了我国最大的银行之一的网上银行系统升级。网站,中间层和数据库的升级过程耗时三天,客户无法使用该系统。它还包括所有内容的完整备份,因此万一发生故障,可以将系统还原为旧版本。


2
HTTP 503(而不是500)不是“停机维护”的正确状态代码吗?
Nubok

4

服务器需要运行补丁程序,并且在许多操作系统上,这些补丁程序需要重新启动。因此,这是停机时间的一种。许多公司计划从补丁程序重启以减少使用时间,例如星期日早上。如果没有补丁程序,它们将在定期计划的维护时间重新启动服务器(这是NT4天的宿醉,因为某些计数器每周半溢出,因此每周重新启动可以防止其他错误)。

我工作过的一家公司在90年代后期就建立了一个电子商务网站,每月的销售额超过100万美元。有人将错误的税表升级到生产数据库服务器。解决方法是从备份还原数据库服务器,并应用自上次备份以来的事务。这花费了几个小时,在此期间该网站无法接受订单。由于订单部分和静态销售手册在同一站点上运行并且是不可分割的,因此两者都必须降低。

我工作过的一家公司在错误的位置插入了错误的文字,CEO倒闭了,该网站下线“进行维护”,同时布局和文字被“固定”,适当的受害者被指责和开除。


即使这样,也可以通过适当的负载平衡来缓解
Voycey

4

尽管其他答案是正确的,但您几乎总是可以使用正确的体系结构来避免停机。但这是有代价的,而且这代价可能不值得:一小时的停机会给亚马逊或纳斯达克背后的基础设施带来很多损失。堆栈溢出 ?最有可能不是那么多。

如何避免宕机:

  • 关闭硬件服务页面:如果您的网站前面有代理,则可以将其脱机而不会对用户造成任何影响
  • 重新配置服务器:与上面相同
  • 更新/更改数据库中的数据:您可以将网站设置为只读模式,等等。

通常,在分层架构中,越接近“顶部”,避免停机的难度就越大,这对于有状态(Web服务器与数据库)相同。


4
纳斯达克一天不安排约14个小时的停机时间吗?
彼得·泰勒

3

即使每次安排的停机时间都无事可做,站点仍可能安排定期的停机时间。通过这样做,他们习惯了的想法用户该网站将关闭了一定的时间,每隔一段时间,这样,当工作确实需要做的,用户不会抱怨这么多。


有一种解决方法:在停机期间降低投诉系统:)我实际上已经看到公司这样做。一家大型MMO公司将托管停机公告的网站,支持论坛以及该游戏因维护而关闭的情况下就是一个很好的例子。在维护之前的几个小时内没有收到公告的任何人都不会知道发生了什么。
jwenting 2011年

3

这也有心理和市场方面。在某些情况下(我敢说大多数情况,但我不是那么粗体* g *),阅读“停机进行维护”也可能表示“服务器由于任何其他原因而崩溃或停止运行”。

我经常看到这种情况。通常,作为开发人员,您会希望收到“真实的”错误消息,例如“糟糕,我们现在正在承受高负载,并且无法处理所有请求”,但是市场营销人员会告诉您“老兄,您不能告诉客户我们有问题。告诉他们我们正在按计划进行维护-这样看起来会好很多。”

因此,“停机维护”通常只是“服务中断”的另一个术语。


2

无需关闭服务器进行维护。您可以避免在任何规模,数据库更改,服务器更新等任何情况下这样做。

问题在于,在一定程度上,零停机系统的创建和维护成本很高。您需要无处不在的冗余,无处不在的负载平衡,数据复制,同步。这些都是难题。

基本上,您需要达到可以在产品中发布Netflix Chaos Monkey的水平,以确保即使部分系统正忙于更新或不同步,它也可以正常工作。这当然是可行的。它也是非常昂贵的,需要很多时间和许多专家来解决这个问题。

将站点置于维护模式可能是您选择的中间立场,因为您不想投入太多,只是为了避免偶尔偶尔关闭站点。

经济学。

当然,如果您确实选择了零宕机时间的途径,那么您的站点将不仅获得可用性,还将获得可靠性,因为这些最佳实践可同时满足这两个目的。


0

我不明白为什么会有这么多站点,如果您在开发服务器上进行开发,为什么要关闭生产站点?

该死。除非您对交付物进行某种形式的数学验证(并且您的规格有效),否则无论您多么小心,都会发生垃圾。

另外,有时您可能不得不对基础架构的关键部分进行更改(例如,对数据库结构进行更改),这确实需要停机。

除非您正在开发关键系统(例如,五分之九或六分之九的系统),否则要做的负责任且具有成本效益的事情是构建一个将停机时间作为现实的一部分来接受的系统。

此外,通过使停机时间易于管理并易于安排(或至少可检测),并具有清晰的理解和有效恢复程序,您可以进一步利用该原则。


1
数学验证也不是万能的。有时,您发现您已验证的内容不是您验证的内容。
Donal Fellows

真正。但是然后我认为问题不在于规范的正式验证,而在于那些规范的验证。如果您的规范无效,那么显然所有内容都将落空,但是对规范进行验证(“我们是否确实在为目标用户构建目标用户所需的正确东西”),这不是验证的重点(*“这些规范,我们是在正确地构建这个东西,还是可以构建它?”,非正式还是其他形式。我想我应该
对此做个

我并不是说你说错了。我只是指出它可以做什么是有限度的。我曾经从事形式验证的工作,当时最大的问题是如何正确发展规范,以考虑对需求不断变化的理解。由于这主要是人为问题,其次是工程问题,而仅是第三级数学问题,所以我认为还没有完全解决它。
Donal Fellows

哦。我认为那时我们就像在思考。不断变化的需求(和需求确认)是形式化方法的致命弱点。由于这是一项创造性的任务(由于其人性化),我不认为它可以解决,不是形式主义者/纯粹主义者所希望的那样。我认为这是FM失败的承诺之一;他们被超卖了(例如,我指的是Web开发的正式方法?)这些规范必须受到严格审查,并且不适合快速更改(这是关键系统的典型特征,而不是高度可塑性的系统)。后者是规范,而不是例外。
luis.espinal 2011年

99%的用户界面与形式方法无关,而是与应用心理学有关。其余的证明是显而易见的(“不要死于UI”),即使并非总是显而易见的证明。但是,如果您已根据最佳实践将webapp分开,那么正式方法将在业务方法层(在数据存储层中)也很有意义,但这通常是“不要编写自己的”标准建议的地方。 DB”仍然适用。:
Donal Fellows

-2

一旦我们的网站被黑客入侵(几年前是旧的IIS6和Windows 2003服务器)。在进行恢复时,我们将“正在维护”页面放置了几个小时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.