Slide 1

Slide 1 text

Stateful Apps with OTP Maciej Kaszubowski

Slide 2

Slide 2 text

Realtime Apps with OTP Maciej Kaszubowski

Slide 3

Slide 3 text

Background

Slide 4

Slide 4 text

Http Server Client

Slide 5

Slide 5 text

Architecture Server Mobile Mobile Kurento Mobile Websocket Websocket & REST WebRTC

Slide 6

Slide 6 text

Challenges

Slide 7

Slide 7 text

Async communication with Kurento

Slide 8

Slide 8 text

Async communication with Clients

Slide 9

Slide 9 text

Handling Concurrent Calls

Slide 10

Slide 10 text

Deploys, migrations & Restarts

Slide 11

Slide 11 text

A lot can go wrong

Slide 12

Slide 12 text

A lot can go wrong & Errors are dangerous

Slide 13

Slide 13 text

How to deal with this?

Slide 14

Slide 14 text

init callback

Slide 15

Slide 15 text

init callback

Slide 16

Slide 16 text

init callback

Slide 17

Slide 17 text

init callback

Slide 18

Slide 18 text

init callback

Slide 19

Slide 19 text

init callback

Slide 20

Slide 20 text

Dealing with failures

Slide 21

Slide 21 text

RoomServer

Slide 22

Slide 22 text

RoomServer

Slide 23

Slide 23 text

Let it FAIL

Slide 24

Slide 24 text

Room Supervisor RoomServer

Slide 25

Slide 25 text

Room Supervisor RoomServer

Slide 26

Slide 26 text

Room Supervisor RoomServer

Slide 27

Slide 27 text

After the restart, the state is gone

Slide 28

Slide 28 text

Room Supervisor BackupServer RoomServer

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Room Supervisor BackupServer RoomServer

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Multiple calls

Slide 34

Slide 34 text

Room Supervisor BackupServer RoomServer

Slide 35

Slide 35 text

Common Room Supervisor Room Supervisor Backup Server Room Server Room Supervisor Backup Server Room Server

Slide 36

Slide 36 text

Common Room Supervisor Room Supervisor Backup Server Room Server Room Supervisor Backup Server Room Server

Slide 37

Slide 37 text

Common Room Supervisor Room Supervisor Backup Server Room Server Room Supervisor Backup Server Room Server

Slide 38

Slide 38 text

Common Room Supervisor Room Supervisor Backup Server Room Server

Slide 39

Slide 39 text

PubSub

Slide 40

Slide 40 text

Status Updates Server Mobile Join Mobile Room status

Slide 41

Slide 41 text

MyApp.Endpoint.broadcast( “room_id”, “update_status”, status )

Slide 42

Slide 42 text

apps/ | |—— domain/ |—— web/

Slide 43

Slide 43 text

Status Updates Server Mobile Mobile Subscribe Subscribe

Slide 44

Slide 44 text

Status Updates Server Mobile Mobile Join

Slide 45

Slide 45 text

Status Updates Server Mobile Mobile Status update Status update

Slide 46

Slide 46 text

Status Updates

Slide 47

Slide 47 text

Status Updates

Slide 48

Slide 48 text

Status Updates

Slide 49

Slide 49 text

Status Updates

Slide 50

Slide 50 text

Status Updates

Slide 51

Slide 51 text

Status Updates

Slide 52

Slide 52 text

History

Slide 53

Slide 53 text

History Server Call History Subscribe Status update

Slide 54

Slide 54 text

History

Slide 55

Slide 55 text

History

Slide 56

Slide 56 text

History

Slide 57

Slide 57 text

Conclusions

Slide 58

Slide 58 text

Simpler system

Slide 59

Slide 59 text

Testing is easy

Slide 60

Slide 60 text

Changes are easy

Slide 61

Slide 61 text

Great performance

Slide 62

Slide 62 text

We should learn from the Erlang community

Slide 63

Slide 63 text

A lot of fun!

Slide 64

Slide 64 text

Thanks!