32
Twitter Inc. | @manju Caching At Twitter and moving towards a persistent, in-memory key-value store Manju Rajashekhar @manju Friday, November 30, 12

Twitter Inc. | @manju

Embed Size (px)

Citation preview

Page 1: Twitter Inc. | @manju

Twitter Inc. | @manju

Caching At Twitter and moving towards a persistent, in-memory key-value storeManju Rajashekhar@manju

Friday, November 30, 12

Page 2: Twitter Inc. | @manju

Twitter Inc. | @manju

OutlineCaching System ArchitectureTwemcacheTwemproxyLearningsin-memory persistent store

Friday, November 30, 12

Page 3: Twitter Inc. | @manju

Twitter Inc. | @manju

Cache In Production~30 TB of cache> 2000 instances of caches~500 machinesAverage cache instance is 15G~2 trillion queries/day23 million queries/sec

Friday, November 30, 12

Page 4: Twitter Inc. | @manju

Twitter Inc. | @manju

Cache SystemsCache is an Optimization forCPU

Disk (write through / write back)

Friday, November 30, 12

Page 5: Twitter Inc. | @manju

Twitter Inc. | @manju

Cache API

CRUD API (memcache)

set(“key”, “value”)get(“key”)

delete(“key”)....

DS API (redis)

push(“key”, “element-1”)pop(“key”)

get(“key”, “index”)....

Friday, November 30, 12

Page 6: Twitter Inc. | @manju

Twitter Inc. | @manju

Caching System: Components

Protocol Encoder / Decoder

Object Store

Routing / Sharding

Heartbeating / Liveness

Client Proxy Server

Simple distributed components

Friday, November 30, 12

Page 7: Twitter Inc. | @manju

Twitter Inc. | @manju

Client, Proxy & Server

C

C

C

P

P

P

S

S

S

S

C

C

C

m m’ n

m >> nm’ < n

Friday, November 30, 12

Page 8: Twitter Inc. | @manju

Twitter Inc. | @manju

TwemcacheBased on memcached 1.4.4Running in production since Jan ’11code: github.com/twitter/twemcache

Friday, November 30, 12

Page 9: Twitter Inc. | @manju

Twitter Inc. | @manju

FeaturesCustom Eviction AlgorithmThread-local stats collectorCommand Logger

Friday, November 30, 12

Page 10: Twitter Inc. | @manju

Twitter Inc. | @manju

Eviction (1)New Item

LRU Eviction

Friday, November 30, 12

Page 11: Twitter Inc. | @manju

Twitter Inc. | @manju

Eviction (2)

New Item

Items of different sizes

Friday, November 30, 12

Page 12: Twitter Inc. | @manju

Twitter Inc. | @manju

Eviction (3)

B1

B2

B3

Per Slabclass LRU Eviction = calcification, pseudo OOM

Friday, November 30, 12

Page 13: Twitter Inc. | @manju

Twitter Inc. | @manju

Slab EvictionB1

B2

B3

Slab Eviction = deterministic behavior

Friday, November 30, 12

Page 14: Twitter Inc. | @manju

Twitter Inc. | @manju

MotivationKeys accessed/updated/retrieved in the past 24hrs- What data is hot and what is not?

- What should the heap size be to cache for 24 hours worth of data?

How many times and when is a key retrieved/updated after insertion?- Explains why hit rate is so

- Determine a reasonable TTL

- Helps construct a heat map to decide cache size / hit rate trade off

What’s the stats per namespace? (“foo:” vs “bar:”)- Does co-habitat make sense?

Friday, November 30, 12

Page 15: Twitter Inc. | @manju

Twitter Inc. | @manju

Async Command LoggerLog Format

172.25.135.205:55438 - [09/Jul/2012:18:15:45 -0700] "set foo 0 0 3" 1 6172.25.135.205:55438 - [09/Jul/2012:18:15:46 -0700] "get foo" 0 14172.25.135.205:55438 - [09/Jul/2012:18:15:57 -0700] "incr bar 1" 3 9172.25.135.205:55438 - [09/Jul/2012:18:16:05 -0700] "set bar 0 0 1" 1 6172.25.135.205:55438 - [09/Jul/2012:18:16:09 -0700] "incr bar 1" 0 1172.25.135.205:55438 - [09/Jul/2012:18:16:13 -0700] "get bar" 0 12....

