Date post: | 17-Jan-2017 |
Category: |
Technology |
Upload: | tsunenori-oohara |
View: | 1,150 times |
Download: | 0 times |
Hello WebApp,Hello Phoenix
2016/8/31 tokyo.ex#5 おーはら
Agenda
自己紹介|> 趣旨|> Phoenix とは ?|> web アプリとは ?|> web アプリの構造|> Phoenix の構造|> Why 軽量|> Why 高速
|> Why 安定|> 周辺ツール / 情報|> 不足しているもの|> まとめ
自己紹介• おーはら @ohrdev– 基盤技術部 @ ドリコム
• 仕事 / 技術スタック– 広告サービスのお世話– 全社基盤システムのお世話– Elixir/Erlang/Ruby/Lisp/etc…
• Elixir アプリ : 本番稼動 :2 、開発 / 検証 : 1– Elixir アプリ : 運用 1 年半 /v:1.0.0 -> 1.3.1(elixir)– Phoenix アプリ : 運用 1 年 /v:1.0.0 ->
1.2.0(phoenix)
趣旨• ターゲット– (Elixir is 何 ? な方 )– Web アプリ is 何 ? な方– Phoenix is 何 ? な方
• ゴール– Web アプリケーションの構造がわかる– Phoenix とは何なのかがわかる– Phoenix と他の Web アプリフレームワークの違いがわかる– Phoenix の周辺ライブラリ ( 何があるか ) がわかる
Phoenix とは?• Elixir で実装された• MVC パターンの• 高生産性、高パフォーマンスな• Web アプリケーションフレームワーク• リアルタイム web ( channel/websocket )を提供
この発表ではスコープ外とさせてください
Web アプリとは?• インターネット / ネットワークを介して使用するアプリケーション– ここでは web ブラウザ上で動作するとします– Ex) wiki 、 blog 、掲示板、 EC サイト、 etc– 何らかのフレームワーク / ライブラリを利用して作る事が多い
Web クライアント(Web ブラウザ )
Web サーバー
Request
Response
Web アプリとは?
Web サーバー
Web アプリ
HTTPWebSocket
etcnginxApache
h2ocowboy
etc
I/F 定義Python: WSGI
Perl: PSGIRuby: Rack
Clojure: RingLisp: clack
Haskell: WAIScala: SSGIElixir: Plug データベース
Python: DjangoPerl: CatalystRuby: Rails
Clojure: CompojureLisp: caveman2Hskell: Yesold
Scala: PlayElixir: Phoenix
DB ドライバ /ORMPython: -
Perl: -Ruby: ActiveRecordClojure: java.jdbc
Lisp: CLSQL/CL-DBIHskell: HDBCScala: SlickElixir: Ecto
Web アプリの構造Web サーバー
Controller
Router
Action
Model
Bussiness LogicDatabase
View
Template
DB driverORM
WAF I/F
Controller が Modelの情報を View にPush
MVC モデルPush 型
Phoenix の構造cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
Plug.Conn
Plug.Conn
リクエスト / コネクションを抽象化した構造体
複数の plug をパイプライン
plug:Plug.Conn を入力して Plug.Conn を出力
function(関数 )
endpoint
router/pipeline
controller
Why 軽量cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
コネクションを受ける (accept) 毎に、それを処理するErlang プロセス ( 軽量 ,OS のスレッド・プロセスではない ) が生成される
Phoenix というより、 cowboy/ranch が軽量Phoenix は cowboy/plug の薄いハンドラー + ジェネレータ
ここの処理が OS のスレッド、プロセスだとHeavy
Phoenix の構造cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
function(関数 )
View:データを html/json/etc に変換 /render するモジュールTemplate:マークアップ + 埋め込み
Elixir/ ループ /etc 、 eex
compile
データを入力してマークアップを出力
Why 高速cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
function(関数 )compile
Linked List( データ ) を使って、テンプレートをビルドする( 遅い・ボトルネックになる ) 文字列の連結は行わない
多くの WAF でテンプレートの文字列連結処理がボトルネックになる
Elixir の文字列はイミュータブルもっとも大きい文字列のコピーのみアプリ内に保持するのでキャッシュが適切に動作する
view/template
Phoenix の構造cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
Erlang VM 上で動作するモジュールという形体で提供
Why 安定cowboy
Endpoint Model
Database
View
Template
Ecto
Plug
View
Router
Controller
Pipeline
OS
ErlangVM
OTP
cowboy Ecto Phoenix plug
障害耐性
監視、再起動、 etc
並行プログラミングの為のフレームワーク / パターン
周辺ツール / 情報• モジュール / プロジェクト管理– mix
• ジェネレーター / タスク
周辺ツール / 情報• ディレクトリ構造– 指標 / レール– 基本は mix ベース– MVC 関連 : web– 静的ファイル :• Input: web/static• Output: priv• brunch.io( 等 ) を使ってアセットコンパイル(変更可能)
不足しているもの• 日本語の情報– 「プログラミング Elixir 」
不足しているもの• 日本語の情報– 「プログラミング Elixir 」 !
• モジュール、ライブラリ– http://www.modulecounts.com
不足しているもの
不足しているもの
モジュール / ライブラリ不足
モジュール / ライブラリ不足
まとめ• Web アプリケーションの構造を紹介しました• Phoenix の構造を紹介しました• Phoenix の特徴を紹介しました• 「プログラミング Elixir 」発売おめでとうございます• 「プログラミング Elixir 」を読んで、みんなでライブラリを書きましょう⭐️