cassandra @formspring

143
Cassandra @Formspring Tuesday, August 30, 2011

Upload: martincozzi

Post on 15-Jan-2015

2.630 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Cassandra @Formspring

Cassandra @Formspring

Tuesday, August 30, 2011

Page 2: Cassandra @Formspring

Cassandra @Formspring

Yet another Knight, Dragon and Princess Story.

Tuesday, August 30, 2011

Page 3: Cassandra @Formspring

Formspring helps people find out more about each other by sharing interesting & personal responses

Tuesday, August 30, 2011

Page 4: Cassandra @Formspring

25M users

Tuesday, August 30, 2011

Page 5: Cassandra @Formspring

3.5B responses

Tuesday, August 30, 2011

Page 6: Cassandra @Formspring

Tuesday, August 30, 2011

Page 7: Cassandra @Formspring

Tuesday, August 30, 2011

Page 8: Cassandra @Formspring

Tuesday, August 30, 2011

Page 9: Cassandra @Formspring

Tuesday, August 30, 2011

Page 10: Cassandra @Formspring

Tuesday, August 30, 2011

Page 11: Cassandra @Formspring

Tuesday, August 30, 2011

Page 12: Cassandra @Formspring

Tuesday, August 30, 2011

Page 13: Cassandra @Formspring

Tuesday, August 30, 2011

Page 14: Cassandra @Formspring

Tuesday, August 30, 2011

Page 15: Cassandra @Formspring

Tuesday, August 30, 2011

Page 16: Cassandra @Formspring

Tuesday, August 30, 2011

Page 17: Cassandra @Formspring

Tuesday, August 30, 2011

Page 18: Cassandra @Formspring

Tuesday, August 30, 2011

Page 19: Cassandra @Formspring

Tuesday, August 30, 2011

Page 20: Cassandra @Formspring

Tuesday, August 30, 2011

Page 21: Cassandra @Formspring

Tuesday, August 30, 2011

Page 22: Cassandra @Formspring

Follow[ing|ers]

Tuesday, August 30, 2011

Page 23: Cassandra @Formspring

Tuesday, August 30, 2011

Page 24: Cassandra @Formspring

Tuesday, August 30, 2011

Page 25: Cassandra @Formspring

Tuesday, August 30, 2011

Page 26: Cassandra @Formspring

Tuesday, August 30, 2011

Page 27: Cassandra @Formspring

Our situation before Cassandra

Tuesday, August 30, 2011

Page 28: Cassandra @Formspring

MySQL + Memcache

Tuesday, August 30, 2011

Page 29: Cassandra @Formspring

MySQL + Memcache

• Flat MySQL table

Tuesday, August 30, 2011

Page 30: Cassandra @Formspring

MySQL + Memcache

• Flat MySQL table

• Indexes (Followers vs Following)

Tuesday, August 30, 2011

Page 31: Cassandra @Formspring

MySQL + Memcache

• Flat MySQL table

• Indexes (Followers vs Following)

• Memcache

Tuesday, August 30, 2011

Page 32: Cassandra @Formspring

Memcache

• Stored as JSON list

Tuesday, August 30, 2011

Page 33: Cassandra @Formspring

Memcache

• Stored as JSON list

• Can get out of sync

Tuesday, August 30, 2011

Page 34: Cassandra @Formspring

MySQL

• Hundreds of millions of rows

Tuesday, August 30, 2011

Page 35: Cassandra @Formspring

MySQL

• Hundreds of millions of rows

• m2.4xl EC2 instance

Tuesday, August 30, 2011

Page 36: Cassandra @Formspring

It all started with a Feature.

Tuesday, August 30, 2011

Page 37: Cassandra @Formspring

QOTD

Tuesday, August 30, 2011

Page 38: Cassandra @Formspring

QOTD

Tuesday, August 30, 2011

Page 39: Cassandra @Formspring

QOTD

• Feb: 35K Followers

Tuesday, August 30, 2011

