案例库 · 软件与 IT · 技术决策 · 1986–2003
爱立信的Erlang交换机软件实现九个九的可靠性,秘诀是让进程崩溃
AXD301在轻量级进程上处理数百万个呼叫,这些进程可以崩溃并重启,达到了99.9999999%的可用性,同时开发者生产力提升了4倍。
爱立信
那一手
电信设备必须连续运行多年,即使升级期间也不能停止。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成为公司最成功的新产品之一,该论文将其记录为爱立信有史以来最可靠的产品之一。
资料来源
- Making Reliable Distributed Systems in the Presence of Software Errors (PhD thesis)
- A History of Erlang (HOPL III)
- A (Very) Brief History of Erlang
发现哪里写错了?告诉我们。