Elixirを利用した繊細なwebチャットの開発

625 views

Published on

Tokyo.ex #8 LT

Published in: Internet
  • Be the first to comment

Elixirを利用した繊細なwebチャットの開発

  1. 1. Elixirを利用した繊細なWebチャットの開発 @ndruger
  2. 2. Tokyo.exでは以前「軽量プロセスとシューティングで戦う」 (https://www.slideshare.net/ndruger/elixirstg)という、 少しネタっぽい発表しましたが、 今回はElixirでの「安定したシステム運用」に関する正統派な話
  3. 3. Elixirでの安定したシステム構築をするため、 有名な本「Erlang in Anger」を読んだ。
  4. 4. 「Erlang In Anger」の目次 ● I Writing Applications ○ 1 How to Dive into a Code Base ○ 2 Building Open Source Erlang Software ○ 3 Planning for Overload ● II Diagnosing Applications ○ 4 Connecting to Remote Nodes ○ 5 Runtime Metrics ○ 6 Reading Crash Dumps ○ 7 Memory Leaks ○ 8 CPU and Scheduler Hogs ○ 9 Tracing
  5. 5. 素晴らしい情報源であり、内容の理屈はわかる。 ただ、Elixirでのシステム構築・障害の経験が少ない私には、 実感が湧きにくい部分もある。
  6. 6. 「してはいけない」と書いてあるような、 Elixir/Erlangのアンチパターンを実際やってしまうと、 どういうことが起きるんだろう? 気になりませんか?
  7. 7. Elixirのアンチパターンによる システム問題を体験できるWebアプリ 「Delicate Chat」の開発。 https://github.com/ndruger/delicate_chat
  8. 8. Delicate Chatとは? ● Phoenixを使ったシンプルなWebチャット ● 特徴 ○ サーバサイドのElixirでの実装が「Erlang In Anger」での「してはいけ ないこと(アンチパターン)」を活用して実装されている。 ○ そのアンチパターンが原因のシステム障害を体験できる。
  9. 9. こんな感じのUI(デモる) Erlang VM の情報 投稿されたメッセージ 入力欄 障害生成 ボタン
  10. 10. ● 「Erlang In Anger」から引用 ○ > Don’t use dynamic atoms! ○ > If you use the xmerl library that ships with Erlang, consider open source alternatives or figuring the way to add your own SAX parser that can be safe . つまり、アンチパターン的には、xmerlを使ってそれにユーザーの入力などを渡してやれ ばいいのか。 チャットにxmlを送信すると、サーバサイドでxmerlでxmlバリデーション (:xmerl_scan.string/1で実現(!?))した結果を付加してくれる機能を追加しよう。 アンチパターン1 (ユーザー入力をAtom生成系ライブラリに渡す)
  11. 11. 体験デモ1
  12. 12. アンチパターン2 (過負荷を考えないメッセージ管理) ● 「Erlang In Anger」から引用 ○ > Chapter 3. Planning for Overload ○ > 3.2 Restricting Input 過負荷を考慮して実装するためのパターンが書いてある。つまり、アンチパターン的に は、過負荷を考えずにメッセージを投げればいいのか。 チャットに「メッセージの暴力性の判定&暴力的ユーザーへの通知」機能を追加する。1 つのGenServerのプロセスで非同期(GenServer.cast/2)で処理を受けつけて仮想的な 重い実装(Process.sleep(5_000))で処理して、定常的に過負荷を与えてみよう。
  13. 13. 体験デモ2
  14. 14. 1. 問題の起きるユースケースの理解が深まる。 2. 何が起きてどのような状態になるのかがわかり、ErlangVMの どの項目を監視しておけば早めに検出できるのかがわかる。 アンチパターンが起こす問題を体験するメリット
  15. 15. たまにはElixir/Erlangを使って、 不安定なWebアプリを作ってみませんか?

×
Save this presentationTap To Close