Heads up — this site is still under development.

All articles
System DesignDatabasesAdvanced

How Discord serves millions of messages a second

One channel, a hundred thousand people typing at once. Discord stores it in a data model most tutorials tell you never to build. Here's why it holds up.

J

Jodo

Jun 9, 2026 · 13 min read

How Discord serves millions of messages a second

Most explanations of message fan-out at scale start with a diagram you can't read and a wall of acronyms. This one starts with the question you actually asked, then builds the answer piece by piece until how discord serves millions of messages a second feels obvious instead of intimidating.

How to read this

Every code block runs as-is. Copy it, change a number, watch what breaks. That's where the understanding comes from, not the prose.

Start with the problem

Before any of the machinery makes sense, you have to feel the problem it solves. So forget the official terminology for a second and look at what goes wrong without it.

before.ts
ts
// The naive version — works on your machine, fails in production
async function handle(req: Request) {
  const data = await db.query(req.body.id)
  return Response.json(data)
}

Now the real version

Once the failure mode is clear, the fix stops looking like ceremony and starts looking like the only reasonable thing to do. Notice that nothing here is clever. It's just careful.

after.ts
ts
async function handle(req: Request) {
  const id = parse(req)              // validate at the edge
  const data = await db
    .query(id)
    .catch(() => fallback(id))       // degrade, don't crash
  return Response.json(data, { headers: cacheHeaders })
}
  • Validate at the boundary so bad input never reaches your core.
  • Have a plan for the moment a dependency is slow or down.
  • Measure the real path before you optimize the imagined one.

You don't understand a system until you can predict how it fails.

every on-call engineer, eventually

Where to go next

You now have the mental model. The fastest way to lock it in is to break something on purpose: change a value, pull a cable, kill a process, and watch how the system reacts. The recovery is the lesson.

Developer Notes

Liked this? I send one like it every Friday.

Join 48K+ developers. No spam, unsubscribe in one click.

Subscribe

Command Palette

Search for a command to run...