Phoenix Framework
-
Upload
pivorak-meetup -
Category
Software
-
view
354 -
download
0
Transcript of Phoenix Framework
![Page 1: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/1.jpg)
@josevalim / phoenixframework.org
![Page 2: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/2.jpg)
Glossary
• Phoenix (web framework) • Elixir (programming language) • Erlang VM
![Page 3: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/3.jpg)
![Page 4: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/4.jpg)
http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/
2 million connections on a single node
![Page 5: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/5.jpg)
Intel Xeon CPU X5675 @ 3.07GHz 24 CPU - 96GB Using 40% of CPU and Memory
![Page 6: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/6.jpg)
Phoenix Channels
![Page 7: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/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: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/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: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/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: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/10.jpg)
Server
Browser
Native Mobile
Embedded Device
“Browser" (IE)
Outside viewServer
![Page 11: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/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: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/12.jpg)
Subscribers per second
Time (s)
Clients
![Page 13: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/13.jpg)
htop
![Page 14: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/14.jpg)
phoenixframework.org
![Page 15: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/15.jpg)
![Page 16: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/16.jpg)
Performance
![Page 17: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/17.jpg)
HTTP(S) Performance
![Page 18: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/18.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 19: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/19.jpg)
Inside view
Client Server
• Isolated • Concurrent
/users
/users
/
/admin
/search?q=elixir
![Page 20: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/20.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 21: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/21.jpg)
Productivity
![Page 22: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/22.jpg)
Productivity• Short-term productivity
• Documentation / Guides • Workflows / Generators
• Long-term productivity • Introspection • Maintainability
![Page 23: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/23.jpg)
![Page 24: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/24.jpg)
![Page 25: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/25.jpg)
Generators as learning tools
$ mix phoenix.gen.html $ mix phoenix.gen.json $ mix phoenix.gen.channel
![Page 26: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/26.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 27: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/27.jpg)
Long term productivity: Applications
![Page 28: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/28.jpg)
Application
Pubsub
Super visor
TCP
Client
![Page 29: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/29.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 30: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/30.jpg)
Observer Demo
![Page 31: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/31.jpg)
Applications
• Introspection & Monitoring • Visibility of the application state • Easy to break into "components" • Reasoning when things go wrong
![Page 32: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/32.jpg)
Summing up
![Page 33: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/33.jpg)
phoenixframework.org
![Page 34: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/34.jpg)
![Page 35: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/35.jpg)
elixir-lang.org
![Page 36: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/36.jpg)
![Page 37: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/37.jpg)
consulting and software engineering
![Page 38: Phoenix Framework](https://reader031.fdocuments.us/reader031/viewer/2022030313/58a465e61a28abb8288b606f/html5/thumbnails/38.jpg)
@josevalim / phoenixframework.org