q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

140
@raqcon shanghai 2013 real-time delivery architecture

Upload: michael-zhang

Post on 10-May-2015

1.918 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

real-time delivery architecture

Page 2: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 3: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

http://twitpic.com/135xa - There’s a plane in the Hudson. I’m on a ferry going to pick up the people. Crazy.!15 Jan 09 Janis Krums @jkrums

Page 4: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

what are the goals?⇢evolve from being solely a web stack

Page 5: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 6: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

LOGICPRESENTATIONROUTING

T-Bird

T-Flock + Haplo

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

Page 7: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

PRESENTATIONROUTING

T-Bird

T-Flock + Haplo

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

LOGIC

Page 8: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

ROUTING

T-Bird

T-Flock + Haplo

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATION

Page 9: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

T-Bird

T-Flock + Haplo

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Page 10: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

T-Flock + Haplo

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

T-Bird

Page 11: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Flock(s)

Gizmoduck

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

T-Bird

T-Flock + Haplo

Page 12: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Flock(s)

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

T-Bird

T-Flock + Haplo

Darkwing

Page 13: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Monorail

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

T-Bird

T-Flock + Haplo

Flock(s)

Darkwing

Page 14: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Monorail

T-Bird

T-Flock + Haplo

Flock(s)

Darkwing

Page 15: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Monorail

T-Bird

T-Flock + Haplo

Flock(s)

Darkwing

Page 16: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

what are the goals?⇢evolve from being solely a web stack

⇢ isolate responsibilities and concerns

⇢site speed and reliability

⇢developer innovation speed

Page 17: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 18: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 19: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 20: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 21: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 22: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 23: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 24: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 25: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 26: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 27: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 28: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 29: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 30: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 31: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 32: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 33: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

Fanout

Tim

elin

e C

ache

Redis

Ingester

Sear

ch C

ache

Redis

Push

Com

pute

HTTP Push

Bat

ch C

ompu

te

Hadoop

@raffi qcon shanghai 2013

Page 34: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Write API

@raffi qcon shanghai 2013

Page 35: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

@raffi qcon shanghai 2013

Page 36: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Tim

elin

e C

ache

RedisRedis

Redis

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

@raffi qcon shanghai 2013

Page 37: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Sear

ch C

ache

Push

Com

pute

Bat

ch C

ompu

te

Hadoop

Write API

Fanout

@raffi qcon shanghai 2013

Page 38: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisRedis

Redis

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

Tim

elin

e C

ache

@raffi qcon shanghai 2013

Page 39: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisRedis

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

Redis

Tim

elin

e C

ache

@raffi qcon shanghai 2013

Page 40: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisRedis

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

Redis

Tim

elin

e C

ache

@raffi qcon shanghai 2013

Page 41: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

@raffi qcon shanghai 2013

Page 42: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

@raffi qcon shanghai 2013

Page 43: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Social Graph Service

@raffi qcon shanghai 2013

Page 44: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Social Graph Service

insert⇢keyed off

“recipient”

⇢pipelined 4k “destinations” at a time

⇢replicated @raffi qcon shanghai 2013

Page 45: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

using redis⇢native list

structure

⇢RPUSHX to only add to cached timelines

Tweet ID BitsUser ID

8 bytes 4 bytes8 bytes

@raffi qcon shanghai 2013

Page 46: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

using redis⇢native list

structure

⇢RPUSHX to only add to cached timelines

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Page 47: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

using redis⇢native list

structure

⇢RPUSHX to only add to cached timelines

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID

Tweet ID BitsUser ID Tweet ID

Tweet ID

Tweet ID

Page 48: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Timeline Service

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

@raffi qcon shanghai 2013

Page 49: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Timeline Service

Redis

@raffi qcon shanghai 2013

Page 50: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Timeline Service

Redis

@raffi qcon shanghai 2013

Page 51: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Timeline Service

Redis

@raffi qcon shanghai 2013

Page 52: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 53: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Timeline Service

