Skip to content

Online Multiplayer Game Server#

Problem statement (interviewer prompt)

Design the server for a fast-paced multiplayer game (FPS / battle royale): handle 100+ player matches, deterministic state replication at 60Hz, client-side prediction + server reconciliation, lag compensation, anti-cheat, and matchmaking at 1M+ concurrent players.

flowchart LR
  P1[Player 1]
  P2[Player 2]
  AUTH[Auth + Lobby]
  GS[Game Server<br/>authoritative state]
  P1 --> AUTH
  P1 --> GS
  P2 --> AUTH
  P2 --> GS
  GS --> P1
  GS --> P2

    classDef client fill:#dbeafe,stroke:#1e40af,stroke-width:1px,color:#0f172a;
    classDef edge fill:#cffafe,stroke:#0e7490,stroke-width:1px,color:#0f172a;
    classDef service fill:#fef3c7,stroke:#92400e,stroke-width:1px,color:#0f172a;
    classDef datastore fill:#fee2e2,stroke:#991b1b,stroke-width:1px,color:#0f172a;
    classDef cache fill:#fed7aa,stroke:#9a3412,stroke-width:1px,color:#0f172a;
    classDef queue fill:#ede9fe,stroke:#5b21b6,stroke-width:1px,color:#0f172a;
    classDef compute fill:#d1fae5,stroke:#065f46,stroke-width:1px,color:#0f172a;
    classDef storage fill:#e5e7eb,stroke:#374151,stroke-width:1px,color:#0f172a;
    classDef external fill:#fce7f3,stroke:#9d174d,stroke-width:1px,color:#0f172a;
    classDef obs fill:#f3e8ff,stroke:#6b21a8,stroke-width:1px,color:#0f172a;
    class P1,P2,AUTH,GS service;
flowchart TB
  subgraph Client
    GAME([Game client])
    PRED([Client prediction])
    INTERP[Entity interpolation]
  end

  subgraph Edge
    LB
    AUTH[Auth / account]
    LOBBY[Lobby / matchmaking]
  end

  subgraph Game[Game session]
    GS[Authoritative server / tick loop]
    SIM[Sim 30-60 Hz]
    SS[Snapshot diffs]
    INPUT[[Input queue per player]]
    LAG[Lag compensation / rewind]
  end

  subgraph Anti[Anti-cheat]
    KERN[Kernel-mode anti-cheat]
    SVR_AUTH[Server-authoritative checks]
    BEHAV[Behavioral detection]
  end

  subgraph Persist[Persistence]
    PROF[(Player profile)]
    INV[(Inventory)]
    LDB[(Leaderboards)]
    REPL[(Match replays)]
  end

  subgraph Voice
    VOIP[VoIP servers]
  end

  subgraph Ops
    METR[Match metrics]
    REGION[Region selection]
    DDOS[DDoS protection]
  end

  Client --> Edge --> Game
  Game --> Persist
  Anti --- Game
  Voice --- Game
  Ops --- Game

    classDef client fill:#dbeafe,stroke:#1e40af,stroke-width:1px,color:#0f172a;
    classDef edge fill:#cffafe,stroke:#0e7490,stroke-width:1px,color:#0f172a;
    classDef service fill:#fef3c7,stroke:#92400e,stroke-width:1px,color:#0f172a;
    classDef datastore fill:#fee2e2,stroke:#991b1b,stroke-width:1px,color:#0f172a;
    classDef cache fill:#fed7aa,stroke:#9a3412,stroke-width:1px,color:#0f172a;
    classDef queue fill:#ede9fe,stroke:#5b21b6,stroke-width:1px,color:#0f172a;
    classDef compute fill:#d1fae5,stroke:#065f46,stroke-width:1px,color:#0f172a;
    classDef storage fill:#e5e7eb,stroke:#374151,stroke-width:1px,color:#0f172a;
    classDef external fill:#fce7f3,stroke:#9d174d,stroke-width:1px,color:#0f172a;
    classDef obs fill:#f3e8ff,stroke:#6b21a8,stroke-width:1px,color:#0f172a;
    class GAME,PRED client;
    class INTERP,AUTH,LOBBY,GS,SIM,SS,LAG,KERN,SVR_AUTH,BEHAV,VOIP,REGION,DDOS service;
    class PROF,INV,LDB,REPL datastore;
    class INPUT queue;
    class METR obs;

Authoritative loop#

  • Server simulates at fixed tick (e.g., 30/60 Hz).
  • Receives inputs, advances sim, broadcasts state diffs.
  • Client predicts locally; corrects when server diverges (rollback).

Lag compensation#

  • Server stores rewindable history (~200 ms).
  • Hit detection: rewind to time T = client tick - latency, then check.

Glossary & fundamentals#

Concepts referenced in this design. Each row links to its canonical page; the tag column shows whether it is a high-level (HLD) or low-level (LLD) concept.

Tag Concept What it is Page
HLD Observability metrics, logs, traces, SLOs observability

Quick reference#

Functional#

  • Real-time game state sync across N players.
  • Lobby + matchmaking.
  • Persistent profiles, leaderboards, inventory.
  • Anti-cheat.
  • Voice chat.

Non-functional#

  • Tick 30-60 Hz; client RTT < 100 ms ideal.
  • 99.95% uptime during match windows.

Capacity#

  • Per game-server: tens to hundreds of concurrent players.
  • Many thousands of servers across regions.

Trade-offs#

  • Server-authoritative = anti-cheat strength; client-side prediction needed for UX.
  • Tick rate: higher = smoother, more bandwidth/CPU.
  • Rollback netcode is gold standard for fighting / FPS.

Refs#

  • "Fast-Paced Multiplayer" Gabriel Gambetta.
  • Valve Source engine networking docs.
  • Riot Games / Epic Games engineering blogs.

FAQ#

How does a multiplayer game server work?#

An authoritative server holds the canonical world state and ticks at 60Hz. Clients send input, predict locally, and reconcile against server snapshots while lag compensation rewinds for hit detection.

What is client-side prediction?#

The client applies its own input immediately and stores it in a buffer. When the server snapshot arrives, the client replays unconfirmed inputs from the new authoritative state.

What is server reconciliation in games?#

If the server's snapshot disagrees with the client's predicted state, the client rewinds to the server tick and replays buffered inputs forward, smoothing visible corrections.

How does lag compensation work?#

When a player fires, the server rewinds opponent positions to the shooter's view time using ping. Hit detection runs on that snapshot, so high-ping players still land shots.

How do you scale to 1M concurrent players?#

Each match runs on a dedicated game server pod. A lobby and matchmaking service slot players into matches and a session broker tells clients which server to connect to.