Cassandra vs. Redis

64
Cassandra vs. Redis NoSQL Frankfurt 2010-09-28

Transcript of Cassandra vs. Redis

Page 1: Cassandra vs. Redis

Cassandra vs. Redis

NoSQL Frankfurt2010-09-28

Page 2: Cassandra vs. Redis

Who?

• Tim Lossen / @tlossen

• Ruby developer

• Berlin

Page 4: Cassandra vs. Redis

Challenge

Page 5: Cassandra vs. Redis

Requirements

• backend for facebook game

Page 6: Cassandra vs. Redis

Requirements

• backend for facebook game

• 1 mio. daily users

• 10 mio. total users

• 100 KB data per user

Page 7: Cassandra vs. Redis

Requirements

• peak traffic:

• 10.000 concurrent users

• 200.000 requests per minute

Page 8: Cassandra vs. Redis

Requirements

• peak traffic:

• 10.000 concurrent users

• 200.000 requests per minute

• write-heavy workload

Page 9: Cassandra vs. Redis

Sneak Preview

Page 10: Cassandra vs. Redis
Page 11: Cassandra vs. Redis
Page 12: Cassandra vs. Redis
Page 13: Cassandra vs. Redis

Cassandra

Page 14: Cassandra vs. Redis

Overview

• written in Java

• 55.000 lines of code

Page 15: Cassandra vs. Redis

Overview

• written in Java

• 55.000 lines of code

• Thrift API

• clients for Java, Python, Ruby

Page 16: Cassandra vs. Redis

History

• originally developed by facebook

• in production for “inbox search”

Page 17: Cassandra vs. Redis

History

• originally developed by facebook

• in production for “inbox search”

• later open sourced

• top-level apache project

Page 18: Cassandra vs. Redis

Features

• high availability

• no single point of failure

Page 19: Cassandra vs. Redis

Features

• high availability

• no single point of failure

• incremental scalability

Page 20: Cassandra vs. Redis

Features

• high availability

• no single point of failure

• incremental scalability

• eventual consistency

Page 21: Cassandra vs. Redis

2006

Page 22: Cassandra vs. Redis

2007

Page 23: Cassandra vs. Redis

Architecture

• Dynamo-like ring

• partitioning + replication

• all nodes are equal

Page 24: Cassandra vs. Redis

Architecture

• Dynamo-like ring

• partitioning + replication

• all nodes are equal

• Bigtable data model

• column families

Page 25: Cassandra vs. Redis
Page 26: Cassandra vs. Redis

Cluster structure

Page 27: Cassandra vs. Redis

“Cassandra aims to run on top of an in"astructure

of hundreds of nodes.”

Page 28: Cassandra vs. Redis
Page 29: Cassandra vs. Redis

Redis

Page 30: Cassandra vs. Redis

Overview

• written in C

• 13.000 lines of code

Page 31: Cassandra vs. Redis

Overview

• written in C

• 13.000 lines of code

• socket API

• redis-cli• client libs for all major languages

Page 32: Cassandra vs. Redis

Features

• high (write) throughput

• 50 - 100 K ops / second

Page 33: Cassandra vs. Redis

Features

• high (write) throughput

• 50 - 100 K ops / second

• interesting data structures

• lists, hashes, (sorted) sets

• atomic operations

Page 34: Cassandra vs. Redis

Features

• high (write) throughput

• 50 - 100 K ops / second

• interesting data structures

• lists, hashes, (sorted) sets

• atomic operations

• full consistency

Page 35: Cassandra vs. Redis

Architecture

• single instance (not clustered)

• master-slave replication

Page 36: Cassandra vs. Redis

Architecture

• single instance (not clustered)

• master-slave replication

• in-memory database

• append-only log on disk

• virtual memory

Page 37: Cassandra vs. Redis

“Memory is the new disk,disk is the new tape.”

⎯ Jim Gray

Page 38: Cassandra vs. Redis
Page 39: Cassandra vs. Redis

Solution

Page 40: Cassandra vs. Redis

Key Decisions

• keep operations simple

Page 41: Cassandra vs. Redis

Key Decisions

• keep operations simple

• use as few machines as possible

• ideally, only one

Page 42: Cassandra vs. Redis
Page 43: Cassandra vs. Redis

Architecture

• single Redis master

• with virtual memory

• handles all reads / writes

Page 44: Cassandra vs. Redis

Architecture

• single Redis master

• with virtual memory

• handles all reads / writes

• single Redis slave

• as hot standby (for failover)

Page 45: Cassandra vs. Redis

Throughput

• redis-benchmark

• 60 K ops / s = 3.6 mio ops / m

Page 46: Cassandra vs. Redis

Throughput

• redis-benchmark

• 60 K ops / s = 3.6 mio ops / m

• monitoring (rpm, scout)

• ca. 10 ops per request

Page 47: Cassandra vs. Redis

Throughput

• redis-benchmark

• 60 K ops / s = 3.6 mio ops / m

• monitoring (rpm, scout)

• ca. 10 ops per request

• 200 K rpm = 2.0 mio ops / m ✔

Page 48: Cassandra vs. Redis

Capacity 1

• 100 KB / user (on disk)

• 10.000 concurrent users (peak)

Page 49: Cassandra vs. Redis

Capacity 1

• 100 KB / user (on disk)

• 10.000 concurrent users (peak)

• 1 GB memory

• (plus Redis overhead) ✔

Page 50: Cassandra vs. Redis

Capacity 2

• Redis keeps all keys in memory

• 10 mio. total users

• 20 GB / 100 mio. integer keys

Page 51: Cassandra vs. Redis

Capacity 2

• Redis keeps all keys in memory

• 10 mio. total users

• 20 GB / 100 mio. integer keys

• 2 GB memory for keys ✔

Page 52: Cassandra vs. Redis

Data model

• one Redis hash per user

• key: facebook id

Page 53: Cassandra vs. Redis

Data model

• one Redis hash per user

• key: facebook id

• store data as serialized JSON

• booleans, strings, numbers, timestamps ...

Page 54: Cassandra vs. Redis

Advantages

• efficient to swap user data in / out

Page 55: Cassandra vs. Redis

Advantages

• efficient to swap user data in / out

• turns Redis into “document db”

• atomic ops on parts

Page 56: Cassandra vs. Redis

Advantages

• efficient to swap user data in / out

• turns Redis into “document db”

• atomic ops on parts

• easy to dump / restore user data

Page 57: Cassandra vs. Redis

Lessons

Page 58: Cassandra vs. Redis

“You are not facebook.” ⎯ me

Page 59: Cassandra vs. Redis

Advice

• use the right tool for the job

Page 60: Cassandra vs. Redis

Advice

• use the right tool for the job

• avoid scaling out / sharding, if possible

• do the numbers!

Page 61: Cassandra vs. Redis

Advice

• use the right tool for the job

• avoid scaling out / sharding, if possible

• do the numbers!

• keep it simple

Page 62: Cassandra vs. Redis

Q & A

Page 64: Cassandra vs. Redis