题 Web应用程序的100%正常运行时间


我们今天收到了客户的一个有趣的“要求”。

他们希望100%的正常运行时间 场外 Web应用程序上的故障转移。从我们的Web应用程序的角度来看,这不是问题。它旨在能够跨多个数据库服务器等扩展。

但是,从网络问题来看,我似乎无法弄清楚如何使其工作。

简而言之,该应用程序将存在于客户端网络中的服务器上。内部和外部人员都可以访问它。他们希望我们维护系统的非现场副本,如果在他们的场所发生严重故障,他们会立即接收并接管。

现在我们知道绝对没有办法解决内部人员(载体鸽?),但是他们希望外部用户甚至不会注意到。

坦率地说,我对于如何做到这一点并不是最模糊的想法。似乎如果他们失去互联网连接,那么我们将不得不进行DNS更改以将流量转发到外部机器......当然,这需要时间。

想法?

UPDATE

我今天与客户进行了讨论,他们澄清了这个问题。

他们坚持100%的数字,说应用程序应该保持活跃,即使在洪水的情况下。但是,如果我们为它们托管它,那个要求才会开始。他们说,如果应用程序完全在他们的服务器上运行,他们将处理正常运行时间要求你可以猜到我的回答。


310
2017-09-29 00:31




不要低估黑客造成的巨大停机时间,看看索尼和PlayStation网络。你可以保证他们有相同的%100正常运行时间的想法和金钱/硬件支持它。与客户明确表示100%的正常运行时间是不可行的期望,即使是谷歌技术人员也会犹豫是否会嘀咕“100%正常运行时间”。一个提示btw是要研究使用动态DNS,他们只缓存60秒,这应该包括操作系统和本地DNS服务器。 - Silverfire
我个人而言 跑 从这个客户端尽快。我怀疑这不是他们可能拥有的最后一个疯狂的想法(从技术的角度来看)。 - GregD
我希望我能投降你的客户。 - joeqwerty
如果您发现100%的正常运行时间让我知道。我将用它创建一个商家并将其出售给谷歌。 100%是不可能保证的。即使像微软,亚马逊或谷歌这样的公司也不会那么高,因为他们知道这是不可能的。我见过的最好的是99.999%,甚至是一段时间(一年5分钟)。你可能做的最好的是99.99%可靠。 - Matt
只是弥补一个疯狂的高价标签,以提出他们疯狂的要求。这可能会让他们恢复理智。无论是,还是会让他们找不到愿意欺骗他们的人。 - Nate C-K


答案:


这是 维基百科追求9的方便图表:

enter image description here

有趣的是,只有 前20个网站中的3个 雅虎,美国在线和康卡斯特都是雅虎,美国在线和康卡斯特,他们在2007年实现了神话般的5个9或99.999%的正常运行时间。在2008年的前4个月中,有些是最多的 流行的社交网络,甚至没有接近那个。

从图表中可以看出,追求100%正常运行时间是多么荒谬......


363
2017-09-29 01:03



Pingdom也没有每秒检查。最重要的是,那些遇到五个九的人可能仍然有Pingdom可能没有检测到的局部中断,或者在仍然响应ping时使一些服务不可用的故障。 - ceejayoz
这本身就是五个九的可疑...... - GregD
正是。他们有数十亿美元可以合作! - ceejayoz
很抱歉打扰正在进行的聊天,但是OP的问题是如何在技术层面上努力实现100%正常运行时间的目标而不是概念上的,我确信他知道并不总是可能因为硬件发生自然事件和环境。我们能帮助他吗? - David d C e Freitas
致OP:我已经看到SLA可以在“正常维护之外”的环境中保证正常运行时间。正常维护当然是每月安排更新,补丁等的停机时间,这通常发生在本月最不繁忙时段(通常在半夜)的最忙碌的一天。他们必须在业务方面拥有某种类型的业务指标。您 可以 为他们提供更好的正常运行时间(4个9) 只要 在那些时候。 - GregD


要求他们定义100%以及如何在多长时间内测量它。它们可能意味着接近100%,因为他们可以负担得起。给他们成本计算。

详细说明。多年来,我一直在与客户讨论所谓的荒唐要求。在所有情况下,他们实际上只是使用不够精确的语言。

他们经常以看似绝对的方式构建事物 - 例如100%,但事实上,在更深入的调查中,它们足以合理地进行成本/收益分析,这些分析在提供风险缓解数据的成本计算时是必需的。询问他们如何衡量可用性是一个至关重要的问题。如果他们不知道这一点,那么你就必须向他们建议这需要先定义。

