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

Nin*_*ing 93 erlang reliability uptime downtime

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

我做了以下数学计算:

20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s
Run Code Online (Sandbox Code Playgroud)

这意味着系统在20年期间只有不到一秒的停机时间.我并不想挑战这个问题的有效性,我只是好奇我们如何关闭系统(故意或偶然)只有0.631秒.任何熟悉大型软件系统的人都可以向我们解释这个吗?谢谢.


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

dar*_*s0n 79

可靠性数据不应该衡量任何部分AXD301(项目)被关闭超过20年的总时间.它表示AXD301系统提供的服务永远脱机的20年间的总时间.细微差别.正如乔阿姆斯特朗在这里所说:

AXD301已经实现了NINE 9的可靠性(是的,你读的是正确的,99.9999999%).让我们把它放在上下文中:5个9被认为是好的(5.2分钟的停机时间/年).7个人几乎无法实现......但我们做到了9个.

为什么是这样?没有共享状态,加上复杂的错误恢复模型.

如果你深入挖掘一下,在Erlang的原作者(包括案例研究AXD301)撰写的博士论文中,你读到:

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

因此,只要交换机所属的网络在没有停机的情况下运行,作者就可以说出"九个九的可靠性" AXD301(这是他曾经说过的,避免具体细节).它并不一定意味着Erlang是如此高可靠性的唯一原因.

编辑:事实上,"20年"本身似乎是一种误解.乔在同一篇文章中提到了一个20年的数字,但它实际上并没有与九个九的可靠性数字相关联,这可能来自一个更短的研究(正如其他人所提到的).

  • "是的.这是服务的正常运行时间,而不是运行它的计算机." - 说RCE (12认同)
  • 正如我在回答中所解释的,这个数字不是基于 AXD301 运行 20 年。它基于英国电信在 8 个月内进行的一次试验中的 14 个节点。这几乎不能代表整个 AXD301 系列 20 年来的操作特性(我确信它仍然是一流的,只是不是九个 9)。 (3认同)

War*_*ung 51

虽然其他人已经解决了您所询问的具体案例,但您的问题似乎是基于误解.您提出这个问题的方式让我相信您认为有一个手动过程可以让系统崩溃后再次运行,或者进行维护.

Erlang有几个功能可以消除人工作时间作为停机时间的来源:

  1. 热门代码重装.在Erlang系统中,可以轻松地为现有系统编译和加载替换模块.BEAM模拟器自动进行交换而不会明显停止任何操作.毫无疑问,这种转移发生的时间很短,但它在计算机时间内自动发生,而不是在人工时间手动发生.这使得可以进行升级,停机时间基本为零.(如果替换模块存在导致系统崩溃的错误,您可能会遇到停机时间,但这就是您在部署到生产环境之前进行测试的原因.)

  2. 主管.Erlang的OTP库内置了一个监控框架,可以让您定义系统在模块崩溃时应该如何反应.此处的标准操作是重新启动发生故障的模块.假设重新启动的模块没有立即再次崩溃,那么针对您的系统收取的总停机时间可能只有几毫秒.在几年的运行时间内,几乎不会崩溃的坚固系统确实只会累积总停机时间的一小部分.

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

  4. 异步消息传递.当一个进程想要告诉另一个进程时,Erlang语言中有一个第一类运算符可以让它做到这一点.消息发送过程不必等待接收方处理消息,也不必协调发送数据的所有权.Erlang的消息传递系统的异步功能特性可以解决所有这些问题.这有助于保持较长的正常运行时间,因为它可以降低系统某个部分的停机时间对其他部件的影响.

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

  • 记下如何计算停机时间也很重要.只要ATM交换机进程本身没有停止,交换代码模块,重启故障模块等的次数无关紧要.像youtube - 下载可以暂停几秒钟 - 但只要你有足够的缓冲区,视频仍然会播放:) (13认同)

Edw*_*ine 27

99.9999999%的可用性数据是一个经常引用但从根本上误导性的统计数据.AXD-301团队成员之一Mats Cronqvist 在旧金山举行的2010 Erlang Factory会议上做了一个演讲 (视频)(我参加了),讨论了这个精确的可用性统计数据.根据他的说法,英国电信声称使用AXD-301进行了"5节点年"试用期(我相信2002年1月至9月).在试验结束时,有14个节点承载实时流量.

Cronqvist明确指出,这并不能代表整个AXD-301的历史,也不能代表整个Erlang,而且他对Joe Armstrong不断引用这一点并不满意,导致对Erlang可靠性的过度预期.其他人写道,五个九是一个更现实的人物.

应该说我是一个狂热的Erlang支持者和开发者,他认为Erlang的专家使用确实可以导致非常高的可用系统,但只是想减少炒作.我当然认为Cronqvist对事实的陈述是准确的,并且没有理由不相信.


Ber*_*nni 5

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

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

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

希望对您有所帮助。