kaosf / 20150830-tokushimarb-slide

http://kaosf.github.io/20150830-tokushimarb-slide

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

% ElixirとPhoenixの紹介 % ka (kaosfield) % 2015-08-30

ElixirとPhoenix

Elixir

Erlang VMをRuby風の文法の言語で扱える

関数型の潮流を大きく汲んでいる

少数のデータ型と多数の関数

不変性・参照透過性

Phoenix

Elixir on Rails

Web Application Framework

Version 1.0.0が一昨日出た

Erlang

Actorモデルを採用したVM上で動作するプログラムを記述する言語

Let it crashの**

正常系(とビジネスロジックでの例外)だけ考えればいい

外部やDBとの通信エラー時のリトライ等の戦略はSupervisorに任せる

昨今のWEB Applicationの要件

ViewはJSON APIを用意してもらってフロントエンドが勝手にやる

HTML, CSS, JavaScriptは静的なコンテンツを素早く返す(動的にHTMLをリクエスト毎に生成するのは辛い)

サーバサイドはJSON吐き出し飲み込みする機械に特化する

JSON APIへのリクエストの頻度が高い

リアルタイム通信(HTTP2, WebSocket, WebRTC)も必要

その目的にElixir/Phoenixが特化してます

採用事例

<iframe src="//www.slideshare.net/slideshow/embed_code/key/EmUX8O7KV4448z" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>

Erlang VMの性能

Whatsapp1は何億人ものユーザーを抱えています。他の大半のプラットフォームでは1万以上の同時コネクションを1台のマシンで処理するのはチャレンジングだと見られていますが、Whatsappは1サーバーあたり2百万の同時コネクションをこなしています。2百万コネクションをErlangが走る1台のサーバーで。

[翻訳] Elixir - 次に来る大物Web言語 - Qiita

パフォーマンス

Elixir/cowboyとRailsのサーバーベンチマーク比較 - Qiita

引用:

Rails Elixir
(Failedが出ない)最大同時接続数 510 4900
最大同時接続時のRequest/Sec 722 4175
最大同時接続時のTime/Req(1リクエストあたり) 1.38ms 0.37ms

パフォーマンス

mroth/phoenix-showdown

via. Phoenix Framework - Channel 日本語翻訳 - Qiita

引用:

Framework Throughput (req/s) Latency (ms) Consistency (σ ms)
Phoenix 43063.45 2.82 7.46
Sinatra 9182.86 6.55 3.03
Rails 3274.81 17.25 6.88

リアルタイム通信

Phoenix Framework - Channel 日本語翻訳 - Qiita

次の10年のためにElixirをハックする - SSSSLIDE

参考資料

Shibuya.ex #1 のメモ - Time's up, let's do this!

Shibuya.exでのスライドまとめになっている

ここから少しElixirのRubyとは毛色の違う文法紹介

パターンマッチ

x = 1
1 = x # OK
x = 1
2 = x # ここでエラー(MatchError)になる

代入をしていると考えるのではなく1にxを束縛していると考えると分かりやすいかも

パターンマッチ

f = fn
  0, 0, _ -> "FizzBuzz"
  0, _, _ -> "Fizz"
  _, 0, _ -> "Buzz"
  _, _, n -> n
end

f.(0, 0, 1) #=> "FizzBuzz"
f.(0, 1, 1) #=> "Fizz"
f.(1, 0, 1) #=> "Buzz"
f.(1, 1, 2) #=> 2

パイプライン演算子

List.flatten [1, [2], 3] #=> [1, 2, 3]
Enum.map [1, 2, 3], &(&1 * 2) #=> [2, 4, 6]

[1, [2], 3] |> List.flatten |> Enum.map(&(&1 * 2)) #=> [2, 4, 6]

引用元: Elixir - パイプライン演算子のはなし - Qiita

インスパイア元はF#

Clojureの->マクロに似ている

おわり

About

http://kaosf.github.io/20150830-tokushimarb-slide


Languages

Language:HTML 100.0%