如果网站在以下情况下发生故障,我会要求客户定义在业务影响/成本方面会发生什么:

  • 在他们最繁忙的时间x小时
  • 在最忙碌的时间x小时

以及他们将如何衡量这一点。

通过这种方式,您可以使用它们来确定“100%”的正确级别。我怀疑通过询问这些问题,他们将能够更好地确定他们的其他要求的优先级。例如,他们可能希望支付某些级别的SLA并破坏其他功能以实现此目的。


186
2017-09-29 09:45



同意。它们可能仅仅意味着“非常高”的正常运行时间(90年代以上?)具有非常可靠的故障转移策略。如果没有,那么对所涉及的成本规模的解释将有希望说服他们...... - Martin Dow
+1没有得出结论,而只是要求客户解释他们的想法。 - sleske
我赞同“没有跳到结论”的声明......如果客户意味着100%正常运行时间(减去定期维护)那么它 可以 更合理的要求。 - Tim Reddy
关于业务影响,我们实际上完全了解和了解他们的业务,并且网站倒闭所涉及的成本不是财务上的。更多的是当地人出现在干草叉,潜在的帷幔等等;)想象一下,有40,000人出现在你的前门尖叫。这就是他们想要用激情避免的东西。 - NotMe
@ChrisLively更有理由对风险有一个成熟的理解。安全工程的主导范式是 概率风险评估。有些系统可以杀死(不仅仅是惹恼)成千上万的人,而且他们仍然有一个很低的,希望很好理解但非零概率的失败。 - poolie


你的客户很疯狂。 100%正常运行时间 不可能 无论你花多少钱。简单明了 - 不可能。看看谷歌,亚马逊等。他们拥有几乎无穷无尽的资金投入他们的基础设施,但他们仍然设法有停机时间。你需要向他们传达这个信息,如果他们继续坚持他们提供合理的要求。如果他们不承认这一点 一些 停机时间是不可避免的,然后沟通了。

也就是说,您似乎拥有扩展/分发应用程序本身的机制。网络部分将需要涉及到不同ISP的冗余上行链路,获得ASN和IP分配,以及深入了解BGP和实际路由设备,以便IP地址空间可以在ISP之间移动(如果需要)。

很明显,这是一个非常简洁的答案。您没有经验需要这种程度的正常运行时间的应用程序,所以如果您想要接近神话般的100%正常运行时间,您真的需要让专业人员参与其中。


141
2017-09-29 00:39



同意。完全。疯。 - jdw
他们习惯了? - Sirex
@Sirex参考最近的实验@CERN,其中发现中微子比光更快地传播。结果尚未得到独立科学家的证实。 - TC1
@ TC1我敢打赌你 $ 200 这并没有成功。 - dpatchery
@ErikA 100%正常运行时间的请求表明对系统技术特性的忽视。没关系,因为客户的工作正在做他们所做的一切。您的工作是设计IT系统。像这样的困难客户可能是噩梦,但他们也可以成为您最好的客户。 - duffbeer703


嗯,这绝对是一个有趣的。我不确定我是否愿意让自己承担100%的正常运行时间,但如果我必须这样做,我认为它看起来像这样:

从负载均衡器上的公共IP开始,完全脱离网络并构建至少两个,以便可以故障转移到另一个。像Heatbeart这样的程序可以帮助自动故障转移。

Varnish主要被称为缓存解决方案,但它也做了一些非常不错的负载平衡。也许这是处理负载平衡的好选择。它可以设置为具有1到n个后端,可选地在导向器中分组,这将随机或循环加载平衡。清漆可以变得足够聪明,可以检查每个后端的健康状况,并将不健康的后端从循环中丢弃,直到它恢复在线状态。后端不必位于同一网络上。

我现在很喜欢Amazon EC2中的弹性IP,所以我可能会在不同地区或至少在同一地区的不同可用区域中的EC2中构建我的负载平衡器。如果你不得不将现有的A记录IP移动到新的盒子,这将为你提供手动(上帝禁止)旋转新的负载均衡器的选项。

但是,Varnish不能终止SSL,所以如果这是一个问题,你可能想看看像Nginx这样的东西。

您可以在客户网络中使用大部分后端,在网络外部使用一个或多个后端。我相信,但不是百分百肯定,您可以优先考虑后端,以便您的客户机器将获得优先权,直到所有这些机器变得不健康为止。

