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アプリ
HTTP
WebSocket
etcnginx
Apache
h2o
cowboy
etc
I/F定義
Python: WSGI
Perl: PSGI
Ruby: Rack
Clojure: Ring
Lisp: clack
Haskell: WAI
Scala: SSGI
Elixir: Plug
データベース
Python: Django
Perl: Catalyst
Ruby: Rails
Clojure: Compojure
Lisp: caveman2
Hskell: Yesold
Scala: Play
Elixir: Phoenix
DBドライバ/ORM
Python: -
Perl: -
Ruby: ActiveRecord
Clojure: java.jdbc
Lisp: CLSQL/CL-DBI
Hskell: HDBC
Scala: Slick
Elixir: Ecto
Webアプリの構造
Webサーバー
Controller
Router
Action
Model
Bussiness Logic
Database
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」を読んで、みんなでライ
ブラリを書きましょう⭐️

More Related Content

PPTX
running-elixir-in-production
PPTX
Tokyoex6 EEx
PPTX
running web app on elixir
KEY
PlayFramework1.x基礎編
PDF
Redmineでいこう
PDF
Yapc fukuoka crust
PDF
[jaws days 2014]ELB/AutoScaling
KEY
Scotty + Aeson + Persistentで作るJSON Web API
running-elixir-in-production
Tokyoex6 EEx
running web app on elixir
PlayFramework1.x基礎編
Redmineでいこう
Yapc fukuoka crust
[jaws days 2014]ELB/AutoScaling
Scotty + Aeson + Persistentで作るJSON Web API

What's hot (13)

PDF
パーフェクト"Elixir情報収集"
PDF
Cowboyとelixir
PPTX
SoftLayer API で資産管理をお手伝い!
PDF
iOSエンジニア in ハードウェア・プロジェクト
PDF
SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)
PDF
WatchKitを実際にさわってみてわかったこと
PDF
[jjug] Java と Benchmark
PDF
COOKPAD tab 勉強会 2014.04.24
PDF
いま OS X アプリがアツい
PDF
iOSエンジニアの最近 株式会社マネーフォワード
PDF
SansanのEightアプリでRealmを導入した件
PDF
iOSアプリエンジニアの最近
PDF
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
パーフェクト"Elixir情報収集"
Cowboyとelixir
SoftLayer API で資産管理をお手伝い!
iOSエンジニア in ハードウェア・プロジェクト
SoftLayerにゅうもん(2016/03/04 SoftLayer勉強会)
WatchKitを実際にさわってみてわかったこと
[jjug] Java と Benchmark
COOKPAD tab 勉強会 2014.04.24
いま OS X アプリがアツい
iOSエンジニアの最近 株式会社マネーフォワード
SansanのEightアプリでRealmを導入した件
iOSアプリエンジニアの最近
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
Ad

Viewers also liked (20)

PDF
軽量のススメ
PDF
Python札幌 2012/06/17
PPTX
Python勉強会資料(MessageBoard作成)
PDF
kay-jpmobile
PDF
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
PDF
PDF
Django最速デバッグ指南 PyConAPAC 2013
PDF
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
PPTX
Cowboyとphoenixの速度比較
PDF
Webフレームワークパネル(Django) at PyConJP 2012
PDF
Djangoフレームワークの紹介 OSC2015北海道
PPTX
Python札幌201406
PDF
Gunma.web #24 MySQL HA
POTX
素振りのススメ at Python入門者の集い
PPTX
Django learning Part2
PDF
価値を届ける技術 #bpstudy 96
PDF
ゲームインフラとGoogle Cloud Platformと酒!
PDF
Pycon2014 django performance
PDF
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
PDF
Django 1.9
軽量のススメ
Python札幌 2012/06/17
Python勉強会資料(MessageBoard作成)
kay-jpmobile
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Django最速デバッグ指南 PyConAPAC 2013
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Cowboyとphoenixの速度比較
Webフレームワークパネル(Django) at PyConJP 2012
Djangoフレームワークの紹介 OSC2015北海道
Python札幌201406
Gunma.web #24 MySQL HA
素振りのススメ at Python入門者の集い
Django learning Part2
価値を届ける技術 #bpstudy 96
ゲームインフラとGoogle Cloud Platformと酒!
Pycon2014 django performance
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
Django 1.9
Ad

Similar to hello waf, hello phoenix (8)

PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PDF
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
PDF
Elixirだ 第6回
PPTX
Elixirハンズオン2
PDF
WebAssemblyが切り拓くフロントエンドWeb開発の未来
PPTX
endeworksでのWebAppの作り方
PDF
Phoenixを使った案件でリリースまでに起きた問題と対応
PDF
20120702勉強会 webアプリ作ってみた
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixirだ 第6回
Elixirハンズオン2
WebAssemblyが切り拓くフロントエンドWeb開発の未来
endeworksでのWebAppの作り方
Phoenixを使った案件でリリースまでに起きた問題と対応
20120702勉強会 webアプリ作ってみた

More from Tsunenori Oohara (17)

PPTX
meguro.rb LT
PPTX
Elixir解答
PPTX
Elixir言語紹介
PDF
パンチラに関する考察
PPTX
how-to-learn-elixir
PPTX
Elixir-Conf-Japan-2017-session-ohr486
PPTX
Elixirハンズオン-2017-03-11
PPTX
Re:デブ デブナイト vol.2 LT
PPTX
失敗という概念が存在しない退屈なweb開発
PPTX
tokyo.ex3 LT
PPTX
Elixir lang bootstrap
PPTX
Elixirと他言語の比較的紹介 ver.2
PPTX
Elixirについて私が知ってる二、三の事柄
PPTX
elixir in production
PPTX
地獄のElixir(目黒スタートアップ勉強会)
PPTX
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
PDF
地獄Spec
meguro.rb LT
Elixir解答
Elixir言語紹介
パンチラに関する考察
how-to-learn-elixir
Elixir-Conf-Japan-2017-session-ohr486
Elixirハンズオン-2017-03-11
Re:デブ デブナイト vol.2 LT
失敗という概念が存在しない退屈なweb開発
tokyo.ex3 LT
Elixir lang bootstrap
Elixirと他言語の比較的紹介 ver.2
Elixirについて私が知ってる二、三の事柄
elixir in production
地獄のElixir(目黒スタートアップ勉強会)
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
地獄Spec

hello waf, hello phoenix