Elixir を支える技術 -「落ちない」システムの秘密に迫る accepted

Abstract

Elixir というプログラミング言語をご存知でしょうか?

Ruby に似たモダンなシンタックスをもつ言語であり、Erlang という言語にコンパイルされて、Erlang VM の上で実行されます。

Erlang には 20 年以上の長い歴史があり、古くは電話交換機から、インターネットの膨大なトラフィックをさばくスイッチ、数億人規模のメッセージングアプリなどで採用されています。最近では、Nintendo Switch 向けのプッシュ通知システムに採用されたことでも話題になりました。

採用されている事例からも分かりますが、大量のアクセスをさばく必要があり、高可用性と耐障害性が求められるシステムにうってつけの言語です。Elixir (Erlang) で書かれたシステムは「落ちない」とまで言われるほどです。

では、Elixir (Erlang) の高可用性と耐障害性は、どのような技術によって実現されているのでしょうか?

また、同じく Web 業界で採用されることの多い、Go や Java の利用者にとっては、Elixir (Erlang) の「何が違うのか」が気になるところだと思います。

このセッションでは、「落ちない」システムの秘密に迫るため、Erlang のバーチャル・マシンとランタイムについて、他言語との比較も交えながら紹介していきます。

取り上げるトピックは以下のふたつです。

1. 軽量プロセスとスケジューラー

Erlang プログラムは、いくつも「プロセス」から構成されています。
OS のプロセスとは異なり、Erlang の「プロセス」は非常に軽量で、数十、数千、さらには数十万もの Erlang プロセスが動いていることさえあります。

このトピックでは、概念的な話 (Actor / CSP / Thread の違い) に軽く触れたあとで、Erlang での具体的な実装に入っていきます。

Erlang プロセスのメモリ・レイアウトと管理、プロセスの実行を制御するプリエンプティブなスケジューラーとその進化、メッセージ・パッシング、なぜ排他制御が不要なのか、などをお話しします。

2. コンパイラ技術によるパフォーマンス改善

他言語の利用者で、Elixir (Erlang) の採用を検討している人たちにとっては、パフォーマンスは気になるところでしょう。

最近まで Elixir (Erlang) は「スケールするが、単一プロセスでの計算処理は比較的遅い」というのが定評でしたが、徐々に状況は変わりつつあります。

JVM や V8 JavaScript Engine の例を出すまでもなく、最新のコンパイラ技術によって、多くのプログラミング言語が著しい高速化を実現しています。

Erlang においても、JIT を導入するプロジェクトからはじまり、コンパイラによる最適化、インタプリタの書き直しによる大幅な改良、中間表現に SSA を導入したことによって実現した新しい最適化、など最近のリリースで力の入っているパフォーマンス改善についてお話しします。

受講対象者 / Intended Audience:

  • Elixir や Erlang が気になっているが、具体的な技術の詳細について知りたい方
  • Elixir を業務や趣味で使っているが、Erlang/OTP や BEAM VM についてはあまり知らなかった方
  • Erlang のコンパイラや JIT の動向について興味がある方
  • プログラミング言語のランタイムと実装に興味がある方

Video
Session Information
Confirmed confirmed
Starts On 8/31/19, 11:30 AM
Room Seminar Room 1205
Session Duration 20 min session
Spoken Language Japanese
Interpretation Unavailable
Slide Language Japanese