Page 40: Cassandra @Formspring

QOTD

• Feb: 35K Followers

• Mid-Feb: 100K

Tuesday, August 30, 2011

Page 41: Cassandra @Formspring

QOTD

• Feb: 35K Followers

• Mid-Feb: 100K

• Growing about 30K a week.

Tuesday, August 30, 2011

Page 42: Cassandra @Formspring

QOTD

• Feb: 35K Followers

• Mid-Feb: 100K

• Growing about 30K a week.

• 200K: closer to Memcache 1MB limit.

Tuesday, August 30, 2011

Page 43: Cassandra @Formspring

QOTD

• Feb: 35K Followers

• Mid-Feb: 100K

• Growing about 30K a week.

• 200K: closer to Memcache 1MB limit.

• (with gz compaction . . .)

Tuesday, August 30, 2011

Page 44: Cassandra @Formspring

Then we added more features . . .

Tuesday, August 30, 2011

Page 45: Cassandra @Formspring

Tuesday, August 30, 2011

Page 46: Cassandra @Formspring

Tuesday, August 30, 2011

Page 47: Cassandra @Formspring

Temporary solution

Tuesday, August 30, 2011

Page 48: Cassandra @Formspring

Redis

• Key : JSON blob of IDs

Tuesday, August 30, 2011

Page 49: Cassandra @Formspring

Redis

• Key : JSON blob of IDs

• ~2-3s / insert

Tuesday, August 30, 2011

Page 50: Cassandra @Formspring

Frontend Ask

MySQLMemCache

Tuesday, August 30, 2011

Page 51: Cassandra @Formspring

OutboxQW

Frontend Ask

MySQLMemCache

Tuesday, August 30, 2011

Page 52: Cassandra @Formspring

OutboxQW

Frontend Ask

SELECT account_idFROM follow WHERE following = 1234 MySQL

MemCache

Tuesday, August 30, 2011

Page 53: Cassandra @Formspring

OutboxQW

Frontend Ask

MySQLMemCache

OH SHIT

Tuesday, August 30, 2011

Page 54: Cassandra @Formspring

OutboxQW

Frontend Ask

OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 55: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messages

OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 56: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 57: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQW

Inbox Object

InboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 58: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQW

Inbox Object

InboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

*HANGING*OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 59: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQW

Inbox Object

InboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

*OOM*OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 60: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQW

Inbox Object

InboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

OutboxQW

OutboxQW

OutboxQW

OutboxQW

OutboxQW

OutboxQW

OH SHIT

MySQLMemCache

Tuesday, August 30, 2011

Page 61: Cassandra @Formspring

OutboxQW

Frontend Ask

Gazillion messagesInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQW

Inbox Object

InboxQWInboxQWInboxQWInboxQWInboxQWInboxQWInboxQWs

OutboxQW

OutboxQW

OutboxQW

OutboxQW

OutboxQW

OH SHIT

MySQLMemCacheOOM

Tuesday, August 30, 2011

Page 62: Cassandra @Formspring

We need a solution

Tuesday, August 30, 2011

Page 63: Cassandra @Formspring

Fast

Tuesday, August 30, 2011

Page 64: Cassandra @Formspring

Tuesday, August 30, 2011

Page 65: Cassandra @Formspring

Step 1: Research

Tuesday, August 30, 2011

Page 66: Cassandra @Formspring

Tuesday, August 30, 2011

Page 67: Cassandra @Formspring

Tuesday, August 30, 2011

Page 68: Cassandra @Formspring

Tuesday, August 30, 2011

Page 69: Cassandra @Formspring

Tuesday, August 30, 2011

Page 70: Cassandra @Formspring

Tuesday, August 30, 2011

Page 71: Cassandra @Formspring

Our first shot with Cassandra

Tuesday, August 30, 2011

Page 72: Cassandra @Formspring

All Responses

Tuesday, August 30, 2011

Page 73: Cassandra @Formspring

