145
Introducing Riak and Ripple Sean Cribbs Wednesday, April 14, 2010

Introducing Riak and Ripple

Embed Size (px)

DESCRIPTION

An introduction to Basho's Riak distributed data store, and the Ripple client in Ruby. Code samples from the demos are here: http://gist.github.com/365791

Citation preview

Page 1: Introducing Riak and Ripple

Introducing Riak and RippleSean Cribbs

Wednesday, April 14, 2010

Page 2: Introducing Riak and Ripple

system “whoami”

Wednesday, April 14, 2010

Page 3: Introducing Riak and Ripple

system “whoami”

BCS, three years as a musician

Wednesday, April 14, 2010

Page 4: Introducing Riak and Ripple

system “whoami”

BCS, three years as a musician

Started with Ruby in early 2006

Wednesday, April 14, 2010

Page 5: Introducing Riak and Ripple

system “whoami”

BCS, three years as a musician

Started with Ruby in early 2006

Rails freelancer 2007-2010

Wednesday, April 14, 2010

Page 6: Introducing Riak and Ripple

system “whoami”

BCS, three years as a musician

Started with Ruby in early 2006

Rails freelancer 2007-2010

Radiant CMS

Wednesday, April 14, 2010

Page 7: Introducing Riak and Ripple

system “whoami”

BCS, three years as a musician

Started with Ruby in early 2006

Rails freelancer 2007-2010

Radiant CMS

March 2010 - Developer Advocate

basho

Wednesday, April 14, 2010

Page 8: Introducing Riak and Ripple

Wednesday, April 14, 2010

Page 9: Introducing Riak and Ripple

Wednesday, April 14, 2010

Page 10: Introducing Riak and Ripple

Rails Can’t Scale

Wednesday, April 14, 2010

Page 11: Introducing Riak and Ripple

Rails Can’t Scalewhat does it mean?

Wednesday, April 14, 2010

Page 12: Introducing Riak and Ripple

Rails Can’t Scalewhat does it mean?

Ruby

Wednesday, April 14, 2010

Page 13: Introducing Riak and Ripple

Rails Can’t Scalewhat does it mean?

MySQLRuby

Wednesday, April 14, 2010

Page 14: Introducing Riak and Ripple

Rails Can’t Scalewhat does it mean?

MySQL

insert straw man here

Ruby

Wednesday, April 14, 2010

Page 15: Introducing Riak and Ripple

Mythbusting “scalability”

Wednesday, April 14, 2010

Page 16: Introducing Riak and Ripple

Mythbusting “scalability”

Scalability is not a yes/no question

Wednesday, April 14, 2010

Page 17: Introducing Riak and Ripple

Mythbusting “scalability”

Scalability is not a yes/no question

It’s a ratio of benefit to cost

Wednesday, April 14, 2010

Page 18: Introducing Riak and Ripple

Mythbusting “scalability”

Scalability is not a yes/no question

It’s a ratio of benefit to cost

Benefits: low latency, throughput, uptime, concurrency, reliability

Wednesday, April 14, 2010

Page 19: Introducing Riak and Ripple

Mythbusting “scalability”

Scalability is not a yes/no question

It’s a ratio of benefit to cost

Benefits: low latency, throughput, uptime, concurrency, reliability

Costs: CPU, RAM, disk, bandwidth, power, hw/sw

Wednesday, April 14, 2010

Page 20: Introducing Riak and Ripple

Mythbusting “scalability”

Scalability is not a yes/no question

It’s a ratio of benefit to cost

Benefits: low latency, throughput, uptime, concurrency, reliability

Costs: CPU, RAM, disk, bandwidth, power, hw/sw

scalability = bang for your buck (ROI)

Wednesday, April 14, 2010

Page 21: Introducing Riak and Ripple

Scaling goes both ways

Wednesday, April 14, 2010

Page 22: Introducing Riak and Ripple

Scaling goes both ways