Redis

@raffi qcon shanghai 2013

Page 54: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Timeline Service

Ingester

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Page 55: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Sear

ch C

ache

RedisRedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Timeline Service

Ingester

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Page 56: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

EarlybirdRedis

Earlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Timeline Service

Ingester

Sear

ch In

dex

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Page 57: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Timeline Service

Ingester

Sear

ch In

dex

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Page 58: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisEarlybird

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Timeline Service

Ingester

Sear

ch In

dex

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

Redis

Page 59: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

xRedis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 60: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Blender

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

xRedis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 61: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 62: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

blender⇢queries one

replica of all indexes

⇢merges & ranks results

Page 63: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 64: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 65: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 66: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

Page 67: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 68: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Push

Com

pute

HTTP Push

Mobile Push B

atch

Com

pute

HadoopSe

arch

Inde

x

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 69: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

HTTP Push

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 70: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 71: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 72: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

⇢maintains persistent connections with end clients

⇢processes tweet & social graph events

⇢event-based “router”

http push / hosebird

Page 73: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Hosebird

Hosebird

Hosebird Firehose

User Streams

Track / Follow

Write API

Text

Page 74: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Hosebird

Hosebird Firehose

User Streams

Track / Follow

HosebirdWrite API

Page 75: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Hosebird

Hosebird Firehose

User Streams

Track / Follow

HosebirdWrite API

event propagation⇢write API sends all events into hosebird;

sees content creation events, social graph changes, etc.

⇢different queues for public tweets, protected tweets, social events, etc.

Page 76: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Firehose

User Streams

Track / Follow

Hosebird

Hosebird

Hosebird

Write API

Page 77: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Firehose

User Streams

Track / Follow

Hosebird

Hosebird

Hosebird

Write API

event cascading⇢bandwidth management

⇢simultaneous connection management (~1m long lived & open connections to this cluster)

Page 78: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Streams

Track / Follow

Firehose

Hosebird

Hosebird

Hosebird

Write API

Page 79: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Streams

Track / Follow

Firehose

Hosebird

Hosebird

Hosebird

Write API

firehose⇢edge machine simply outputs the public

tweet queue

⇢only allow a limited number of firehoses per hosebird box for bandwidth management

Page 80: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Streams

Firehose

Track / FollowHosebird

Hosebird

Hosebird

Write API

Page 81: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Streams

Firehose

Track / FollowHosebird

Hosebird

Hosebird

Write API

track / follow⇢simple query based on tweet content

⇢keeps list of terms / users of interest

⇢parses public tweets at the edge, and if term matches a token, or user is of interest, then route

Page 82: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Firehose

Track / Follow

User Streams

Hosebird

Hosebird

Hosebird

Write API

Page 83: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Firehose

Track / Follow

User Streams

Hosebird

Hosebird

Hosebird

Write API

user streams⇢replicate home timeline experience

⇢upon login, obtain “following” list

⇢keep cached following list coherent by seeing social graph updates

⇢route tweet if from a followed user

Page 84: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 85: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 86: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 87: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 88: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Mobile Push B

atch

Com

pute

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybird

@raffi qcon shanghai 2013

Page 89: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 90: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Page 91: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Social Graph Service

@raffi qcon shanghai 2013

Page 92: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Social Graph Service

Page 93: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Social Graph Service

@raffi qcon shanghai 2013

Page 94: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Social Graph Service

Page 95: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 96: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Pull Push

Targeted twitter.com home_timeline API

User / Site Streams Mobile Push (SMS, etc.)

Queried Search API Track / Follow Streams

Page 97: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 98: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Hadoop

Bat

ch C

ompu

te

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 99: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 100: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Page 101: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 102: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 103: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 104: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Asynchronous Path

Query Path

Bat

ch C

ompu

te

Hadoop

Synchronous Path

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 105: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Synchronous Path

Query Path

Bat

ch C

ompu

te

Hadoop

