@josevalim / phoenixframework - lambda days...• distributed erlang ... generators as learning...
TRANSCRIPT
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/1.jpg)
@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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/2.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/3.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/4.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/5.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/6.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/7.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/8.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/9.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/10.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/11.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/12.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/13.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/14.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/15.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/16.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/17.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/18.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/19.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/20.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/21.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/22.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/23.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/24.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/25.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/26.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/27.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/28.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/29.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/30.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/31.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/32.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/33.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/34.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/35.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/36.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/37.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/38.jpg)
![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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/39.jpg)
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…](https://reader033.vdocuments.net/reader033/viewer/2022042908/5f3997eb61201c1c0123e60e/html5/thumbnails/40.jpg)
@josevalim / phoenixframework.org