IMPLEMENTING RIAK IN ERLANG: BENEFITS AND CHALLENGES
Steve Vinoski
Basho Technologies
Cambridge, MA USA http://basho.com @stevevinoski
vinoski@ieee.org http://steve.vinoski.net/
1 Wednesday, April 24, 13
IMPLEMENTING RIAK IN ERLANG: BENEFITS AND CHALLENGES Steve Vinoski - - PowerPoint PPT Presentation
IMPLEMENTING RIAK IN ERLANG: BENEFITS AND CHALLENGES Steve Vinoski Basho Technologies Cambridge, MA USA http://basho.com @stevevinoski vinoski@ieee.org http://steve.vinoski.net/ Wednesday, April 24, 13 1 ERLANG Wednesday, April 24, 13
Cambridge, MA USA http://basho.com @stevevinoski
vinoski@ieee.org http://steve.vinoski.net/
1 Wednesday, April 24, 13
2 Wednesday, April 24, 13
3 Wednesday, April 24, 13
3 Wednesday, April 24, 13
computers
3 Wednesday, April 24, 13
computers
3 Wednesday, April 24, 13
computers
3 Wednesday, April 24, 13
computers
3 Wednesday, April 24, 13
computers
4 Wednesday, April 24, 13
5 Wednesday, April 24, 13
OS threads
per Erlang VM instance
6 Wednesday, April 24, 13
7 Wednesday, April 24, 13
message passing
7 Wednesday, April 24, 13
message passing
7 Wednesday, April 24, 13
message passing
process to take action when another fails
7 Wednesday, April 24, 13
8 Wednesday, April 24, 13
CPU Core 1
CPU Core N
8 Wednesday, April 24, 13
CPU Core 1
CPU Core N
8 Wednesday, April 24, 13
CPU Core 1
CPU Core N
Erlang VM
8 Wednesday, April 24, 13
CPU Core 1
CPU Core N
Erlang VM
8 Wednesday, April 24, 13
Process Process Process Process Process Process
CPU Core 1
CPU Core N
Erlang VM
8 Wednesday, April 24, 13
9 Wednesday, April 24, 13
lists, records, binaries, functions, modules
9 Wednesday, April 24, 13
lists, records, binaries, functions, modules
9 Wednesday, April 24, 13
lists, records, binaries, functions, modules
recursion, messages
9 Wednesday, April 24, 13
concurrency constructs
languages
10 Wednesday, April 24, 13
Erlang process, even on another node
11 Wednesday, April 24, 13
within the message queue
12 Wednesday, April 24, 13
and then can't be changed
13 Wednesday, April 24, 13
14 Wednesday, April 24, 13
15 Wednesday, April 24, 13
16 Wednesday, April 24, 13
17 Wednesday, April 24, 13
quickly
recurring problems across multiple domains
18 Wednesday, April 24, 13
19 Wednesday, April 24, 13
20 Wednesday, April 24, 13
20 Wednesday, April 24, 13
20 Wednesday, April 24, 13
20 Wednesday, April 24, 13
highly scalable
20 Wednesday, April 24, 13
highly scalable open source
20 Wednesday, April 24, 13
highly scalable open source key-value database
20 Wednesday, April 24, 13
highly scalable open source key-value database written primarily in Erlang.
20 Wednesday, April 24, 13
https://speakerdeck.com/argv0/dynamo-five-years-later
text search
21 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
22 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
23 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
24 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
25 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV
image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
26 Wednesday, April 24, 13
node 1 node 2
27 Wednesday, April 24, 13
data across the cluster
number of nodes changes
hotspots
node 1 node 2
28 Wednesday, April 24, 13
node 1 node 2
29 Wednesday, April 24, 13
node 1 node 2
29 Wednesday, April 24, 13
node 1 node 2
29 Wednesday, April 24, 13
nodes" or vnodes (default 64)
node 1 node 2
29 Wednesday, April 24, 13
nodes" or vnodes (default 64)
node 1 node 2
29 Wednesday, April 24, 13
nodes" or vnodes (default 64)
multiple vnodes
node 1 node 2
29 Wednesday, April 24, 13
node 1 node 2
30 Wednesday, April 24, 13
node 1 node 2
31 Wednesday, April 24, 13
node 1 node 2
31 Wednesday, April 24, 13
32 Wednesday, April 24, 13
per bucket)
32 Wednesday, April 24, 13
per bucket)
for a successful read (can be specified per-request)
32 Wednesday, April 24, 13
per bucket)
for a successful read (can be specified per-request)
needed for a successful write (can be specified per- request)
32 Wednesday, April 24, 13
for details see http://docs.basho.com/riak/1.3.1/tutorials/fast-track/Tunable-CAP-Controls-in-Riak/
node 1 node 2
33 Wednesday, April 24, 13
34 Wednesday, April 24, 13
35 Wednesday, April 24, 13
provides the SHA-1 function
35 Wednesday, April 24, 13
provides the SHA-1 function
35 Wednesday, April 24, 13
provides the SHA-1 function
35 Wednesday, April 24, 13
provides the SHA-1 function
35 Wednesday, April 24, 13
36 Wednesday, April 24, 13
37 Wednesday, April 24, 13
38 Wednesday, April 24, 13
39 Wednesday, April 24, 13
40 Wednesday, April 24, 13
41 Wednesday, April 24, 13
42 Wednesday, April 24, 13
43 Wednesday, April 24, 13
44 Wednesday, April 24, 13
45 Wednesday, April 24, 13
46 Wednesday, April 24, 13
slaves
gossip protocol
47 Wednesday, April 24, 13
supporting multiple nodes for reliability
about every other node
48 Wednesday, April 24, 13
repository clone (git://github.com/basho/riak.git)
dev3 running in a cluster, nothing on the 4th node yet
as just a plain distributed erlang node
node 1 node 2
49 Wednesday, April 24, 13
50 Wednesday, April 24, 13
51 Wednesday, April 24, 13
52 Wednesday, April 24, 13
53 Wednesday, April 24, 13
54 Wednesday, April 24, 13
node 1 node 2
55 Wednesday, April 24, 13
node 1 node 2
55 Wednesday, April 24, 13
node 1 node 2
liveness
55 Wednesday, April 24, 13
node 1 node 2
liveness
easy to set up a cluster
55 Wednesday, April 24, 13
node 1 node 2
liveness
easy to set up a cluster
doesn't scale to large clusters > 150 nodes (yet)
55 Wednesday, April 24, 13
has claimed
state to other randomly chosen nodes
ring state to specific nodes
56 Wednesday, April 24, 13
57 Wednesday, April 24, 13
for data plane
57 Wednesday, April 24, 13
for data plane
and head-of-line blocking
57 Wednesday, April 24, 13
for data plane
and head-of-line blocking
57 Wednesday, April 24, 13
for data plane
and head-of-line blocking
places
57 Wednesday, April 24, 13
Bitcask eLevelDB Memory Multi Riak API Riak Clients
58 Wednesday, April 24, 13
Bitcask eLevelDB Memory Multi Riak API Riak Clients
58 Wednesday, April 24, 13
Bitcask eLevelDB Memory Multi Riak API Riak Clients
hashing
(vnodes)
58 Wednesday, April 24, 13
59 Wednesday, April 24, 13
60 Wednesday, April 24, 13
60 Wednesday, April 24, 13
vnode
60 Wednesday, April 24, 13
vnode
60 Wednesday, April 24, 13
vnode
lightweight processes
60 Wednesday, April 24, 13
via asynchronous update
entropy (AAE) to actively repair stale values
61 Wednesday, April 24, 13
cluster protocols
with protocol implementations
each other while interacting
process/node dies, great for aborting failed interactions
62 Wednesday, April 24, 13
easy
Cesarini & Thompson “Erlang Programming”)
source: http://en.wikipedia.org/wiki/Transmission_Control_Protocol
63 Wednesday, April 24, 13
64 Wednesday, April 24, 13
65 Wednesday, April 24, 13
66 Wednesday, April 24, 13
67 Wednesday, April 24, 13
patterns for concurrent, distributed, fault-tolerant Erlang apps
68 Wednesday, April 24, 13
terms, providing:
upgrade, tracing, process management, etc.
69 Wednesday, April 24, 13
70 Wednesday, April 24, 13
70 Wednesday, April 24, 13
70 Wednesday, April 24, 13
70 Wednesday, April 24, 13
70 Wednesday, April 24, 13
70 Wednesday, April 24, 13
71 Wednesday, April 24, 13
module
async
72 Wednesday, April 24, 13
73 Wednesday, April 24, 13
common vocabulary
them
74 Wednesday, April 24, 13
support, system concerns from business logic
75 Wednesday, April 24, 13
76 Wednesday, April 24, 13
wrote:
see http://www.erlang.org/download/armstrong_thesis_2003.pdf
77 Wednesday, April 24, 13
78 Wednesday, April 24, 13
78 Wednesday, April 24, 13
78 Wednesday, April 24, 13
78 Wednesday, April 24, 13
78 Wednesday, April 24, 13
79 Wednesday, April 24, 13
80 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
81 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV
image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
82 Wednesday, April 24, 13
Erlang Riak Core Bitcask eLevelDB Memory Multi Riak Pipe Riak API Riak PB Riak Clients Erlang Java Ruby C/C++ Python .NET PHP Go Nodejs More.. Yokozuna Webmachine HTTP Riak KV
image courtesy of Eric Redmond, "A Little Riak Book" https://github.com/coderoshi/little_riak_book/
82 Wednesday, April 24, 13
libraries into the VM
facilities via drivers
(NIFs)
83 Wednesday, April 24, 13
library, overlaying its Erlang functions with C/C++ replacements
84 Wednesday, April 24, 13
85 Wednesday, April 24, 13
86 Wednesday, April 24, 13
87 Wednesday, April 24, 13
88 Wednesday, April 24, 13
C/C++ and Erlang
(threads, mutexes, cond vars, etc.)
89 Wednesday, April 24, 13
don't write crappy code
90 Wednesday, April 24, 13
91 Wednesday, April 24, 13
91 Wednesday, April 24, 13
91 Wednesday, April 24, 13
91 Wednesday, April 24, 13
91 Wednesday, April 24, 13
design, under low load
some cases
92 Wednesday, April 24, 13
93 Wednesday, April 24, 13
and teardown, etc.
94 Wednesday, April 24, 13
John Hughes (a co-inventor of Haskell)
shrinks the testcase to a minimum for easier debugging
and interactions
95 Wednesday, April 24, 13
96 Wednesday, April 24, 13
97 Wednesday, April 24, 13
log and notify about looming out-of-memory conditions
98 Wednesday, April 24, 13
99 Wednesday, April 24, 13
production systems for customers (with their permission
100 Wednesday, April 24, 13
knowledge of Erlang VM internals
language runtimes
101 Wednesday, April 24, 13
Erlang just do it
http://bashojobs.theresumator.com
102 Wednesday, April 24, 13
103 Wednesday, April 24, 13
104 Wednesday, April 24, 13
105 Wednesday, April 24, 13
https://github.com/coderoshi/little_riak_book/
http://riakhandbook.com
http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks
106 Wednesday, April 24, 13
http://docs.basho.com
http://basho.com/blog/
https://github.com/basho https://github.com/basho-labs
107 Wednesday, April 24, 13
108 Wednesday, April 24, 13