02_初めてのErlangサーバ開発と運用
初めてのErlangサーバ開発と運用 (mookjp)
Intro
携わってるサービス
WhyErlang
Node
- Architecture
- イベントループ
- シングルスレッド
- 問題発生時
- 予期せぬ例外で、シングルスレッドなので、プロセスレベルでダウン
- イベントループに積まれてる未処理の実行が全て破棄される
- クライアントコネクションが全て切断される
★被害範囲が大きい
Erlang
- Architecture
- メッセージパッシング
- 軽量マルチプロセス
- 問題発生時
- 軽量プロセス単位でダウン
- Supervisor-treeのStrategyに基づいてダウンしたプロセスに対して再起動などのアクションを起こす
★被害範囲が小さい
CaseStudy:Msgつまり
BatPattern
- メッセージを全体に送信
- 各プロセスで必要ないメッセージは破棄
→全プロセスに無題にメッセージパッシングされてしまう
GoodPattern
- メッセージをgpocに送信
- gprocが送信する対象プロセスをハンドリングして宛先を絞ってくれる
→無駄なメッセージパッシングが減少する
→ElixirではRegisteryが標準で搭載されている
まとめ
- Erlang in Angerを最初に読むべき →VMのメモリ確保の挙動
- 英語力が超必要
- 公式ドキュメント大事
- Erlang Slackチャネルおすすめ→すぐ回答してくれる