Client IP Timestamp Type Key Status Size

Friday, November 30, 12

Page 16: Twitter Inc. | @manju

Twitter Inc. | @manju

single producer, consumerworker1 logger

write ptr

read ptr

worker 2

write ptr

read ptr

...

Friday, November 30, 12

Page 17: Twitter Inc. | @manju

Twitter Inc. | @manju

Twemproxy (nutcracker)Running in production since Nov ’11Supports memcached and rediscode: github.com/twitter/twemproxy

Friday, November 30, 12

Page 18: Twitter Inc. | @manju

Twitter Inc. | @manju

Motivation

Unicorn

C

C

Unicorn

m >> n => 20mn

Unicorn

m n

Friday, November 30, 12

Page 19: Twitter Inc. | @manju

Twitter Inc. | @manju

Deployed as Local Proxy

U

C

CU

m n

m >> n

P

P

U P

=> m

Friday, November 30, 12

Page 20: Twitter Inc. | @manju

Twitter Inc. | @manju

Twemproxy

P

get k1

delete k3, get k2, get k1get k2

delete k3

Friday, November 30, 12

Page 21: Twitter Inc. | @manju

Twitter Inc. | @manju

get k1

delete k3

time

get k2

get k1

delete k3get k2

Pipelining

Friday, November 30, 12

Page 22: Twitter Inc. | @manju

Twitter Inc. | @manju

Twemproxy in ProductionMany thousands machines10 - 20 server pools per instanceEach instance typically handles:few hundred client connections

proxies to few thousands servers

Eg: 60K -> 3K connections~2K rps, 200 KB/sec (req), 1MB/sec (rsp)

Friday, November 30, 12

Page 23: Twitter Inc. | @manju

Twitter Inc. | @manju

Why Proxy?Persistent server connectionsfaster client restarts

filter close from client

Protocol pipeliningEnables simple and dumb clientsHides semantics of underlying cache poolDynamic configuration

Friday, November 30, 12

Page 24: Twitter Inc. | @manju

Twitter Inc. | @manju

Why not Proxy?Extra network hopTradeoff latency for throughput

Pipelining is your friend

Friday, November 30, 12

Page 25: Twitter Inc. | @manju

Twitter Inc. | @manju

What did we learn?Hide caches behind abstraction layerIndirection (proxies) enables horizontal scalingProxies add overhead and extra network hopMinimize network hops by colocating proxies next to server / clientsUse pipelining to overcome additional overhead

Friday, November 30, 12

Page 26: Twitter Inc. | @manju

Twitter Inc. | @manju

New System CharacteristicsPredictable worst case latencyReplicatedRead my WriteEventually consistentUse case: read volume >> write volume

Friday, November 30, 12

Page 27: Twitter Inc. | @manju

Twitter Inc. | @manju

key/value scheme

struct value { map<short, binary> fields = {} map<short, long> fieldTimestamps = {}}

key = (outer-key, inner-key)

Friday, November 30, 12

Page 28: Twitter Inc. | @manju

Twitter Inc. | @manju

Indirection and Colocation

C CC C

M

Friday, November 30, 12

Page 29: Twitter Inc. | @manju

Twitter Inc. | @manju

Horizontal Scaling

C CC C

M

C CC C

M

C CC C

M

M

Friday, November 30, 12

Page 30: Twitter Inc. | @manju

Twitter Inc. | @manju

Putting it all together

C CC C

M

C CC C

M

(1)(2)2 replicas

(3)

(4)

Friday, November 30, 12

Page 31: Twitter Inc. | @manju

Twitter Inc. | @manju

Putting it all together

C CC C

M

C CC C

M

Pub/Sub

(1)(2)

2 in-memory replicas

(3)

(4)

(5)

PersistentStore

(5’)

Friday, November 30, 12

Page 32: Twitter Inc. | @manju

Twitter Inc. | @manju

Questions?

Friday, November 30, 12