如果我有这个任务,那就是我要开始的地方,并且随着我的进展无疑会对它进行改进。

但是,正如@ErikA所说,它是互联网,并且总会有网络的一部分超出您的控制范围。您需要确保您的法律仅限于您控制的事物。


54
2017-09-29 00:47



有一段时间我在考虑使用亚马逊和MS进行云部署,但在过去的几个月里,他们都遭遇了重大中断。 SSL至关重要。 - NotMe
如果您打算使用亚马逊,您肯定希望将您的计算机分散到5个可用区域。所有区域都不可能同时出现。 - jdw
+1实际解决OP的主要问题。 - Phil
只要链中有一个非分布式的东西(在你的情况下心跳,除非你有多个在远程机器上运行的实例,所有对象都是相互监控的,除非你总是有一个故障点,jdw)服务器,由于路由中的网络故障,它们中的任何一个可能会或可能不会看到。这让我们陷入“停工期”。服务器可能已启动并正在运行,并且如果故障不在路由路径中,则无需检测到心跳,客户端仍然无法使用这些服务器。 - jwenting
同意。正如其他人所指出的那样,没有100%的正常运行时间。你所能做的只是尝试,我所描述的是我将如何开始尝试。 - jdw


没问题 - 略微修改了合同措辞:

...保证100%的正常运行时间(舍入到零小数位)。


29
2017-09-29 10:13



注意到+1,100%不是100,0%或100,000%等。十进制数字很重要,它们表示精度;) - Danubian Sailor
根据某些惯例,“100%”只有一个重要数字,因此所有半数和一数之间的数字将会变为“100%”; 50%将四舍五入到100%。 - Thomas Levine
根据计数的标准,有人会说50%有两个变薄的数字,其中100%有三个变数。 50,5和100就是那么准确。其他人将计算小数点后的数字。然后50,5和100,4将同样准确。如果没有其他说明,我会认为100%是99.5%及以上。 100,0%是99.95%及以上等 - Tillebeck


加上 oconnore的回答 来自黑客新闻

我不明白这是什么问题。客户希望你计划灾难,他们不是数学导向,所以要求100%概率听起来合理。工程师,正如工程师们所做的那样,记得他第一天的概率和数据101,而不考虑客户可能没有。 当他们这么说时,他们没有想到核冬天,他们正在考虑弗雷德在办公室服务器上丢弃他的咖啡,磁盘崩溃,或ISP倒闭。 此外,你可以做到这一点。使用地理上独特,独立的自我监控服务器,您基本上不会有停机时间。 3台服务器以独立的(1)3 9可靠性运行,具有良好的故障转移模式,您的预期停机时间不到每年一秒(2)。即使这种情况一下子发生,您仍然处于Web连接的合理SLA范围内,因此实际上不存在停机时间。 客户仍然需要处理世界末日的情景,但哥斯拉除外,他将有一个“永远”的服务。

(1)洛杉矶的服务器与波士顿的服务器完全独立,但是,我知道有一些涉及核战争,中国黑客崩溃电网等的交叉点。我不认为你的客户会不高兴这个。

(2)DNS故障转移可能会增加几秒钟。您仍处于客户端每年必须重试一次请求的情况下,这也是在合理的SLA范围内,并且通常不会与“停机时间”相同。如果应用程序在发生故障时自动重新路由到可用节点,则这可能无法察觉。


25
2017-09-30 15:49



问题是他们在合同中说它。意思是如果发生灾难 不 发生这种情况,您需要超过十秒钟才能通过他们有权​​起诉的备份将网站重新联机。 - Shadur
@Shadur:如果他们 真 想要它,那么你必须 真 给他们充电。在地理上远程和广泛地传播服务器,希望在任何地方都不会发生灾难。 - Jungle Hunter
我见过一个提供100%正常运行时间保证或退款的网站。诀窍是他们收取了一笔船并分成几个月。因此,有些月份没有报酬,你可以安排周围的一切,并用可行的月份弥补损失。 - jldugger


如果Facebook和亚马逊不能这样做,那么你就做不到。就这么简单。


25
2017-09-29 01:10