Tuesday, August 30, 2011

Page 74: Cassandra @Formspring

Explain our stack here

Tuesday, August 30, 2011

Page 75: Cassandra @Formspring

Index of responses to questions on the site.

Tuesday, August 30, 2011

Page 76: Cassandra @Formspring

Index of responses to questions on the site.

Tuesday, August 30, 2011

Page 77: Cassandra @Formspring

Explain our stack here

Tuesday, August 30, 2011

Page 78: Cassandra @Formspring

Tuesday, August 30, 2011

Page 79: Cassandra @Formspring

Ask Followers

Tuesday, August 30, 2011

Page 80: Cassandra @Formspring

How to scale ?

Tuesday, August 30, 2011

Page 81: Cassandra @Formspring

Build a Social Graph

Tuesday, August 30, 2011

Page 82: Cassandra @Formspring

Social Graph

Tuesday, August 30, 2011

Page 83: Cassandra @Formspring

Build a Social Graph

• Python

Tuesday, August 30, 2011

Page 84: Cassandra @Formspring

Build a Social Graph

• Python

• Cassandra (Obviously..)

Tuesday, August 30, 2011

Page 85: Cassandra @Formspring

Build a Social Graph

• Python

• Cassandra (Obviously..)

• PyCassa

Tuesday, August 30, 2011

Page 86: Cassandra @Formspring

Build a Social Graph

• Python

• Cassandra (Obviously..)

• PyCassa

• Thrift

Tuesday, August 30, 2011

Page 87: Cassandra @Formspring

4 types of actions

• Following

Tuesday, August 30, 2011

Page 88: Cassandra @Formspring

4 types of actions

• Following

• Followers

Tuesday, August 30, 2011

Page 89: Cassandra @Formspring

4 types of actions

• Following

• Followers

• Blocks

Tuesday, August 30, 2011

Page 90: Cassandra @Formspring

4 types of actions

• Following

• Followers

• Blocks

• Blockers

Tuesday, August 30, 2011

Page 91: Cassandra @Formspring

Thrift

Tuesday, August 30, 2011

Page 92: Cassandra @Formspring

Tuesday, August 30, 2011

Page 93: Cassandra @Formspring

Tuesday, August 30, 2011

Page 94: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 95: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 96: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 97: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 98: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 99: Cassandra @Formspring

Cassandra

Tuesday, August 30, 2011

Page 100: Cassandra @Formspring

Python + Pycassa

Tuesday, August 30, 2011

Page 101: Cassandra @Formspring

Python + Pycassa

Column Families

Tuesday, August 30, 2011

Page 102: Cassandra @Formspring

Python + Pycassa

Get list of Follow[ers/ing]

Tuesday, August 30, 2011

Page 103: Cassandra @Formspring

Python + Pycassa

More Queries

Tuesday, August 30, 2011

Page 104: Cassandra @Formspring

Python + Pycassa

Follow user

Tuesday, August 30, 2011

Page 105: Cassandra @Formspring

Switch to Production

Tuesday, August 30, 2011

Page 106: Cassandra @Formspring

Simultaneous writes to MySQL and Cassandra

Tuesday, August 30, 2011

Page 107: Cassandra @Formspring

Cassandra MySQL

Read x

Write x x

Switch to Production

Tuesday, August 30, 2011

Page 108: Cassandra @Formspring

Idempotence is your friend.

Tuesday, August 30, 2011

Page 109: Cassandra @Formspring

Migration from MySQL to Cassandra

Tuesday, August 30, 2011

Page 110: Cassandra @Formspring

Load batches of user info into Cassandra.

Tuesday, August 30, 2011

Page 111: Cassandra @Formspring

It’s OK if it fails.

Tuesday, August 30, 2011

Page 112: Cassandra @Formspring

Remember idempotence is your

friend.

Tuesday, August 30, 2011

Page 113: Cassandra @Formspring

Adjust your capacity

Tuesday, August 30, 2011

