Erlang已有超过20年的生产系统应用历史,其可用性达到99.9999999%。
我进行了如下计算:
20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s
这意味着在20年的时间段内,该系统仅有不到一秒的停机时间。我并不试图挑战这个有效性,只是好奇我们如何能够有意或无意地将一个系统关闭仅0.631秒。熟悉大型软件系统的任何人能向我们解释一下吗?谢谢。
有人知道如何计算集群处理单元(或机器)上服务的停机时间吗?
Erlang已有超过20年的生产系统应用历史,其可用性达到99.9999999%。
我进行了如下计算:
20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s
这意味着在20年的时间段内,该系统仅有不到一秒的停机时间。我并不试图挑战这个有效性,只是好奇我们如何能够有意或无意地将一个系统关闭仅0.631秒。熟悉大型软件系统的任何人能向我们解释一下吗?谢谢。
有人知道如何计算集群处理单元(或机器)上服务的停机时间吗?
可靠性指标并不是衡量 AXD301
(所讨论的项目)任何部分在20年内关闭的总时间。它代表了在这20年中,AXD301
系统提供的服务从未离线的总时间。微妙的区别。正如 Joe Armstrong 在 这里 所说:
AXD301 实现了九个 9 的可靠性(没错,你没看错,99.9999999%)。让我们把它放在上下文中:五个 9 被认为是很好的(每年 5.2 分钟的停机时间)。七个 9 几乎是无法实现的……但我们做到了九个。
为什么呢?没有共享状态,加上一个复杂的错误恢复模型。
如果你深入挖掘一下,阅读 Joe 写的博士论文(其中包括对 AXD301
的案例研究),你会发现:
本章研究的项目之一是爱立信 AXD301,一种高性能、高可靠性的 ATM 交换机。
因此,只要交换机所在的网络没有停机,作者就可以宣称AXD301
具有“九个9的可靠性”(这是他所说的全部,避免了具体细节)。这并不一定意味着Erlang是产生如此高可靠性的唯一原因。
编辑:实际上,“20年”本身似乎是一种误解。乔在同一篇文章中提到了20年的数字,但它实际上与九个9的可靠性数字没有直接联系,后者可能来自一个更短的研究(正如其他人所提到的)。
异步消息传递。当一个进程想要告诉另一个进程一些信息时,Erlang语言中有一个一流的运算符可以让它这样做。发送消息的进程不需要等待接收方处理消息,也不必协调发送的数据的所有权。Erlang的消息传递系统采用了异步函数式的特性来解决这些问题,这有助于保持高可用性,因为它减少了系统某个部分停机对其他部分的影响。
集群。这是从前面的观点得出的结论:Erlang的消息传递机制在网络上的多台机器之间工作得很透明,因此发送进程甚至不必关心接收方是否在单独的机器上。这提供了一种简单的机制来将负载分散到许多机器上,每个机器都可以独立地关闭,而不会影响整个系统的正常运行时间。
我理解这些统计数据是针对生产中的所有AXD301系统进行计算的。我们可以预期,当AXD301出现严重问题时,它将停机超过0.631秒。在此期间,其他AXD301将接管以保持网络运行。
然而,当你将所有正在运行的AXD301的总小时数相加,并为一个失败的AXD301计算比率,你会发现99.999999%。
这就是我理解这个数字的方式。
希望这有所帮助。