More Related Content
running web app on elixir Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介 Similar to Elixir言語紹介 (20)
160911 handson elixir_phoenix やや関数型を意識した風Elixir/Phoenixご紹介 Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」 Elixir-Conf-Japan-2017-session-ohr486 Elixirで関数型言語の設計を学ぶ - daimon.ex 2024-09-20 Elixir とか組込みとか (On Elixir and embedded systems) Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります Exineris Project by kochi.ex Nerves!? Elixir!?? 関数型言語でれっつIoT開発!! ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク Rubyのenum系高階関数を elixirでも使いたい More from Tsunenori Oohara (11)
running-elixir-in-production Elixir言語紹介
- 2. Agenda
• 自己紹介
• Elixir概要
• 他言語との比較
• Elixirウォークスルー
• 関数型言語としてのElixir
• アクターモデル
• Elixirの計算モデル
• Elixirのアーキテクチャ
• 何故Elixirを使うのか?
- 3. 自己紹介
• おーはら
• Twitter: @ohrdev
• 所属: ドリコム
• Community: JapanElixirAssociation理事/tokyo.ex主催
• Work: ゲーム・サービス基盤、広告系サービス
• Like: 自社仏閣,仏像鑑賞,仏像制作,VR,FF14(白70),ダイエット
• LikeLang: Lisp,Erlang,Elixir,Ruby
• etc
• エンジニアHUB: Elixir入門記事
• https://employment.en-japan.com/engineerhub/entry/2017/06/12/110000
• https://employment.en-japan.com/engineerhub/entry/2017/06/19/110000
- 4. Elixir概要
• Elixirとは
• Erlang VM上で動作し、
• 耐障害性、ソフトリアルタイム、分散処理が得意な、
• メタプログラミング(マクロ)可能な、
• 軽量プロセスによるアクターモデルのパラダイムを持つ、
• 動的型付けの、
• ネットワークサーバー構築に特化した、
• 非純粋な関数型言語
• のプログラミグ言語です。
- 11. Elixirウォークスルー(N)
• その他、紹介しきれなかった特徴・機能
• メタプログラミング
• マクロ(Lispの様なAST操作、ただしS式ではなくタプルで表現)
• パターンマッチ
• 型システムは(まだ)ない
• 将来的に導入される予定
• コンパイルするとErlangVMの実行バイナリ(beam)が吐かれる
• Erlangのモジュールをシームレスに利用可能
• OTP(open telecom platform)
• Elixir/Erlangで並行プログラムを書く際に利用できるパターン・フレームワーク
• etc
- 14. Elixirの計算モデル
• 全てがErlangVM上のプロセスで表現される
• ex) iex, mix, elixir自身もErlangVM上のプロセスの集合体でしかない
• プロセスの集合=アプリ
• main関数はない、代わりにアプリ毎にマスタープロセスがある
• マスタープロセスを根とするプロセスツリーが、実際の処理を行う
Application
Master Process
Supervisor
Process
Worker
Process
子プロセスを監視
し、クラッシュし
たら再起動する
関数を引数にとり
生成され、引数の
関数処理を行う
Elixirアプリ
ケーション
- 16. 何故Elixirを使うのか?
• 解決したいリアルの課題
• 自分のバックグラウンドはウェブ屋さん
• 大量のトラフィックを「安定して」「低コストで」「メンテナブル
に」捌きたい
• サービスを止める事なくプログラムをアップグレードしたい
• Ex)
• 数千万のクライアントからのコネクションを同時に維持してpubsubする
• WebSocketのコネクションを維持したままプログラムをバージョンアップ
• 平時のトラフィックの数百倍のスパイクがきたとしても、クラッシュする事なく
レスポンスを返す
• その他たくさん
- 17. 何故Elixirを使うのか?
• ネットワークサーバーを書く為に使っている
• 耐障害性(VMが安定)
• OTPを使って並行処理が簡単に書ける
• 1TCPコネクションを1プロセスに割り当てる事が可能
• プロセスは超軽量なので大量のTCPコネクションを保持できる(ex: websocket)
• 1台のサーバーでwsで200万同時接続してpubsubした事例
• http://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
• GCはプロセス毎に走るのでstop the worldが無い
• プログラミング言語というよりサーバー記述用DSLという感覚