Skip to content

Design a News Feed (Twitter Timeline), stage 4 of 9: break it

Thirty million followers

Twitter's target was to deliver to a million followers in about 3.5 seconds. Thirty million is a different problem.

System so far· 9 parts
123456789CLIENTAuthorsSERVICEWrite APIDATABASEPost storeQUEUEFan-out queueWORKERFan-out workersSERVICESocial graphCACHETimeline cacheSERVICETimeline serviceCLIENTReaders

Select a component to see what it is responsible for and which state it owns.

  1. 1Authors → Write API: Post
  2. 2Write API → Post store: Store post
  3. 3Write API → Fan-out queue: Fan-out job
  4. 4Fan-out workers → Fan-out queue: Take jobs
  5. 5Fan-out workers → Social graph: Active followers
  6. 6Fan-out workers → Timeline cache: Push ID, trim to 800
  7. 7Readers → Timeline service: GET home timeline
  8. 8Timeline service → Timeline cache: Page of IDs
  9. 9Timeline service → Post store: Hydrate; large accounts' recent posts
  • Request / response
  • Asynchronous

What you need to know

0 of 2 checks done
  1. Averages hide the units of work that hurt. A system that's fine for a 200-follower account can stall on a 30-million-follower one, because that single post becomes a single enormous job, competing with every other delivery.

  2. Work it out

    Fan-out delivers about 1 million timelines in 3.5 seconds. About how many seconds for one post to 31 million followers?
    seconds