Asynchronous Path

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 106: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Asynchronous Path

Synchronous Path

Bat

ch C

ompu

te

Hadoop

Query Path

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 107: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 108: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Writ

e Pa

th

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Rea

d Pa

th

@raffi qcon shanghai 2013

Page 109: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Rea

d Pa

th

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Writ

e Pa

th

@raffi qcon shanghai 2013

Page 110: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

@raffi qcon shanghai 2013

Page 111: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

things we’re trying...

Page 112: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 113: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

Ingester Fanout

Sear

ch In

dex

RedisEarlybird

EarlybirdRedis

RedisRedis

@raffi qcon shanghai 2013

Page 114: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester Fanout

Tim

elin

e C

ache

Sear

ch In

dex

RedisRedis

RedisRedisEarlybird

Earlybird

Write API

@raffi qcon shanghai 2013

Page 115: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Ingester Fanout

Tim

elin

e C

ache

Sear

ch In

dex

RedisRedis

RedisRedisEarlybird

Earlybird

Write API

@raffi qcon shanghai 2013

Page 116: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Tim

elin

e C

ache

Sear

ch In

dex

RedisRedis

RedisRedisEarlybird

Earlybird

Write API

Ingester Fanout

@raffi qcon shanghai 2013

Page 117: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Tim

elin

e C

ache

Sear

ch In

dex

RedisRedis

RedisRedisEarlybird

Earlybird

Write API

Ingester Fanout

@raffi qcon shanghai 2013

Page 118: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

RedisRedis

RedisRedisEarlybird

Earlybird

Write API

Ingester Fanout

Sear

ch In

dex

Tim

elin

e C

ache

@raffi qcon shanghai 2013

Page 119: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

Ingester Fanout

Sear

ch In

dex

RedisEarlybird

EarlybirdRedis

RedisRedis

Tim

elin

e C

ache

@raffi qcon shanghai 2013

Page 120: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

Ingester Fanout

Sear

ch In

dex

RedisEarlybird

EarlybirdRedis

RedisRedis

Tim

elin

e C

ache

search index ⇢[‘hello’,‘world’]

fanout index ⇢[@danadanger, ...]

@raffi qcon shanghai 2013

Page 121: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 122: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 123: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 124: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 125: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 126: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 127: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 128: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 129: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Write API

Ingester Fanout

Sear

ch In

dex

RedisEarlybird

EarlybirdRedis

RedisRedis

Tim

elin

e C

ache

fan-in⇢O(1) write

⇢O(n) read

fan-out⇢O(n) write

⇢O(1) read

Page 130: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timeline home_timeline:raffi

Page 131: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

User Intent Query Expansion

“Hello, world” “Hello” AND “world”

@raffi’s home timelinehome_timeline:raffi

OR user_timeline:taylorswift13

Page 132: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

streaming compute⇢continuous computation

⇢driven by the events that come into twitter

⇢generalizing the push mechanism

Page 133: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Bat

ch C

ompu

te

Hadoop

Push

Com

pute

HTTP Push

Sear

ch In

dex

Blender

Redis

Timeline Service

Ingester

Earlybird

Write API

Fanout

RedisRedis

Tim

elin

e C

ache

RedisEarlybirdMobile Push

Page 134: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

timeline query statistics⇢>150m active users worldwide

⇢300k qps poll-based timelines @ 1ms p50 / 4ms p99

⇢30k qps search-based timelines

Page 135: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

tweet input⇢~340m tweets per day

⇢~4K/sec daily average

⇢~6K/sec daily peak

⇢>10K/sec during large events

Page 136: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 137: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

followingfollowed by

Page 138: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

Page 139: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

@raffi qcon shanghai 2013

timeline delivery statistics⇢26b deliveries / day (~18m / min)

⇢3.5 seconds @ p50 to deliver to 1m

⇢~300k deliveries / sec

Page 140: Q con shanghai2013-[jains krums]-[real-time-delivery-archiecture]

thanks!