Up - high traffic, “Big Data”, multi-datacenter

Wednesday, April 14, 2010

Page 23: Introducing Riak and Ripple

Scaling goes both ways

Up - high traffic, “Big Data”, multi-datacenter

Down - laptop, set-top, mobile

Wednesday, April 14, 2010

Page 24: Introducing Riak and Ripple

How do you scale?

Wednesday, April 14, 2010

Page 25: Introducing Riak and Ripple

How do you scale?

Vertically - get bigger, expensive machines

Wednesday, April 14, 2010

Page 26: Introducing Riak and Ripple

How do you scale?

Vertically - get bigger, expensive machines

Horizontally - get more commodity machines

Wednesday, April 14, 2010

Page 27: Introducing Riak and Ripple

What is Riak?(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 28: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 29: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

key-value storage

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 30: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

key-value storage

masterless, peer-to-peer replication

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 31: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

key-value storage

masterless, peer-to-peer replication

consistent hashing

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 32: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

key-value storage

masterless, peer-to-peer replication

consistent hashing

eventual consistency

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 33: Introducing Riak and Ripple

What is Riak?

Based on Amazon’s Dynamo (2007)

key-value storage

masterless, peer-to-peer replication

consistent hashing

eventual consistency

failover - quorums, hinted handoff

(the horizontal scaling bits)

Wednesday, April 14, 2010

Page 34: Introducing Riak and Ripple

“O/RM is the Vietnam of Computer Science.”-- Ted Neward, 2004/6

Wednesday, April 14, 2010

Page 35: Introducing Riak and Ripple

“O/RM is the Vietnam of Computer Science.”-- Ted Neward, 2004/6

slippery slope

Wednesday, April 14, 2010

Page 36: Introducing Riak and Ripple

“O/RM is the Vietnam of Computer Science.”-- Ted Neward, 2004/6

slippery slope diminishing returns

Wednesday, April 14, 2010

Page 37: Introducing Riak and Ripple

Impedance mismatch

Wednesday, April 14, 2010

Page 38: Introducing Riak and Ripple

Impedance mismatch

Relational = predicate logic, truth statements

Wednesday, April 14, 2010

Page 39: Introducing Riak and Ripple

Impedance mismatch

Relational = predicate logic, truth statements

Object = identity, state, behavior, encapsulation

Wednesday, April 14, 2010

Page 40: Introducing Riak and Ripple

Pick your poison

Wednesday, April 14, 2010

Page 41: Introducing Riak and Ripple

Pick your poison

Make the objects fit the database

Wednesday, April 14, 2010

Page 42: Introducing Riak and Ripple

Pick your poison

Make the objects fit the database

Active Record

Wednesday, April 14, 2010

Page 43: Introducing Riak and Ripple

Pick your poison

Make the objects fit the database

Active Record

Make the database fit the objects

Wednesday, April 14, 2010

Page 44: Introducing Riak and Ripple

Pick your poison

Make the objects fit the database

Active Record

Make the database fit the objects

OODBMS, Graph DBs

Wednesday, April 14, 2010

Page 45: Introducing Riak and Ripple

Middle ground

Wednesday, April 14, 2010

Page 46: Introducing Riak and Ripple

Middle ground

Document databases (identity and state)

Wednesday, April 14, 2010

Page 47: Introducing Riak and Ripple

Middle ground

Document databases (identity and state)

No JOINs - denormalized / composed

Wednesday, April 14, 2010

Page 48: Introducing Riak and Ripple

Middle ground

Document databases (identity and state)

No JOINs - denormalized / composed

Loosely structured

Wednesday, April 14, 2010

Page 49: Introducing Riak and Ripple

Middle ground

Document databases (identity and state)

No JOINs - denormalized / composed

Loosely structured

Friendly transport formats, e.g. JSON

Wednesday, April 14, 2010

Page 50: Introducing Riak and Ripple

What is Riak?(the document database bits)

Wednesday, April 14, 2010

Page 51: Introducing Riak and Ripple

What is Riak?

Store your objects as JSON (or any format)

(the document database bits)

Wednesday, April 14, 2010

Page 52: Introducing Riak and Ripple

What is Riak?

Store your objects as JSON (or any format)

Link between objects (like hypertext)

(the document database bits)

Wednesday, April 14, 2010

Page 53: Introducing Riak and Ripple

What is Riak?

Store your objects as JSON (or any format)

Link between objects (like hypertext)

No SQL - query with Javascript Map-Reduce

(the document database bits)

Wednesday, April 14, 2010

Page 54: Introducing Riak and Ripple

“DevOps” - agile infrastructure

Wednesday, April 14, 2010

Page 55: Introducing Riak and Ripple

“DevOps” - agile infrastructureprogramming your infrastructure

Wednesday, April 14, 2010

Page 56: Introducing Riak and Ripple

“DevOps” - agile infrastructureprogramming your infrastructure

rapid “cloud” deployments

Wednesday, April 14, 2010

Page 57: Introducing Riak and Ripple

Befriend your sysadmin

Wednesday, April 14, 2010

Page 58: Introducing Riak and Ripple

Befriend your sysadmin

Integrate with existing infrastructure

Wednesday, April 14, 2010

Page 59: Introducing Riak and Ripple

Befriend your sysadmin

Integrate with existing infrastructure

Reduce the amount of hands-on work

Wednesday, April 14, 2010

Page 60: Introducing Riak and Ripple

Befriend your sysadmin

Integrate with existing infrastructure

Reduce the amount of hands-on work

Have a growth plan

Wednesday, April 14, 2010

Page 61: Introducing Riak and Ripple

What is Riak?(the ops-friendly bits)

Wednesday, April 14, 2010

Page 62: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 63: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

Store data in its original format

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 64: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

Store data in its original format

It’s just HTTP - same techniques apply

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 65: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

Store data in its original format

It’s just HTTP - same techniques apply

load balancing, proxy caches, round-robin DNS

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 66: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

Store data in its original format

It’s just HTTP - same techniques apply

load balancing, proxy caches, round-robin DNS

No node is special - grow horizontally

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 67: Introducing Riak and Ripple

What is Riak?

Web-shaped storage

Store data in its original format

It’s just HTTP - same techniques apply

load balancing, proxy caches, round-robin DNS

No node is special - grow horizontally

Get some sleep, fix it in the morning

(the ops-friendly bits)

Wednesday, April 14, 2010

Page 68: Introducing Riak and Ripple

To review, Riak is...

Wednesday, April 14, 2010

Page 69: Introducing Riak and Ripple

To review, Riak is...

Magical Horizontally-Scaling Unicorns

Wednesday, April 14, 2010

Page 70: Introducing Riak and Ripple

To review, Riak is...

Magical Horizontally-Scaling Unicorns

Application-Friendly Rainbows in the Cloud

Wednesday, April 14, 2010

Page 71: Introducing Riak and Ripple

To review, Riak is...

Magical Horizontally-Scaling Unicorns

Application-Friendly Rainbows in the Cloud

Data-Shredding MapReduce Ninjas

Wednesday, April 14, 2010

Page 72: Introducing Riak and Ripple

http://downloads.basho.com/riak/hg clone http://hg.basho.com/riak/

Wednesday, April 14, 2010

Page 73: Introducing Riak and Ripple

gem install ripplegit clone git://github.com/seancribbs/ripple.git

Wednesday, April 14, 2010

Page 74: Introducing Riak and Ripple

CRUD in Riak

Wednesday, April 14, 2010

Page 75: Introducing Riak and Ripple

CRUD in Riak

PUT /riak/bucket/key (C,U) (also POST)

Wednesday, April 14, 2010

Page 76: Introducing Riak and Ripple

CRUD in Riak

PUT /riak/bucket/key (C,U) (also POST)

GET /riak/bucket/key (R)

Wednesday, April 14, 2010

Page 77: Introducing Riak and Ripple

CRUD in Riak

PUT /riak/bucket/key (C,U) (also POST)

GET /riak/bucket/key (R)

DELETE /riak/bucket/key (D)

Wednesday, April 14, 2010

Page 78: Introducing Riak and Ripple

CRUD Demo

Wednesday, April 14, 2010

Page 79: Introducing Riak and Ripple

Links

Wednesday, April 14, 2010

Page 80: Introducing Riak and Ripple

Links

One-way, qualified “pointers” to other objects

Wednesday, April 14, 2010

Page 81: Introducing Riak and Ripple

Links

One-way, qualified “pointers” to other objects

“Link” header in HTTP

Wednesday, April 14, 2010

Page 82: Introducing Riak and Ripple

Links

One-way, qualified “pointers” to other objects

“Link” header in HTTP

</riak/bucket/key>; riaktag=”tag”

Wednesday, April 14, 2010

Page 83: Introducing Riak and Ripple

Link-walking

Wednesday, April 14, 2010

Page 84: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

Wednesday, April 14, 2010

Page 85: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

Wednesday, April 14, 2010

Page 86: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

tag = scope to a tag

Wednesday, April 14, 2010

Page 87: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

tag = scope to a tag

keep = return results (last one always)

Wednesday, April 14, 2010

Page 88: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

tag = scope to a tag

keep = return results (last one always)

“_” means match anything

Wednesday, April 14, 2010

Page 89: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

tag = scope to a tag

keep = return results (last one always)

“_” means match anything

Example:

Wednesday, April 14, 2010

Page 90: Introducing Riak and Ripple

Link-walking

GET /riak/bucket/key/[bucket,tag,keep]*

bucket = scope to a bucket

tag = scope to a tag

keep = return results (last one always)

“_” means match anything

Example:

GET /riak/artists/TheBeatles/albums,_,1/tracks,_,1

Wednesday, April 14, 2010

Page 91: Introducing Riak and Ripple

Links Demo

Wednesday, April 14, 2010

Page 92: Introducing Riak and Ripple

Riak Map-ReduceI believe I did, Bob.

Wednesday, April 14, 2010

Page 93: Introducing Riak and Ripple

Riak Map-Reduce

Wednesday, April 14, 2010

Page 94: Introducing Riak and Ripple

Riak Map-Reduce

Based on Google’s Map-Reduce idea

Wednesday, April 14, 2010

Page 95: Introducing Riak and Ripple

Riak Map-Reduce

Based on Google’s Map-Reduce idea

Some similarities to Hadoop and CouchDB

Wednesday, April 14, 2010

Page 96: Introducing Riak and Ripple

Riak Map-Reduce

Based on Google’s Map-Reduce idea

Some similarities to Hadoop and CouchDB

High data-locality

Wednesday, April 14, 2010

Page 97: Introducing Riak and Ripple

Riak Map-Reduce

Based on Google’s Map-Reduce idea

Some similarities to Hadoop and CouchDB

High data-locality

Phases can be Javascript or Erlang

Wednesday, April 14, 2010

Page 98: Introducing Riak and Ripple

Map-Reduce Terminology

Wednesday, April 14, 2010

Page 99: Introducing Riak and Ripple

Map-Reduce Terminology

Job: a query, composed of inputs and phases

Wednesday, April 14, 2010

Page 100: Introducing Riak and Ripple

Map-Reduce Terminology

Job: a query, composed of inputs and phases

Phase: a single map or reduce function application

Wednesday, April 14, 2010

Page 101: Introducing Riak and Ripple

Map-Reduce Terminology

Job: a query, composed of inputs and phases

Phase: a single map or reduce function application

Map: phase applied to each item - filter, transform

Wednesday, April 14, 2010

Page 102: Introducing Riak and Ripple

Map-Reduce Terminology

Job: a query, composed of inputs and phases

Phase: a single map or reduce function application

Map: phase applied to each item - filter, transform

Reduce: phase applied to the collection - collate, aggregate, compute

Wednesday, April 14, 2010

Page 103: Introducing Riak and Ripple

Map Phases

Wednesday, April 14, 2010

Page 104: Introducing Riak and Ripple

Map Phases

Inputs are bucket-key pairs (with optional key-specific data)

Wednesday, April 14, 2010

Page 105: Introducing Riak and Ripple

Map Phases

Inputs are bucket-key pairs (with optional key-specific data)

Must return a list

Wednesday, April 14, 2010

Page 106: Introducing Riak and Ripple

Map Phases

Inputs are bucket-key pairs (with optional key-specific data)

Must return a list

Parallel results are aggregated

Wednesday, April 14, 2010

Page 107: Introducing Riak and Ripple

Map Built-ins

Wednesday, April 14, 2010

Page 108: Introducing Riak and Ripple

Map Built-ins

Riak.mapValues

Wednesday, April 14, 2010

Page 109: Introducing Riak and Ripple

Map Built-ins

Riak.mapValues

Riak.mapValuesJson

Wednesday, April 14, 2010

Page 110: Introducing Riak and Ripple

Reduce Phases

Wednesday, April 14, 2010

Page 111: Introducing Riak and Ripple

Reduce Phases

Performed on a single node

Wednesday, April 14, 2010

Page 112: Introducing Riak and Ripple

Reduce Phases

Performed on a single node

Two processes per reduce phase increase parallelism

Wednesday, April 14, 2010

Page 113: Introducing Riak and Ripple

Reduce Phases

Performed on a single node

Two processes per reduce phase increase parallelism

Must return a list

Wednesday, April 14, 2010

Page 114: Introducing Riak and Ripple

Reduce Built-ins

Wednesday, April 14, 2010

Page 115: Introducing Riak and Ripple

Reduce Built-ins

Riak.reduceMin

Wednesday, April 14, 2010

Page 116: Introducing Riak and Ripple

Reduce Built-ins

Riak.reduceMin

Riak.reduceMax

Wednesday, April 14, 2010

Page 117: Introducing Riak and Ripple

Reduce Built-ins

Riak.reduceMin

Riak.reduceMax

Riak.reduceSort

Wednesday, April 14, 2010

Page 118: Introducing Riak and Ripple

Build a M/R Job

Wednesday, April 14, 2010

Page 119: Introducing Riak and Ripple

Build a M/R Job

Specify inputs

Wednesday, April 14, 2010

Page 120: Introducing Riak and Ripple

Build a M/R Job

Specify inputs

bucket/key, bucket/key/key-specific-arg, bucket

Wednesday, April 14, 2010

Page 121: Introducing Riak and Ripple

Build a M/R Job

Specify inputs

bucket/key, bucket/key/key-specific-arg, bucket

Specify phases

Wednesday, April 14, 2010

Page 122: Introducing Riak and Ripple

Build a M/R Job

Specify inputs

bucket/key, bucket/key/key-specific-arg, bucket

Specify phases

Each can receive a static argument

Wednesday, April 14, 2010

Page 123: Introducing Riak and Ripple

Build a M/R Job

Specify inputs

bucket/key, bucket/key/key-specific-arg, bucket

Specify phases

Each can receive a static argument

Each can return intermediate results

Wednesday, April 14, 2010

Page 124: Introducing Riak and Ripple

Map-Reduce on HTTP

Wednesday, April 14, 2010

Page 125: Introducing Riak and Ripple

Map-Reduce on HTTP

Job is a JSON object

Wednesday, April 14, 2010

Page 126: Introducing Riak and Ripple

Map-Reduce on HTTP

Job is a JSON object

POST /mapred

Wednesday, April 14, 2010

Page 127: Introducing Riak and Ripple

A simple M/R job

{“inputs”: “goog”,

“query”: [{“map”:

{“language”:”javascript”,

“name”: “Riak.mapValuesJson”,

“keep”: true}]}

Wednesday, April 14, 2010

Page 128: Introducing Riak and Ripple

A simple M/R job

{“inputs”: “goog”,

“query”: [{“map”:

{“language”:”javascript”,

“name”: “Riak.mapValuesJson”,

“keep”: true}]}

Riak::MapReduce.new(c).add(‘goog’).map(‘Riak.mapValuesJson’, :keep => true).run

Wednesday, April 14, 2010

Page 129: Introducing Riak and Ripple

Another M/R Job{“inputs”: “stocks”,

“query”: [{“map”:{“language”:”javascript”,

“name”: “App.extractTickers”,

“arg”: “GOOG”,

“keep”: false},

{“reduce”:{“language”:”javascript,

“name”: “Riak.reduceMin”,

“keep”: true}]}

Wednesday, April 14, 2010

Page 130: Introducing Riak and Ripple

Another M/R Job{“inputs”: “stocks”,

“query”: [{“map”:{“language”:”javascript”,

“name”: “App.extractTickers”,

“arg”: “GOOG”,

“keep”: false},

{“reduce”:{“language”:”javascript,

“name”: “Riak.reduceMin”,

“keep”: true}]}

Riak::MapReduce.new(c).add(‘stocks’).map(‘App.extractTickers’, :arg =>”GOOG”).reduce(“Riak.reduceMin”, :keep => true).run

Wednesday, April 14, 2010

Page 131: Introducing Riak and Ripple

Map-Reduce Demo

Wednesday, April 14, 2010

Page 132: Introducing Riak and Ripple

Ripple

Wednesday, April 14, 2010

Page 133: Introducing Riak and Ripple

Ripple

Document-style persistence (like MongoMapper)

Wednesday, April 14, 2010

Page 134: Introducing Riak and Ripple

Ripple

Document-style persistence (like MongoMapper)

ActiveModel niceties

Wednesday, April 14, 2010

Page 135: Introducing Riak and Ripple

Ripple

Document-style persistence (like MongoMapper)

ActiveModel niceties

Callbacks

Wednesday, April 14, 2010

Page 136: Introducing Riak and Ripple

Ripple

Document-style persistence (like MongoMapper)

ActiveModel niceties

Callbacks

Validations

Wednesday, April 14, 2010

Page 137: Introducing Riak and Ripple

Ripple

Document-style persistence (like MongoMapper)

ActiveModel niceties

Callbacks

Validations

ActionPack compatibility

Wednesday, April 14, 2010

Page 138: Introducing Riak and Ripple

Ripple TODO

Wednesday, April 14, 2010

Page 139: Introducing Riak and Ripple

Ripple TODO

Associations

Wednesday, April 14, 2010

Page 140: Introducing Riak and Ripple

Ripple TODO

Associations

Indexes

Wednesday, April 14, 2010

Page 141: Introducing Riak and Ripple

Ripple TODO

Associations

Indexes

Use a property/method as the key

Wednesday, April 14, 2010

Page 142: Introducing Riak and Ripple

Ripple TODO

Associations

Indexes

Use a property/method as the key

Dynamic finders

Wednesday, April 14, 2010

Page 143: Introducing Riak and Ripple

Ripple TODO

Associations

Indexes

Use a property/method as the key

Dynamic finders

Session/cache stores

Wednesday, April 14, 2010

Page 144: Introducing Riak and Ripple

Ripple Demo

Wednesday, April 14, 2010

Page 145: Introducing Riak and Ripple

Questions?

[email protected]

@seancribbs

“seancribbs” on Freenode IRC #riak

http://wiki.basho.com

[email protected]

Wednesday, April 14, 2010