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

时间:2011-12-08 06:06:52

标签: erlang reliability uptime downtime

据报道,

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

我做了以下数学计算:

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

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


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

4 个答案:

答案 0 :(得分:79)

可靠性数据不应该衡量AXD301(有问题的项目)的任何部分被关闭超过20年的总时间。它表示AXD301系统提供的服务永远脱机的20年间的总时间。细微差别。正如Joe Armstrong所说here

  

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

     

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

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

  

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

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

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

答案 1 :(得分:49)

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

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

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

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

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

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

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

答案 2 :(得分:25)

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

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

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

答案 3 :(得分:5)

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

但是,当你计算所有运行的AXD301的总小时数时,为一个失败的AXD301做一个比例,你会找到99.999999%

这就是我理解这个数字的方式。

希望得到这个帮助。