Web client
Tanx Phoenix app
Javascript
HTTP/
websocket
Slide 7
Slide 7 text
Web client
Tanx Phoenix app
Game
Server
Javascript
HTTP/
websocket
Slide 8
Slide 8 text
Web client
Tanx Phoenix app
Game
Server
Game
Updater
Javascript
HTTP/
websocket
Slide 9
Slide 9 text
Web client
Tanx Phoenix app
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
Slide 10
Slide 10 text
Web client
Tanx Phoenix app
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
Javascript
Slide 11
Slide 11 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
Javascript
Slide 12
Slide 12 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
Load Balancer
Javascript
Slide 13
Slide 13 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Load Balancer
Javascript
Slide 14
Slide 14 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Load Balancer
Javascript
Slide 15
Slide 15 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Load Balancer
Javascript
Slide 16
Slide 16 text
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Load Balancer
Javascript
Slide 17
Slide 17 text
Deployment
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Docker Container
Javascript
Slide 20
Slide 20 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Docker Container
Updated Container
Javascript
Slide 21
Slide 21 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Docker Container
Updated Container
Javascript
Slide 22
Slide 22 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
HTTP/
websocket
messages
Docker Container
Updated Container
Javascript
Slide 23
Slide 23 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Docker Container
Updated Container
Slide 24
Slide 24 text
Containers
vs
OTP
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
I want to
terminate
containers!
I want
long-running
GenServers!
Slide 29
Slide 29 text
I want to host
in the cloud!
I want total
control of
resources!
Slide 30
Slide 30 text
?
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
☺ Familiar
Slide 34
Slide 34 text
☺ Familiar
Isolating
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
Phoenix == Rails??
Slide 37
Slide 37 text
No content
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
https://www.flickr.com/photos/bcgrote/2884221396
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Slide 42
Slide 42 text
Problem 1:
Maintaining an Erlang Cluster
Slide 43
Slide 43 text
https://github.com/bitwalker/libcluster
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
Problem 2:
Handling node shutdown
Slide 46
Slide 46 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Slide 47
Slide 47 text
Channels
Slide 48
Slide 48 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Slide 49
Slide 49 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
❗
Slide 50
Slide 50 text
Load Balancer
Web client
Tanx Phoenix app
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
Node 2 Node 1
Slide 51
Slide 51 text
Load Balancer
Web client
Tanx Phoenix app
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
Node 2 Node 1
Slide 52
Slide 52 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Slide 53
Slide 53 text
GenServers
Slide 54
Slide 54 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Slide 55
Slide 55 text
Load Balancer
Web client
Tanx Phoenix app
Channel
Game
Server
Game
Updater
Game Supervisor
Javascript
HTTP/
websocket
messages
Node 2 Node 1
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Tanx Phoenix app
Slide 61
Slide 61 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Tanx Phoenix app
Slide 62
Slide 62 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Game
Server
Game
Updater
Game Supervisor
Tanx Phoenix app
Slide 63
Slide 63 text
Problem 3:
Preserving process state
Slide 64
Slide 64 text
“Distributed” Agent
Slide 65
Slide 65 text
“Distributed” Agent
== CRDT
Slide 66
Slide 66 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Tanx Phoenix app
Slide 67
Slide 67 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Tanx Phoenix app
Slide 68
Slide 68 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Tanx Phoenix app
Slide 69
Slide 69 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Tanx Phoenix app
SIGTERM
Slide 70
Slide 70 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Tanx Phoenix app
SIGTERM
Slide 71
Slide 71 text
Node 1
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Node 2
Game
Server
Game
Updater
Game Supervisor
Horde
Supervisor
Tanx Phoenix app
Slide 72
Slide 72 text
Node 1
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Node 2
Game
Server
Game
Updater
Game Supervisor
Horde
Supervisor
Game
Server
Game
Updater
Game Supervisor
Tanx Phoenix app
Slide 73
Slide 73 text
Node 1
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Node 2
Game
Server
Game
Updater
Game Supervisor
Horde
Supervisor
Game
Server
Game
Updater
Game Supervisor
Tanx Phoenix app
Slide 74
Slide 74 text
Problem 4:
Preserving communication
Slide 75
Slide 75 text
“Distributed” Registry
Slide 76
Slide 76 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Channel
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Slide 77
Slide 77 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Channel
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Horde
Registry
Handoff
CRDT
Horde
Registry
Slide 78
Slide 78 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Channel
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Horde
Registry
Handoff
CRDT
Horde
Registry
register
Slide 79
Slide 79 text
Node 2
Game
Server
Game
Updater
Game Supervisor
Channel
Node 1
Horde
Supervisor
Horde
Supervisor
Handoff
CRDT
Horde
Registry
Handoff
CRDT
Horde
Registry
m
essages
Slide 80
Slide 80 text
Node 1
Horde
Supervisor
Handoff
CRDT
Handoff
CRDT
Node 2
Game
Server
Game
Updater
Game Supervisor
Horde
Supervisor
Game
Server
Game
Updater
Game Supervisor
Tanx Phoenix app
Channel
Horde
Registry
Horde
Registry
reregister
Slide 81
Slide 81 text
Connect Erlang cluster —
Move/restart processes —
Hand off process state —
Maintain communication —
LibCluster
Horde Supervisor
CRDT
Horde Registry