Erlang的99.9999999%(九个九)可靠性


98

据报道,Erlang已在生产系统中使用了20多年,正常运行时间百分比为99.9999999%。

我做了如下数学运算:

20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s

这意味着该系统在20年的时间内只有不到一秒钟的停机时间。我并不是要挑战这种方法的有效性,我只是好奇我们如何仅在0.631秒之内就可以关闭系统(有意或无意)。熟悉大型软件系统的任何人都可以向我们解释一下吗?谢谢。


有谁知道如何在一组处理单元(或机器)上计算服务的停机时间?


28
也许在waayyyyyy上使用的不仅仅是一台计算机-有些国家的出生率为1.2个孩子……
weltraumpirat 2011年

3
@weltraumpirat这是有道理的,由于Erlang具有分布式特性,因此必须在许多计算机上使用它。

12
是的 这是服务的正常运行时间,而不是运行它的计算机。
RCE

Answers:


85

可靠性数字不能用来衡量(所涉AXD301项目)任何部分关闭20多年的总时间。它代表了AXD301系统提供的服务离线20年来的总时间。细微的差别。正如乔·阿姆斯特朗(Joe Armstrong)在这里说的那样:

AXD301达到了九个九的可靠性(是的,您没看错,为99.9999999%)。让我们把它放在上下文中:5个9被认为是很好的(每年停机5.2分钟)。7个9几乎无法实现...但是我们做到了9。

为什么是这样?没有共享状态,外加完善的错误恢复模型。

如果您深入研究,在Erlang的原始作者Joe(包括的案例研究AXD301)撰写的博士学位论文中,您会读到:

本章研究的项目之一是爱立信AXD301,这是 一种高性能,高度可靠的ATM交换机

因此,只要交换机所在的网络在没有停机的情况下运行,作者就可以声明“九个九个可靠性” AXD301(这是他曾经说过的,避免了细节)。不一定意味着Erlang是获得如此高可靠性的唯一原因。

编辑:实际上,“ 20年”本身似乎是一种误解。Joe在同一篇文章中提到了20年的数字,但实际上与九个九位数的可靠性数字没有关系,后者可能来自更短的研究(就像其他人提到的那样)。


13
“是的。这是服务的正常运行时间,而不是运行它的计算机。” -RCE说
卢克·斯坦利

就像我回到1993年GT MSCS的学校一样!你钉了
Mike Polen 2014年

2
正如我在回答中解释的那样,该数字并非基于AXD301运行20年的数据。它在英国电信的一次试用中,在8个月的时间内基于14个节点。这几乎不能代表整个AXD301系列产品在20年内的运行特性(我相信这仍然很出色,只有九个九)。
Edwin Fine,

56

当其他人解决了您要询问的具体情况时,您的问题似乎是基于一种误解。您问这个问题的方式使我相信您正在考虑有一个手动过程,可以在系统崩溃或停机进行维护后再次运行。

Erlang具有一些功能,这些功能消除了将人工时间作为停机时间的根源:

  1. 热代码重装。在Erlang系统中,很容易为现有模块编译和加载替换模块。BEAM仿真器自动执行交换,而不会明显停止任何操作。毫无疑问,这种转移发生的时间很少,但它是在计算机时间自动发生的,而不是在人工时间发生的。这样就可以在停机时间几乎为零的情况下进行升级。(如果替换模块有一个导致系统崩溃的错误,则可能会有停机时间,但这就是为什么要在部署到生产之前进行测试的原因。)

  2. 主管。Erlang的OTP库内置了一个管理框架,该框架使您可以定义模块崩溃时系统应如何应对。此处的标准操作是重新启动发生故障的模块。假设重新启动的模块不会立即再次崩溃,那么对您的系统造成的总停机时间可能只有几毫秒。在几年的运行时间中,几乎不会崩溃的可靠系统实际上可能只累积了总停机时间的几分之一秒。

  3. 流程。这些线程大致对应于其他语言的线程,除了它们不共享状态(除非通过持久数据存储)。除此之外,通信是通过消息传递进行的。因为Erlang进程非常便宜(比OS线程便宜),所以这鼓励了松散耦合的设计,因此,如果进程终止,则只有一小部分系统会停机。通常,主管重新启动该过程,对系统的其余部分几乎没有影响。

  4. 异步消息传递。当一个进程想要告诉其他事情时,可以使用Erlang语言的一流运算符来执行此操作。消息发送过程不必等待接收者处理消息,也不必协调发送数据的所有权。Erlang消息传递系统的异步功能特性可以解决所有这些问题。这有助于维持较高的正常运行时间,因为它减少了系统某一部分的停机对其他部分的影响。

  5. 聚类。这是从先前的观点得出的:Erlang的消息传递机制在网络上的机器之间透明地工作,因此发送过程甚至不必关心接收者在单独的机器上。这提供了一种简单的机制,可以在许多机器之间分配工作负载,每台机器可以单独关闭,而不会损害整个系统的正常运行时间。


14
注意您如何计算停机时间也很重要。只要ATM交换过程本身不停止,交换代码模块,重新启动失败的模块等次数都无关紧要。就像youtube一样-下载可能会暂停几秒钟-但只要您有足够的缓冲,视频仍会播放:)
NPSF3000 '02

您所写的有关Erlang的一切都是正确的;令人误解的是,整个AXD301系列产品的可用性为9个9。
Edwin Fine,

33

99.9999999%可用性数字是经常被引用但在本质上具有误导性的统计数据。AXD-301小组成员之一Mats Cronqvist 在旧金山的2010 Erlang工厂会议上做了一个演讲 (视频)(我参加了),讨论了这个精确的可用性统计信息。据他说,英国电信使用AXD-301声称它的试用期(我相信是2002年1月至2002年9月)为“ 5节点年”。到试验结束时,有14个节点进行实时流量。

Cronqvist特别指出,这并不能代表整个AXD-301的历史,也不能代表Erlang,他对Joe Armstrong继续引用此内容并不满意,从而导致对Erlang可靠性的过高期望。其他人写道,五个九是一个更现实的数字。

应该说,我是一个热心的Erlang支持者和开发人员,他相信Erlang的专家使用确实可以带来非常高可用性的系统,但只是想减少炒作。我当然认为Cronqvist对事实的表述是准确的,没有理由不这样做。


7

我对这些统计信息的理解是,它是在生产中的所有AXD301系统上计算的。我们可以预期,当AXD301出现严重问题时,它将停机0.631秒以上。在此期间,其他AXD301将接管以保持网络正常运行。

但是,将所有正在运行的AXD301的小时总数相加后,得出一台出现故障的AXD301的比率,则得出99.999999%

这就是我对这个数字的理解。

希望能有所帮助。

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.