Page 114: Cassandra @Formspring

From 4 instancesto

a 12 instances

Tuesday, August 30, 2011

Page 115: Cassandra @Formspring

New Ask Followers Infrastructure

Tuesday, August 30, 2011

Page 116: Cassandra @Formspring

Frontend Ask

CassandraCluster

Tuesday, August 30, 2011

Page 117: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

Tuesday, August 30, 2011

Page 118: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

Tuesday, August 30, 2011

Page 119: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

get_followers(user_id, 0, N)

Tuesday, August 30, 2011

Page 120: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

[‘1234, ‘1238’, ..., ‘1999’]

Tuesday, August 30, 2011

Page 121: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

[‘1234, ‘1238’, ..., ‘1999’]

N Messages

Tuesday, August 30, 2011

Page 122: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

[‘1234, ‘1238’, ..., ‘1999’]

InboxQW

N Messages

Tuesday, August 30, 2011

Page 123: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

[‘1234, ‘1238’, ..., ‘1999’]

InboxQW

N Inbox Object

Tuesday, August 30, 2011

Page 124: Cassandra @Formspring

OutboxQW

Frontend Ask

CassandraCluster

IterativeKW

InboxQW

N Inbox Object

get_followers(user_id, N, N+N)

Tuesday, August 30, 2011

Page 125: Cassandra @Formspring

Count Following

14K/min hits at peak time

Tuesday, August 30, 2011

Page 126: Cassandra @Formspring

Count Followers

40K/min hits at peak time

Tuesday, August 30, 2011

Page 127: Cassandra @Formspring

Reduce our #instances

InboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWs

InboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsOutboxQWs

12x 12x

Tuesday, August 30, 2011

Page 128: Cassandra @Formspring

InboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWs

12x

InboxQWsInboxQWsInboxQWsInboxQWsOutboxQWs

4x

Reduce our #instances

Tuesday, August 30, 2011

Page 129: Cassandra @Formspring

InboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWsInboxQWs

Inbox+

Iterator QW

InboxQWsInboxQWsInboxQWsInboxQWsOutboxQWs

12x 4x

Reduce our #instances

Tuesday, August 30, 2011

Page 130: Cassandra @Formspring

Counts for free with 0.8.1

Tuesday, August 30, 2011

Page 131: Cassandra @Formspring

Counting . . .

Tuesday, August 30, 2011

Page 132: Cassandra @Formspring

Counting is hard

Let’s go Shopping.

Tuesday, August 30, 2011

Page 133: Cassandra @Formspring

Counting

• Fast

Tuesday, August 30, 2011

Page 134: Cassandra @Formspring

Counting

• Fast

• Not-accurate

Tuesday, August 30, 2011

Page 135: Cassandra @Formspring

Counting

• Fast

• Not-accurate

• Faking “Read-repair”

Tuesday, August 30, 2011

Page 136: Cassandra @Formspring

Counting

Tuesday, August 30, 2011

Page 137: Cassandra @Formspring

Ghetto Count

Tuesday, August 30, 2011

Page 138: Cassandra @Formspring

Cassandra allowed us:

• To create new features.

Tuesday, August 30, 2011

Page 139: Cassandra @Formspring

Cassandra allowed us:

• To create new features.

• To scale.

Tuesday, August 30, 2011

Page 140: Cassandra @Formspring

Cassandra allowed us:

• To create new features.

• To scale.

• To save money.

Tuesday, August 30, 2011

Page 141: Cassandra @Formspring

Cassandra allowed us:

• To create new features.

• To scale.

• To save money.

• To sleep. (Almost there)

Tuesday, August 30, 2011

Page 142: Cassandra @Formspring

Cassandra allowed us:

• To create new features.

• To scale.

• To save money.

• To sleep. (Almost there)

• Lots of fun :)

Tuesday, August 30, 2011

Page 143: Cassandra @Formspring

Come work with us !

Tuesday, August 30, 2011