他可能比他们所有人的智慧更聪明,谁知道:p - Matt
100%的正常运行时间不一定是字面意义上的人 - 这意味着:在需要的时候100%可用。例如,银行系统应始终可用,并且它们表现良好。仅仅因为他们每年一次维护1秒并不意味着他们在100%的正常运行时间目标上失败了。 - David d C e Freitas
@DavidFreitas - 我认为在合同中它通常很文字...... - UpTheCreek
@Matt只是因为Facebook /亚马逊无法做到这一点并不意味着一个较小的网站无法做到这一点。许多大型网站比较小的网站面临更难克服的难题。 - Xorlev
所以你说的是你没有100%的正常运行时间,因为你有一些客户端有错误..加上dns不是一个即时开关,因为你有ISP忽略短TTL - Mike


你被要求做一些不可能的事。

在这里查看其他答案,与您的客户坐下来解释 为什么 这是不可能的,并衡量他们的反应。

如果他们仍坚持100%正常运行时间,请礼貌地告知他们无法完成并拒绝合同。你永远不会满足他们的要求,如果合同没有完全吮吸,你将受到惩罚。


17
2017-09-29 03:41



100%需要定义,即100%可用,除非进行维护或升级,并且时间将限制在最多每月几个小时的安静时间。这一切 要看 在这种情况下,Web应用程序的用途和用途是什么...... - David d C e Freitas
并定义“停机时间”。甚至在理论上也不能保证他们能够从他们在费尔班克斯的办公室访问奥马哈的服务器,除非你控制整个网络(尽管你可以保证服务器正常运行)。 - jwenting
恕我直言,如果他们要求“100%正常运行时间”,这些定义是无关紧要的:即使您协商定期维护并建立N + N冗余,如果一个小故障导致计划外重启或服务闪烁,您也会损坏您的SLA。 DEFINITELY 如果您正在谈判3个,4个或5个9的SLA,则相关。 - voretaq7
取决于SLA的条款,不是吗?如果您每月获得10万美元的付款,并且每分钟的停机时间都会带来1美元的罚款,这可能是完全可行的(如果您有其他合同来分摊24/7现场系统管理员的费用)。 - Michael Borgwardt
@MichaelBorgwardt肯定有一些方法可以从纯粹的数字角度“让它发挥作用”,但我仍然会因为糟糕公关的可能性而下滑($ _CLIENT在推特上发布并告诉全世界'我们因为$ _PROVIDER无能而失败'并且无法满足他们的SLA!')。就个人而言,我宁愿有10个更小,更合理的客户每月向我支付1万美元:-) - voretaq7


相应的价格,然后在合同中规定任何超过SLA的停机时间将以他们支付的价格退还。

ISP在我上一份工作中做到了这一点。我们可以选择“常规”DSL线路,99.9%的正常运行时间,40美元/月,或者三个T1的保护,99.99%的正常运行时间,1100美元/月。每月频繁停电超过10个小时,这使得他们的正常运行时间远低于每月40美元的DSL,但我们只退还了大约15美元左右,因为这是每小时*小时的结果。他们就像这笔交易中的匪徒一样。

如果您每月支付450,000美元以获得100%的正常运行时间,并且您只需达到99.999%,那么您需要向他们退还324美元。假设完全分布式colos,多层1上行链路,fancypants硬件等,我愿意打赌基础设施成本达到99.999%,接近每月45,000美元。


13
2017-09-29 19:01



如果你看到有人承诺100%的正常运行时间,那么这正是他们正在做的事情。有希望的100%正常运行时间和交付时间之间存在差异。如果他们试图向您推荐竞争对手的SLA,那么向客户解释这个是个好主意。 - sjbotha


如果专业人士质疑 99.999%的可用性是实际或经济上可行的可能性,那么99.9999%的可用性甚至更不可能或更实用。更不用说100%了。

您将无法在较长时间内达到100%的可用性目标。你可以放弃它一个星期或一年,但随后会发生一些事情,你将被追究责任。排污口的范围可以从损坏的声誉(你承诺,你没有交付)到合同罚款的破产。


10
2017-09-29 06:41





有两种类型的人要求100%正常运行时间:

  1. 完全不了解计算机,计算机系统或互联网的人。*
  2. 有意自行制作的人,或者是为了测试你说No(谷歌“橙汁测试”)的能力,或者试图获得某种合约SLA杠杆以便以后付钱给你。

我的建议是,在很多场合遭遇这两种类型的客户,就是不要接受这个客户。让他们让别人疯狂。

*同一个人可能没有尴尬询问比光速更快的旅行,永动,冷融合等。


10
2017-09-30 12:24



+1橙汁测试..我喜欢,不知道它:) - Oliver M Grech