この記事は、fukuoka.ex Elixir/Phoenix Advent Calendar 2019 の23日目です。
つい去年まで福岡に住んでいた@zuminです。
普段は、サーバエンジニアをしています。
最近、社内で同期と、Elixir勉強会をやっています。
そんな中、Elixir書くのにErlang in Anger読んだほうがいいのでは!?となったのでここ最近は輪読会をしています。
年内は5章まで進んだので、5章までのことを書いていきます。
Elixirを書いてる人で、Erlang in Anger読んだことがない人向けに、こんなことが書いてあるよーというのを、
ふりかえりも兼ねてつらつら書いていこうと思ってます。
※注意: 用語や内容の詳細については読めばいいと思うので、こんなことが書いてあるよー、をササッと書いています。
Erlang in Anger
Erlang in Anger 日本語訳版
1章
第1章では、Erlangのコードベースについて解説されています。
最初に、OTPアプリケーションについての話があります。
その中で、プロセスツリーやスーパーバイザーの再起動戦略の種類、OTPアプリケーションの依存関係の調べ方、について解説されています。
次に、OTPリリースについての話があります。
Elixirで、2つ以上のOTPアプリケーションを含むプロジェクトはUmbrella Projectとして作りますが、Umbrella ProjectもOTPリリースです。
2章
第2章はOTPリリースのbuildについて解説されています。
mix projectでは、mix compileやmix releaseを利用することがあると思いますが、そのあたりを読み替えながら読むと読みやすいように感じました。
次に、スーパーバイザーの再起動戦略において、初期化フェーズが行われることは保証されているが、初期化フェーズにおいて、何を保証させるべきか、について解説されています。
最後に、OTPアプリケーションの起動方法の3種類について解説されています。
3章
第3章は、高負荷時の戦略について解説されています。
高負荷時の、真のボトルネックが何であるかを特定するにはどうするべきか?といった話がされています。
タイムアウトの話や、メッセージドロップ、スタック・キュー、などの話に触れているので、どの言語を利用している人でも読んでみて損はないように思いました。
あとは、Erlang & Elixir FestでたびたびLoggerの爆発についてが話題にあがりますが、そのあたりにも触れられています。
(最近、Erlang, Elixirではないですが、Logの出力方法を変えたらテスト実行時間が半減したことがあったので、Logger大事・・・。)
4章
第4章は、リモートノードへの接続について解説されています。
リモートノードへの接続方法と、どう接続するのが安全か、逆に何をやったらマズイか、な話がされています。
この章を読めば、稼働中の本番サーバの修正ができるようになりますね!!!
ElixirでもiexでRemshを利用できるので、基本的には変わらないと思います。
5章
第5章はランタイムメトリクスについて解説されています。
memory, CPU, process, portなどの情報取得についての話がされています。
memory processesとsystemを足してもtotalんいならんぞ!?!?みたいなことについても解説されているので、読んでみると面白いと思います。
さいごに
少しでも気になった人はぜひ読んでみてください!
日本語訳をしてくれた方々にとても感謝しています。ありがとうございます。
輪読会をやっていて、日本語的にどっちの意味だろう?と感じた場面では、原文を読んでみたりすると、より理解が進むように感じました。
6章以降は、輪読会が終わったときに気が向いたら書こうと思います。