解決策
通信機器は、アップグレード中であっても、何年も停止せずに稼働し続けなければならない。1986年、エリクソンのJoe Armstrongと同僚たちは、そのような世界のための言語、Erlangの構築を始めた。共有メモリやスレッドの代わりに、軽量プロセス、メッセージパッシング、ホットコード置換を備えていた。
その代表的な証明となったのが、1998年に発表されたAXD301 ATMスイッチである。これは複製されたハードウェア上で分散Erlangを実行し、10〜160 Gbit/sまでスケールし、トラフィックを中断せずにハードウェアとソフトウェアを変更できるように設計されている。2001年時点で、2,248モジュールに113万行のErlangコードを抱え、観測されたナイン・ナインの信頼性、99.9999999%を達成した。
Erlangの「クラッシュさせよ」という哲学、すなわち失敗したプロセスを再起動するスーパーバイザーツリーは、生産性の面でも成果を上げた。HOPLの歴史記録は、このプロジェクトで開発者の生産性が4倍に向上したと報告している。AXD301が発売された同じ年、Erlangはエリクソンの新製品での使用を禁止された。そして1998年12月、代わりにオープンソースとして公開された。
達成したこと
小さなプロセスをクラッシュさせ、スーパーバイザーがそれを再起動する
うまくいった理由
プロセスの分離により、1つの障害がシステム全体を停止させない
スーパーバイザーが障害を自動的に再起動し、人手を介さない
ホットコードアップグレードにより、ダウンタイムがデプロイ上の制約から外れる
小さなプロセスのモデルは、数千の同時通話を低コストで処理するのに適している
応用できること
決して停止してはならないシステムでは、エラー戦略を逆転させるべきである。失敗を想定し、それを小さなプロセスに隔離し、復旧を自動化する。そうすることで、システムは完璧であるためではなく、生き残るために構築される。
その後
1998年にErlangをオープンソース化したことで、それはエリクソンの枠をはるかに超えて広まった。同じモデルは現在、RabbitMQ、MetaのWhatsApp、Elixir/Discordのシステムを動かしている。エリクソン内部では、AXD301は同社で最も成功した新製品の1つとなり、論文はそれをエリクソンがこれまでに作った中で最も信頼性の高い製品の1つとして記録した。
出典をたどる
出典
- Making Reliable Distributed Systems in the Presence of Software Errors (PhD thesis) Royal Institute of Technology, via erlang.org · erlang.org
- A History of Erlang (HOPL III) ACM SIGPLAN, mirror at labouseur.com · labouseur.com
- A (Very) Brief History of Erlang Vonage Developer Blog · developer.vonage.com ·