SlideShare a Scribd company logo
1 of 15
Download to read offline
Elixirを利用した繊細なWebチャットの開発
@ndruger
Tokyo.exでは以前「軽量プロセスとシューティングで戦う」
(https://www.slideshare.net/ndruger/elixirstg)という、
少しネタっぽい発表しましたが、
今回はElixirでの「安定したシステム運用」に関する正統派な話
Elixirでの安定したシステム構築をするため、
有名な本「Erlang in Anger」を読んだ。
「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
素晴らしい情報源であり、内容の理屈はわかる。
ただ、Elixirでのシステム構築・障害の経験が少ない私には、
実感が湧きにくい部分もある。
「してはいけない」と書いてあるような、
Elixir/Erlangのアンチパターンを実際やってしまうと、
どういうことが起きるんだろう?
気になりませんか?
Elixirのアンチパターンによる
システム問題を体験できるWebアプリ
「Delicate Chat」の開発。
https://github.com/ndruger/delicate_chat
Delicate Chatとは?
● Phoenixを使ったシンプルなWebチャット
● 特徴
○ サーバサイドのElixirでの実装が「Erlang In Anger」での「してはいけ
ないこと(アンチパターン)」を活用して実装されている。
○ そのアンチパターンが原因のシステム障害を体験できる。
こんな感じのUI(デモる)
Erlang VM
の情報
投稿されたメッセージ
入力欄 障害生成
ボタン
● 「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生成系ライブラリに渡す)
体験デモ1
アンチパターン2
(過負荷を考えないメッセージ管理)
● 「Erlang In Anger」から引用
○ > Chapter 3. Planning for Overload
○ > 3.2 Restricting Input
過負荷を考慮して実装するためのパターンが書いてある。つまり、アンチパターン的に
は、過負荷を考えずにメッセージを投げればいいのか。
チャットに「メッセージの暴力性の判定&暴力的ユーザーへの通知」機能を追加する。1
つのGenServerのプロセスで非同期(GenServer.cast/2)で処理を受けつけて仮想的な
重い実装(Process.sleep(5_000))で処理して、定常的に過負荷を与えてみよう。
体験デモ2
1. 問題の起きるユースケースの理解が深まる。
2. 何が起きてどのような状態になるのかがわかり、ErlangVMの
どの項目を監視しておけば早めに検出できるのかがわかる。
アンチパターンが起こす問題を体験するメリット
たまにはElixir/Erlangを使って、
不安定なWebアプリを作ってみませんか?

More Related Content

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

ニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixirニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixirkojingharang
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Shotaro Suzuki
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システムAkihiro Ikezoe
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Ryoji Kurosawa
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernelNaoya Ito
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2Takuya Nishimoto
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]DeNA
 
Secure element for IoT device
Secure element for IoT deviceSecure element for IoT device
Secure element for IoT deviceKentaro Mitsuyasu
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...オラクルエンジニア通信
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集terurou
 
Rancher.ioを試してみる
Rancher.ioを試してみるRancher.ioを試してみる
Rancher.ioを試してみるTakaaki Fukai
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchYasuhiro Murata
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Hideki Takase
 
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装Yuto Takei
 
本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」Takahiko Sato
 
どっかのしたのほう
どっかのしたのほうどっかのしたのほう
どっかのしたのほう_norin_
 

Similar to Elixirを利用した繊細なwebチャットの開発 (20)

ニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixirニコニコを支える Erlang / Elixir
ニコニコを支える Erlang / Elixir
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システム
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
 
Secure element for IoT device
Secure element for IoT deviceSecure element for IoT device
Secure element for IoT device
 
Oracle Management Cloudのご紹介
Oracle Management Cloudのご紹介Oracle Management Cloudのご紹介
Oracle Management Cloudのご紹介
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
[Modern Cloud Day Tokyo 2019] KubeConに登壇したCloud Native Labsのエンジニアが、初学者にも分かりやす...
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
Rancher.ioを試してみる
Rancher.ioを試してみるRancher.ioを試してみる
Rancher.ioを試してみる
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearch
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
 
本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」
 
どっかのしたのほう
どっかのしたのほうどっかのしたのほう
どっかのしたのほう
 

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