Slide 1

Slide 1 text

iex(1)> high_availability @sasajuric aircloak.com

Slide 2

Slide 2 text

Erlang 
 (the language) Elixir LFE Erlang VM (BEAM)

Slide 3

Slide 3 text

highly_available ≈ works_almost_always

Slide 4

Slide 4 text

optional?(highly_available) # false

Slide 5

Slide 5 text

easy?(highly_available) # false

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

highly_available do # the code here magically works end #doesntworklikethat

Slide 8

Slide 8 text

fault-tolerance scalability + responsiveness = high availability

Slide 9

Slide 9 text

A B D E F C

Slide 10

Slide 10 text

send(pid, message) A B message = receive ...

Slide 11

Slide 11 text

def loop(state) do receive do message -> new_state = handle(state, message) loop(new_state) end end

Slide 12

Slide 12 text

bank account balance {:deposit, amount} {:withdraw, amount} :balance amount

Slide 13

Slide 13 text

OS process or thread Erlang process

Slide 14

Slide 14 text

db connection background job request handler state request handler request handler request handler request handler request handler state state state background job background job background job db connection db connection db connection

Slide 15

Slide 15 text

A B C D E F

Slide 16

Slide 16 text

A exit message B C D E F

Slide 17

Slide 17 text

supervisor worker worker

Slide 18

Slide 18 text

S S S W W S W W W S W W

Slide 19

Slide 19 text

scheduler scheduler scheduler scheduler CPU CPU CPU CPU VM

Slide 20

Slide 20 text

VM VM VM VM VM

Slide 21

Slide 21 text

VM send(pid, message) VM 1 send(pid, message) VM 2

Slide 22

Slide 22 text

shared-nothing concurrency process crash propagation + some VM magic = fault tolerance
 scalability
 responsiveness

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

3rd party data source transform data push server browsers bets validation

Slide 25

Slide 25 text

Data transformation 1.Receive TCP stream" 2.Assemble XML messages" 3.Update the model" 4.Store to database" 5.Serialize the model" 6.Dispatch

Slide 26

Slide 26 text

receive stream assemble messages update model store to database serialize data dispatch

Slide 27

Slide 27 text

receive stream assemble messages update model store to database serialize data dispatch message 6 message 5 message 4 message 3 message 2 message 1

Slide 28

Slide 28 text

receive stream assemble messages update model store to database serialize data dispatch

Slide 29

Slide 29 text

storing to database queuing bet odds storing bet odds

Slide 30

Slide 30 text

match 1 match 3 match 2

Slide 31

Slide 31 text

update model serialize data dispatch match 1 match 3 match 2

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content