put knowledge bucket brain key riak

33
PUT Knowledge BUCKET Brain KEY Riak An intro to Riak by Phil github.com/sideshowcoder twitter.com/ischi

Upload: philipp-fehre

Post on 08-May-2015

1.021 views

Category:

Technology


0 download

DESCRIPTION

Introduction to Riak, and Riak-CS at "Munich Rubyshift The big Ruby & Database shootout!" 9/2013 http://www.meetup.com/Munich-Rubyshift-Ruby-User-Group/

TRANSCRIPT

Page 1: PUT Knowledge BUCKET Brain KEY Riak

PUT Knowledge BUCKETBrain KEY Riak

An intro to Riak

by Phil

github.com/sideshowcoder

twitter.com/ischi

Page 2: PUT Knowledge BUCKET Brain KEY Riak

CodeThe slides contain code, this is how it works

a_string = "I am a string"a_string

Page 3: PUT Knowledge BUCKET Brain KEY Riak

Ok so Riak, eh?client = Riak::Client.newbucket = client.bucket("brain")object = bucket.get_or_new("riak")object.content_type = "application/json"object.data = { message: "Know stuff on riak!", level: "awesome" }object.storeobject.reload.data

Page 4: PUT Knowledge BUCKET Brain KEY Riak

What is Riak?Key / Value Store

Distributed

Dynamo based

Page 5: PUT Knowledge BUCKET Brain KEY Riak

Bucketsclient.bucket("brain").name

Page 6: PUT Knowledge BUCKET Brain KEY Riak

Keysbucket.keys

Page 7: PUT Knowledge BUCKET Brain KEY Riak

Valuesbucket.get("riak").data

Page 8: PUT Knowledge BUCKET Brain KEY Riak

DistributedKeyspace is spread across the members of a cluster via Consistent

Hashing

Page 9: PUT Knowledge BUCKET Brain KEY Riak

HashingKey => Hash(key) => Result => 2ˆn -1 possible outcomes

Digest.hexencode Digest::MD5.digest("my-key")

Page 10: PUT Knowledge BUCKET Brain KEY Riak

Consistent Hashing

Source littleriakbook

Page 11: PUT Knowledge BUCKET Brain KEY Riak

Replication

Source littleriakbook

Page 12: PUT Knowledge BUCKET Brain KEY Riak

CAP TheoremConsistency

Availability

Partition tolerance

Page 13: PUT Knowledge BUCKET Brain KEY Riak

Trade-offsRiak chooses adjustable AP, which means it never reaches full

Consistency but can be tuned to the needs

Page 14: PUT Knowledge BUCKET Brain KEY Riak

N/R/W ValuesN: Replication count

R: Min number of nodes to read from

W: Min number of nodes to write to

Page 15: PUT Knowledge BUCKET Brain KEY Riak

More on the basics behindthis?

Littleriakbook by Eric Redmond

dynamo paper

Page 16: PUT Knowledge BUCKET Brain KEY Riak

Ring members$ riak-admin member-status=========================== Membership ============================Status Ring Pending Node-------------------------------------------------------------------valid 100.0% -- '[email protected]'-------------------------------------------------------------------Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

Page 17: PUT Knowledge BUCKET Brain KEY Riak

Ring Status$ riak-admin ring-status============================ Claimant =============================Claimant: '[email protected]'Status: upRing Ready: true

======================== Ownership Handoff ========================No pending changes.

======================== Unreachable Nodes ========================All nodes are up and reachable

Page 18: PUT Knowledge BUCKET Brain KEY Riak

Just Key / Value store? ...mehh!

Tags

Map and Reduce

S3...

Page 19: PUT Knowledge BUCKET Brain KEY Riak

2i aka Secondary Indexesaka Tags

object = bucket.get("riak")object.indexes["level_bin"] = ["awesome"]object.storebucket.get_index("level_bin", "awesome")

Page 20: PUT Knowledge BUCKET Brain KEY Riak

Map and Reducejs_func = "function(v){ return [Riak.mapValuesJson(v)[0].message]; }"Riak::MapReduce.new(client).add("brain", "riak").map(js_func, :keep => true).run

Page 21: PUT Knowledge BUCKET Brain KEY Riak

Let's talk S3Wait what?

Page 22: PUT Knowledge BUCKET Brain KEY Riak

Run your own S3 (compatible) backed by Riak

Page 23: PUT Knowledge BUCKET Brain KEY Riak

FeaturesSame API as S3 (use aws-sdk in ruby)

Great reporting facilities

It's your own S3!

Page 24: PUT Knowledge BUCKET Brain KEY Riak

SetupInstall Riak

Install RiakCS

Install Stanchion

It's detailed here

Page 25: PUT Knowledge BUCKET Brain KEY Riak

... or just setup via Vagrant!$ vagrant plugin install vagrant-berkshelf$ vagrant plugin install vagrant-omnibus$ git clone https://github.com/basho/vagrant-riak-cs-cluster$ cd vagrant-riak-cs-cluster$ RIAK_CS_CREATE_ADMIN_USER=1 vagrant up

Virtual setup using vagrant

Page 26: PUT Knowledge BUCKET Brain KEY Riak

Create a usercurl -H 'Content-Type: application/json' -X POST \http://127.0.0.1:8080/riak-cs/user \--data '{"email":"[email protected]", "name":"admin"}'

Page 27: PUT Knowledge BUCKET Brain KEY Riak

OK let's try it!AWS::S3.new({ :access_key_id => "8AA5UQR3EACDS_TIAXLV", :secret_access_key => "M5eG0q1pN9y6hlc4-JbiCHXLt1YXCY2n7Sb5Yg==", :use_ssl => false, :proxy_uri => "http://localhost:8080"})

Page 28: PUT Knowledge BUCKET Brain KEY Riak

Create a buckets3bucket = s3.buckets.create("my-bucket", :acl => :public_read)s3.buckets.map(&:name)

Page 29: PUT Knowledge BUCKET Brain KEY Riak

Write something!obj = s3bucket.objects["riak.jpg"]obj.write File.read('./images/riak.jpg')obj.acl = :public_reads3bucket.objects.map(&:key)

Page 30: PUT Knowledge BUCKET Brain KEY Riak

OK lets read it back

This is loaded from local Riak CS

Page 31: PUT Knowledge BUCKET Brain KEY Riak

RecapDistributes Key / Value Store

Easy to interface with

Clients are build of HTTP

Use RiakCS to replace or augment S3

Page 32: PUT Knowledge BUCKET Brain KEY Riak

Questions?

Page 33: PUT Knowledge BUCKET Brain KEY Riak

ResourcesLittleriakbook by Eric Redmond

Basho docs on Racks