40
@josevalim / phoenixframework.org

@josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

@josevalim / phoenixframework.org

Page 2: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Glossary

• Phoenix (web framework) • Elixir (programming language) • Erlang VM

Page 3: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/

2 million connections on a single node

Page 4: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Intel Xeon CPU X5675 @ 3.07GHz 24 CPU - 96GB Using 40% of CPU and Memory

Page 5: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 6: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Phoenix Channels

Page 7: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

var socket = new Phoenix.Socket("/ws"); socket.connect();

var channel = socket.channel(“chat:lobby");

channel.on("user_joined", function(message){ // ... });

channel.on("new_message", function(msg){ // ... });

$input.on("enter", function(e){ channel.push("new_message", { content: $input.val(), username: App.username }); });

channel.join();

Page 8: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

defmodule Chat.UserSocket do use Phoenix.Socket

channel "chat:lobby", Chat.LobbyChannel channel "room:*", Chat.RoomChannel

# def connect(params, socket) # def id(socket) end

Page 9: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

defmodule Chat.LobbyChannel do use Phoenix.Channel

def join("chat:lobby", message, socket) do broadcast! socket, “user_joined”, %{username: message[“username"]} {:ok, socket} end

def handle_in("new_message", message, socket) do broadcast socket, "new_message", %{content: message["content"], username: messages[“username"]} socket end end

Page 10: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Server

Browser

Native Mobile

Embedded Device

“Browser" (IE)

Outside viewServer

Page 11: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Inside view

Client Server

Transport socket.connect()

Channels socket.join(channel)

Pubsub

• Distributed Erlang • Redis • PostgreSQL? • XMPP?

• Isolated • Concurrent

Page 12: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

phoenixframework.org

Page 13: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 14: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Performance

Page 15: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Channels Performance

Page 16: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Subscribers per second

Time (s)

Clients

Page 17: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

htop

Page 18: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

HTTP(S) Performance

Page 19: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Library Throughput (req/s) Latency (ms)

Plug (elixir) 198 328 0.63

Phoenix (elixir) 179 685 0.61

Gin (go) 176 156 0.65

Play (scala) 171 236 1.89

Express Cluster (node) 92 064 1.24

Martini (go) 32 077 3.35

Sinatra (ruby) 30 561 3.50

Rails (ruby) 11 903 8.50

$ wrk -t20 -c100 -d30S --timeout 2000 https://github.com/mroth/phoenix-showdown

Page 20: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Inside view

Client Server

• Isolated • Concurrent

/users

/users

/

/admin

/search?q=elixir

Page 21: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Isolated and Concurrent

• Crashes are isolated • Data is isolated

(GC is per process, no global pauses) • Load balances on IO and CPU

(efficient on multicore)

Page 22: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Productivity

Page 23: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Productivity• Short-term productivity

• Documentation / Guides • Workflows / Generators

• Long-term productivity • Introspection • Maintainability

Page 24: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 25: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 26: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Model / View / Controller

Controller

ViewModel

Queries

Struct

Changesets

conn

Repo Mail

2 3

1

Page 27: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Generators as learning tools

$ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel

Page 28: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

More…• Form builders • Static build tools with ES6 as default • Live reloading • Pretty error pages • First-class concurrent test tools • Packages via hex.pm

Page 29: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Long term productivity: Applications

Page 30: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Application

Pubsub

Super visor

TCP

Client

Page 31: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Applications• Package and run our code • Can be started and stopped as a unit • Provide unified configuration • Hold processes and state in the

supervision tree

Page 32: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Observer Demo

Page 33: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Applications

• Introspection & Monitoring • Visibility of the application state • Easy to break into "components" • Reasoning when things go wrong

Page 34: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

Summing up

Page 35: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

phoenixframework.org

Page 36: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 37: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

elixir-lang.org

Page 38: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…
Page 39: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

consulting and software engineering

Page 40: @josevalim / phoenixframework - Lambda Days...• Distributed Erlang ... Generators as learning tools $ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel. More…

@josevalim / phoenixframework.org