电信设备必须连续运行多年,即使升级期间也不能停止。1986年,乔·阿姆斯特朗和爱立信的同事开始为这样的世界构建一门语言:Erlang,它采用轻量级进程、消息传递和热代码替换,而不是共享内存和线程。

最典型的证明是AXD301 ATM交换机,于1998年发布。它在双冗余硬件上运行分布式Erlang,可从10 Gbit/s扩展到160 Gbit/s,并且设计上允许在不中断流量的情况下更换硬件和软件。截至2001年,它拥有2,248个模块,共113万行Erlang代码,并实现了观测到的九个九的可靠性,即99.9999999%。

Erlang的“让它崩溃”理念以及监督树自动重启失败进程的设计,也带来了生产力上的提升:HOPL历史报告称,该项目开发者的生产力提高了四倍。就在AXD301发布的那一年,爱立信禁止在内部新产品中使用Erlang;但在1998年12月,它作为开源软件发布。

让小进程崩溃;由监督者重启它们

进程隔离防止一个故障拖垮整个系统

监督者自动重启失败的进程,无需人工干预

热代码升级消除了停机带来的部署限制

小进程模型能低成本处理数千个并发呼叫

对于必须永不停止的系统,反其道而行之:预期故障,将故障隔离在小进程中,并让恢复自动化,这样系统设计的核心就是生存而非完美。

1998年开源Erlang使其超越爱立信广泛传播:同样的模型现在运行着RabbitMQ、Meta的WhatsApp以及Elixir/Discord系统。在爱立信内部,AXD301成为公司最成功的新产品之一,该论文将其记录为爱立信有史以来最可靠的产品之一。

从这里,追溯依据

参考来源

  1. Making Reliable Distributed Systems in the Presence of Software Errors (PhD thesis) erlang.org
  2. A History of Erlang (HOPL III) labouseur.com
  3. A (Very) Brief History of Erlang developer.vonage.com