GitHub architecture: how GitHub scaled (5 case studies)

GitHub.com runs on MySQL. GitHub's 2021 post covers defining schema domains and linting cross-domain queries so table groups could move onto separate MySQL clusters. Its 2023 post covers upgrading the whole fleet to MySQL 8.0 with staged replicas and a working rollback path, at 5.5 million QPS, 300+ TB and 50+ database clusters. Push processing was broken into smaller, independently retried jobs driven by Kafka events.

We track 5 public engineering write-ups by GitHub, published between 2021 and 2026. Techniques that come up more than once: read replicas (2). Stack mentioned most: Azure Blob Storage (2), Git (2), MySQL (2), Ruby on Rails (2) and Spokes (2). 3 of the 5 state concrete scale numbers, for example "99.99999% of repositories copied to Azure". Each card below links to our short summary and the original post.

Tech used in GitHub's scaling write-ups

GitHub scaling timeline: every story, summarized

  1. 2021-09-27

    Partitioning GitHub's relational databases to handle scale

    GitHub defined schema domains and linted cross-domain queries so it could move table groups onto separate MySQL clusters.

    vertical partitioningschema domainsonline migrationMySQLRuby on RailsVitess

    Read the original post →

  2. 2023-12-07

    Upgrading GitHub.com to MySQL 8.0

    How GitHub upgraded its whole MySQL fleet to 8.0 with staged replicas and a working rollback path.

    5.5 million QPS300+ TBfleet upgradereplicationrollback planningMySQL

    Read the original post →

  3. 2024-06-11

    How we improved push processing on GitHub

    GitHub broke one huge push-processing job into smaller, independently retried jobs driven by Kafka events.

    queuesjob decompositionRuby on RailsKafka

    Read the original post →

  4. 2026-10-06

    Building Git infrastructure for agent-scale development

    GitHub explains why agent workloads strain Spokes, which keeps five durable copies of each repo on fileserver disks, so every added read replica slows writes. The new design coordinates only the ref update, moves compaction and GC to separate workers, and separates storage from compute: Azure Blob Storage holds the authoritative data while lightweight caching workers serve reads.

    473.3 billion Git events/month7.38 billion commits in Sept 2026control plane separationread replicascachingworkload isolationGitSpokesAzure Blob Storage

    Read the original post →

  5. 2026-10-21

    The bridge to agent-scale Git infrastructure

    GitHub has copied 99.99999% of its Git repositories to Azure, where most now keep two of their five replicas and Azure serves about half of Git traffic. The busiest remaining repositories were blocked by a ~25ms cross-region round trip, because Spokes held a repository-wide lock for each write while waiting on the slowest healthy replica. Scoping the quorum to individual Git references lets writes to different branches proceed in parallel (3-4x higher throughput in internal testing), and a virtual write replica that streams writes into Azure Blob Storage lets stateless read replicas scale out on demand.

    99.99999% of repositories copied to AzureAzure serves about half of Git trafficper-reference quorumstorage/compute separationcloud migrationread replicasGitSpokesAzureAzure Blob Storage

    Read the original post →

FAQ

What database does GitHub use?

MySQL. The GitHub posts we track describe 50+ MySQL database clusters, 300+ TB and 5.5 million QPS (2023), with table groups split across clusters by schema domain (2021).

How did GitHub upgrade to MySQL 8.0?

GitHub upgraded its whole MySQL fleet to 8.0 with staged replicas, so the new version served real traffic before becoming primary, and kept a working rollback path (2023 post).

How does GitHub process git pushes at scale?

GitHub's 2024 post describes breaking one huge push-processing job into smaller, independently retried jobs driven by Kafka events, in its Ruby on Rails app.

The best scaling write-ups, weekly

One email a week. No spam.

Subscribe

Browse all 87 topics →