BEAM仮想マシンにおけるわずか15ミリ秒の停止が、Klarnaのような企業にとって数百万件のピーク時決済を滞らせ、重大な事後分析を必要とする事態を引き起こす可能性があります。このような本番環境における重要なボトルネックに対処するため、Erik Stenman博士は、エンジニアがErlangおよびElixirランタイムの基礎となるメカニズムを理解するのを支援する包括的なガイド『The BEAM Book』を公開しました。

タイトルとErlangランタイムシステムに関するサブタイトルが表示された『The BEAM Book』の表紙
Erlangランタイムシステム(ERTS)の包括的なガイド『The BEAM Book』の表紙。www.amazon.com

この画像は、記事の主な主題である新しく公開された技術マニュアルを特定するものです。

動機と開発の歴史

このプロジェクトは2012年10月に単一のDocBookファイルとして始まり、10年間にわたる反復的な書き換えと構造的変更を経てきました。著者は、O’ReillyやPragmatic Bookshelfとの2つの出版契約の中止を含む大きな障害に直面し、その結果、6,622ファイルのリポジトリと100万行を超えるテキストへと発展しました。

並べて展示された『The BEAM Book』の物理的なコピー2冊
10年間の開発と複数の出版の難関を乗り越えて完成した書籍の物理的なコピー。happihacking.com

この視覚情報は、本の長い開発の歴史と最終的なリリースという物語を裏付けるものです。

The BEAM Bookの開発履歴: 2012年10月12日 単一のDocBookファイルでプロジェクトを開始; 2013 O’Reilly社に出版を確約; 2015年3月10日 章をセクションに分割; 2017年1月20日 すべてを新しいリポジトリにインポート; 2017年3月23日 Asciidoctorで新規に開始; 2017年4月7日 リポジトリを公開
The BEAM Bookの開発履歴happihacking.com

HN Digestによる図表(happihacking.comの報告数値に基づく。数値はソースの通り)。

2017年、プロジェクトはCreative Commons BY-4.0ライセンスの下で公開のGitHubリポジトリに移されました。この移行により、コミュニティによる修正や図解の寄与が可能になり、プロジェクトはBEAMランタイムの決定的なリファレンスとしての現在の状態に到達しました。

プロジェクトが3,000スターを超えたことを示すGitHubのスター数マイルストーンのグラフィック
GitHubでのプロジェクトのコミュニティによるサポートを祝うマイルストーンのグラフィック。happihacking.com

この画像は、GitHubへの移行以降のプロジェクトのコミュニティの関与と成長を例証するものです。

「次世代のエンジニアが、コーヒーが冷める前にその停止問題を解決できるように、『The BEAM Book』を書きました。」

— Why I Wrote the BEAM Book

主要な技術的範囲

本書は、BEAM VMがどのようにコードを実行し、最適化するかのメカニズムに焦点を当てています。システムが高負荷の下でどのようにプロセスをスケジューリングし優先順位を付けるか、またプロセスのヒープ、スタック、バイナリがメモリ内でどのように管理されるかを網羅しています。

具体的な技術的深掘りには、整数や浮動小数点数などのデータ型のタグ付けスキームや、プロセスごとおよびグローバルなガベージコレクタの動作が含まれます。また、コンパイラがどのようにコードを命令に変換し、エミュレータがそれらの命令をどのように実行するかも解説されています。

実用的な応用と範囲

大規模なErlangまたはElixirシステムを運用するエンジニア向けに設計された本書は、本番環境での障害発生時に「なぜVMがこのように動作するのか」という問いに答えるためのマニュアルとして機能します。ボトルネックを特定し、現実のレイテンシを追跡するための「erlang:trace」のようなツールの使用に関する実用的なガイダンスも含まれています。

焦点を維持するため、著者は意図的にJITコンパイラやdirty schedulerなどの特定の複雑なトピックをコアテキストから除外しました。この範囲設定により、本書はErlangランタイムシステム(ERTS)を支える基礎的なサブシステムに特化したリファレンスであり続けることができます。