Slide 1

Slide 1 text

Simple Available Cloud Storage #CloudDC Meetup - Dec 3, 2012 Wednesday, December 5, 12

Slide 2

Slide 2 text

@tsantero Tom Santero Technical Evangelist, Basho Technologies Wednesday, December 5, 12

Slide 3

Slide 3 text

Founded in 2008 by ex-Akamai execs, engineers Sponsors of Riak, an open source (Apache2) distributed database 100+ employees, 75% engineers O!ces in Herndon, San Francisco, Cambridge, London and Tokyo We sell Riak EDS (Open Source + Multi-Datacenter replication) plus support, training, services ... and Riak CS! Basho Wednesday, December 5, 12

Slide 4

Slide 4 text

Overview Wednesday, December 5, 12

Slide 5

Slide 5 text

On March 27, 2012 Basho announced a new product called Riak CS Wednesday, December 5, 12

Slide 6

Slide 6 text

Riak CS is... enterprise cloud storage Riak multi-tenancy per-user metering multi-region HA o"ering built on top of large object storage S3 API Wednesday, December 5, 12

Slide 7

Slide 7 text

Riak distributed, masterless highly available key value store PROS: CONS: high read/write availability predictable latency minimal maintenance required I/O bound network is very chatty permissive API Wednesday, December 5, 12

Slide 8

Slide 8 text

Enabling you to host your own PUBLIC PRIVATE & CLOUDS Wednesday, December 5, 12

Slide 9

Slide 9 text

STORE MEDIA STORE BACKUPS Wednesday, December 5, 12

Slide 10

Slide 10 text

STORE ANY TYPE OF DATA YOU LIKE 01101011 01101001 01110100 01110100 01100101 01101110 01110011 00100000 01110000 01110101 01110000 01110000 01101001 01100101 01110011 00100000 01101000 01100001 01101101 01110011 01110100 01100101 01110010 01110011 00100000 01110011 01110101 01100111 01100001 01110010 00100000 01100111 01101100 01101001 01100100 01100101 01110010 01110011 00100000 00100001 Wednesday, December 5, 12

Slide 11

Slide 11 text

STORE ANY TYPE OF DATA YOU LIKE and read it back the same way. 01101011 01101001 01110100 01110100 01100101 01101110 01110011 00100000 01110000 01110101 01110000 01110000 01101001 01100101 01110011 00100000 01101000 01100001 01101101 01110011 01110100 01100101 01110010 01110011 00100000 01110011 01110101 01100111 01100001 01110010 00100000 01100111 01101100 01101001 01100100 01100101 01110010 01110011 00100000 00100001 01101011 01101001 01110100 01110100 01100101 01101110 01110011 00100000 01110000 01110101 01110000 01110000 01101001 01100101 01110011 00100000 01101000 01100001 01101101 01110011 01110100 01100101 01110010 01110011 00100000 01110011 01110101 01100111 01100001 01110010 00100000 01100111 01101100 01101001 01100100 01100101 01110010 01110011 00100000 00100001 Wednesday, December 5, 12

Slide 12

Slide 12 text

USERS multi-tenancy: Riak CS will track individual usage/stats BASIC CONCEPTS access_key secret_key users identi#ed by users authenticated by Wednesday, December 5, 12

Slide 13

Slide 13 text

BUCKETS users create buckets buckets are like folders store objects in buckets names are globally unique BASIC CONCEPTS Wednesday, December 5, 12

Slide 14

Slide 14 text

OBJECTS stored in buckets objects are opaque store any #le type #le sizes up to 5GB* BASIC CONCEPTS Wednesday, December 5, 12

Slide 15

Slide 15 text

ACLs Access Control Lists permissions on buckets permissions on objects permissions on permissions BASIC CONCEPTS Wednesday, December 5, 12

Slide 16

Slide 16 text

CLONE YOUR CLOUD! Wednesday, December 5, 12

Slide 17

Slide 17 text

CLONE YOUR CLOUD! Multi DC Replication available as of Nov 30, 2012 Wednesday, December 5, 12

Slide 18

Slide 18 text

MDC GLOBAL LOW-LATENCY OBJECT STORAGE FOR PROVIDERS FOR ENTERPRISE global availability de#ne global availability regions DC redundancy DC redundancy “[deploying Riak CS] reduces the risk of using AWS and allows customers to store their data in their own data centers, on their own terms.” - Alex Williams, TechCrunch Wednesday, December 5, 12

Slide 19

Slide 19 text

Patch to enable Riak CS as secondary storage Coming Soon: CLOUDSTACK INTEGRATION https://reviews.apache.org/r/8123/ Wednesday, December 5, 12

Slide 20

Slide 20 text

Architecture Wednesday, December 5, 12

Slide 21

Slide 21 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Wednesday, December 5, 12

Slide 22

Slide 22 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API 1. user uploads an object Wednesday, December 5, 12

Slide 23

