Skip to content

Design a News Feed (Twitter Timeline), stage 3 of 9: model

Trace a post to a follower's screen

An author with 200 followers posts. One of those followers opens the app a few seconds later.

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 1 checks done
  1. Tracing a request means following it through each component in order, and noting where the user stops waiting. Everything after that point can be slow or retried without them noticing, but it's also why there's a delay before followers see the post.

  2. Check

    With fan-out on write done asynchronously, how long does the author wait after pressing Post?