hello waf, hello phoenix

27
Hello WebApp, Hello Phoenix 2016/8/31 tokyo.ex#5 おお おお

Transcript of hello waf, hello phoenix

Page 1: hello waf, hello phoenix

Hello WebApp,Hello Phoenix

2016/8/31 tokyo.ex#5 おーはら

Page 2: hello waf, hello phoenix

Agenda

自己紹介|> 趣旨|> Phoenix とは ?|> web アプリとは ?|> web アプリの構造|> Phoenix の構造|> Why 軽量|> Why 高速

|> Why 安定|> 周辺ツール / 情報|> 不足しているもの|> まとめ

Page 3: hello waf, hello phoenix

自己紹介• おーはら @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)

Page 4: hello waf, hello phoenix

趣旨• ターゲット– (Elixir is 何 ? な方 )– Web アプリ is 何 ? な方– Phoenix is 何 ? な方

• ゴール– Web アプリケーションの構造がわかる– Phoenix とは何なのかがわかる– Phoenix と他の Web アプリフレームワークの違いがわかる– Phoenix の周辺ライブラリ ( 何があるか ) がわかる

Page 5: hello waf, hello phoenix

Phoenix とは?• Elixir で実装された• MVC パターンの• 高生産性、高パフォーマンスな• Web アプリケーションフレームワーク• リアルタイム web ( channel/websocket )を提供

この発表ではスコープ外とさせてください

Page 6: hello waf, hello phoenix

Web アプリとは?• インターネット / ネットワークを介して使用するアプリケーション– ここでは web ブラウザ上で動作するとします– Ex) wiki 、 blog 、掲示板、 EC サイト、 etc– 何らかのフレームワーク / ライブラリを利用して作る事が多い

Web クライアント(Web ブラウザ )

Web サーバー

Request

Response

Page 7: hello waf, hello phoenix

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

Page 8: hello waf, hello phoenix

Web アプリの構造Web サーバー

Controller

Router

Action

Model

Bussiness LogicDatabase

View

Template

DB driverORM

WAF I/F

Controller が Modelの情報を View にPush

MVC モデルPush 型

Page 9: hello waf, hello phoenix

Phoenix の構造cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

Plug.Conn

Plug.Conn

リクエスト / コネクションを抽象化した構造体

複数の plug をパイプライン

plug:Plug.Conn を入力して Plug.Conn を出力

function(関数 )

Page 10: hello waf, hello phoenix

endpoint

Page 11: hello waf, hello phoenix

router/pipeline

Page 12: hello waf, hello phoenix

controller

Page 13: hello waf, hello phoenix

Why 軽量cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

コネクションを受ける (accept) 毎に、それを処理するErlang プロセス ( 軽量 ,OS のスレッド・プロセスではない ) が生成される

Phoenix というより、 cowboy/ranch が軽量Phoenix は cowboy/plug の薄いハンドラー + ジェネレータ

ここの処理が OS のスレッド、プロセスだとHeavy

Page 14: hello waf, hello phoenix

Phoenix の構造cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

function(関数 )

View:データを html/json/etc に変換 /render するモジュールTemplate:マークアップ + 埋め込み

Elixir/ ループ /etc 、 eex

compile

データを入力してマークアップを出力

Page 15: hello waf, hello phoenix

Why 高速cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

function(関数 )compile

Linked List( データ ) を使って、テンプレートをビルドする( 遅い・ボトルネックになる ) 文字列の連結は行わない

多くの WAF でテンプレートの文字列連結処理がボトルネックになる

Elixir の文字列はイミュータブルもっとも大きい文字列のコピーのみアプリ内に保持するのでキャッシュが適切に動作する

Page 16: hello waf, hello phoenix

view/template

Page 17: hello waf, hello phoenix

Phoenix の構造cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

Erlang VM 上で動作するモジュールという形体で提供

Page 18: hello waf, hello phoenix

Why 安定cowboy

Endpoint Model

Database

View

Template

Ecto

Plug

View

Router

Controller

Pipeline

OS

ErlangVM

OTP

cowboy Ecto Phoenix plug

障害耐性

監視、再起動、 etc

並行プログラミングの為のフレームワーク / パターン

Page 19: hello waf, hello phoenix

周辺ツール / 情報• モジュール / プロジェクト管理– mix

• ジェネレーター / タスク

Page 20: hello waf, hello phoenix

周辺ツール / 情報• ディレクトリ構造– 指標 / レール– 基本は mix ベース– MVC 関連 : web– 静的ファイル :• Input: web/static• Output: priv• brunch.io( 等 ) を使ってアセットコンパイル(変更可能)

Page 21: hello waf, hello phoenix

不足しているもの• 日本語の情報– 「プログラミング Elixir 」

Page 22: hello waf, hello phoenix

不足しているもの• 日本語の情報– 「プログラミング Elixir 」 !

• モジュール、ライブラリ– http://www.modulecounts.com

Page 23: hello waf, hello phoenix

不足しているもの

Page 24: hello waf, hello phoenix

不足しているもの

Page 25: hello waf, hello phoenix

モジュール / ライブラリ不足

Page 26: hello waf, hello phoenix

モジュール / ライブラリ不足

Page 27: hello waf, hello phoenix

まとめ• Web アプリケーションの構造を紹介しました• Phoenix の構造を紹介しました• Phoenix の特徴を紹介しました• 「プログラミング Elixir 」発売おめでとうございます• 「プログラミング Elixir 」を読んで、みんなでライブラリを書きましょう⭐️