Slide 23 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Wednesday, December 5, 12

Slide 24

Slide 24 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API 1 MB 2. Riak CS breaks object into 1 MB chunks 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB Wednesday, December 5, 12

Slide 25

Slide 25 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB Wednesday, December 5, 12

Slide 26

Slide 26 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 1 MB 3. Riak CS streams chunks to Riak nodes Wednesday, December 5, 12

Slide 27

Slide 27 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Wednesday, December 5, 12

Slide 28

Slide 28 text

Riak Node Riak Node Riak Node Riak Node Riak Node Large Object Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API Riak CS S3 API Reporting API 4. Riak replicates and stores chunks Wednesday, December 5, 12

Slide 29

Slide 29 text

THE HOOD UNDER Wednesday, December 5, 12

Slide 30

Slide 30 text

consistent hashing replicas virtual nodes (vnodes) handoff procedues gossip protocols anti-entropy REPLICATION and ADMINISTRATION Wednesday, December 5, 12

Slide 31

Slide 31 text

Riak Object {“key”: “value”} values stored against keys key/value + metadata = object fundamental unit of replication Wednesday, December 5, 12

Slide 32

Slide 32 text

Buckets <>/<> virtual namespace bucket + key = object address buckets have properties all objects inherit bucket props Wednesday, December 5, 12

Slide 33

Slide 33 text

Quorum requests N R W PR/PW DW 3 2 2 Wednesday, December 5, 12

Slide 34

Slide 34 text

Consistent Hashing hash(<>/<>) Wednesday, December 5, 12

Slide 35

Slide 35 text

The Ring Wednesday, December 5, 12

Slide 36

Slide 36 text

The Ring • 160-bit integer keyspace 0 2160/2 2160/4 Wednesday, December 5, 12

Slide 37

Slide 37 text

The Ring • 160-bit integer keyspace • divided into #xed number of evenly-sized partitions 32 partitions 0 2160/2 2160/4 Wednesday, December 5, 12

Slide 38

Slide 38 text

The Ring • 160-bit integer keyspace • divided into #xed number of evenly-sized partitions • partitions are claimed by nodes in the cluster 32 partitions node 0 node 1 node 2 node 3 0 2160/2 2160/4 Wednesday, December 5, 12

Slide 39

Slide 39 text

The Ring • 160-bit integer keyspace • divided into #xed number of evenly-sized partitions • partitions are claimed by nodes in the cluster • replicas go to the N partitions following the key node 0 node 1 node 2 node 3 Wednesday, December 5, 12

Slide 40

Slide 40 text

The Ring • 160-bit integer keyspace • divided into #xed number of evenly-sized partitions • partitions are claimed by nodes in the cluster • replicas go to the N partitions following the key node 0 node 1 node 2 node 3 hash(“meetups/CloudDC”) N=3 Wednesday, December 5, 12

Slide 41

Slide 41 text

Scaling $ riak start $ riak-admin cluster join $ riak-admin cluster plan $ riak-admin cluster commit Wednesday, December 5, 12

Slide 42

Slide 42 text

$ riak-admin cluster plan =============================== Staged Changes ================================ Action Nodes(s) ------------------------------------------------------------------------------- join '[email protected]' join '[email protected]' join '[email protected]' ------------------------------------------------------------------------------- NOTE: Applying these changes will result in 1 cluster transition ############################################################################### After cluster transition 1/1 ############################################################################### ================================= Membership ================================== Status Ring Pending Node ------------------------------------------------------------------------------- valid 100.0% 25.0% '[email protected]' valid 0.0% 25.0% '[email protected]' valid 0.0% 25.0% '[email protected]' valid 0.0% 25.0% '[email protected]' ------------------------------------------------------------------------------- Valid:4 / Leaving:0 / Exiting:0 / Joining:0 / Down:0 Transfers resulting from cluster changes: 48 16 transfers from '[email protected]' to '[email protected]' 16 transfers from '[email protected]' to '[email protected]' 16 transfers from '[email protected]' to '[email protected]' $ riak-admin cluster commit Cluster changes committed Wednesday, December 5, 12

Slide 43

Slide 43 text

Failures Wednesday, December 5, 12

Slide 44

Slide 44 text

Failures • node fails X X X X X X X X Wednesday, December 5, 12

Slide 45

Slide 45 text

Failures • node fails • requests go to fallback X X X X X X X X hash(“meetups/CloudDC”) Wednesday, December 5, 12

Slide 46

Slide 46 text

Failures • node fails • requests go to fallback • node comes back hash(“meetups/CloudDC”) Wednesday, December 5, 12

Slide 47

Slide 47 text

Failures • node fails • requests go to fallback • node comes back • “Hando"” - data returns to recovered node hash(“meetups/CloudDC”) Wednesday, December 5, 12

Slide 48

Slide 48 text

Failures • node fails • requests go to fallback • node comes back • “Hando"” - data returns to recovered node • normal operations resume hash(“meetups/CloudDC”) Wednesday, December 5, 12

Slide 49

Slide 49 text

Operations Wednesday, December 5, 12

Slide 50

Slide 50 text

stats DTrace & built-in support track access & storage per user monitor total cluster ops inspect ops with DTrace probes create custom billing policies Wednesday, December 5, 12

Slide 51

Slide 51 text

OPERATIONAL STATS exposed via HTTP resource: /riak-cs/stats block bucket object GET, PUT, DELETE LIST KEYS, CREATE, DELETE, GET/PUT ACL GET, PUT, DELETE HEAD, GET/PUT ACL HISTOGRAMS & COUNTERS Wednesday, December 5, 12

Slide 52

Slide 52 text

TRACK INDIVIDUAL USER’S THE “USAGE” BUCKET ACCESS STORAGE Wednesday, December 5, 12

Slide 53

Slide 53 text

QUERY USAGE STATS GET s3://usage/access_key/options/start_time/end_time access_key: MT_WDIUW64WFQLUP6IOO options: (a = access, b = storage ; j = JSON, x = XML) start_time: 20121017T140000Z (ISO8601) end_time: 20121018T140000Z (ISO8601) via HTTP or S3 Wednesday, December 5, 12

Slide 54

Slide 54 text

{ "Access": { "Errors": [], "Nodes": [ { "Node": "[email protected]", "Samples": [ { "EndTime": "20121018T130000Z", "StartTime": "20121018T120000Z", "UsageRead": { "BytesOut": 10509, "Count": 1 } }, { "EndTime": "20121018T130000Z", Wednesday, December 5, 12

Slide 55

Slide 55 text

"UsageRead": { "BytesOut": 10509, "Count": 1 } }, { "EndTime": "20121018T000000Z", "KeyWrite": { "BytesIn": 104857600, "Count": 1 }, "ListBuckets": { "BytesOut": 406, "Count": 1 }, "StartTime": "20121017T230000Z" }, { "EndTime": "20121018T000000Z", Wednesday, December 5, 12

Slide 56

Slide 56 text

{ "EndTime": "20121020T020000Z", "KeyWrite": { "UserErrorBytesIn": 10240000000, "UserErrorBytesOut": 224, "UserErrorCount": 1 }, you can’t store objects > 5GB USER ERRORS: requests that result in 400-499 response codes Wednesday, December 5, 12

Slide 57

Slide 57 text

{ "Access": "not_requested", "Storage": { "Errors": [], "Samples": [ { "EndTime": "20121018T060204Z", "StartTime": "20121018T060203Z", "some_bucket": { "Bytes": 107167497049, "Objects": 106 }, "empty_bucket": { "Bytes": 0, "Objects": 0 Wednesday, December 5, 12

Slide 58

Slide 58 text

{ "EndTime": "20121017T060202Z", "StartTime": "20121017T060201Z", "some_bucket": { "Bytes": 106014063449, "Objects": 104 }, "empty_bucket": { "Bytes": 0, "Objects": 0 } } ] } } Wednesday, December 5, 12

Slide 59

Slide 59 text

Building Multi-Tenant Applications on RiakCS is Easy! Wednesday, December 5, 12

Slide 60

Slide 60 text

s3curl, pkgcloud, fog, erlcloud, AWS SDKs Every request is SIGNED Wednesday, December 5, 12

Slide 61

Slide 61 text

HTTP Responses Wednesday, December 5, 12

Slide 62

Slide 62 text

FOG https://github.com/basho/fog gem ‘fog’, :git => ‘https://github.com/basho/fog.git’, :branch => ‘riak_cs’ Wednesday, December 5, 12

Slide 63

Slide 63 text

Provisioning API @client = Fog::RiakCS::Provisioning.new( :riakcs_access_key_id => RIAK_CS_ADMIN_KEY, :riakcs_secret_access_key => RIAK_CS_ADMIN_SECRET, :host => RIAK_CS_HOST, :port => RIAK_CS_PORT, :scheme => RIAK_CS_SCHEME ) @client.create_user(email, name) @client.list_users @client.get_user(key_id) @client.enable_user(key_id) @client.disable_user(key_id) @client.regrant_secret(key_id) Wednesday, December 5, 12

Slide 64

Slide 64 text

Usage API @client = Fog::RiakCS::Usage.new( :riakcs_access_key_id => RIAK_CS_ADMIN_KEY, :riakcs_secret_access_key => RIAK_CS_ADMIN_SECRET, :host => RIAK_CS_HOST, :port => RIAK_CS_PORT, :scheme => RIAK_CS_SCHEME ) @client.get_usage( key_id, :format => :json, :types => [access, storage], :start_time => start_time, :end_time => end_time ) Wednesday, December 5, 12

Slide 65

Slide 65 text

FIND ME FOR A DEVELOPER’S TRIAL http://docs.basho.com/riakcs/latest/ Q&A Wednesday, December 5, 12