Numbers to know
0-day streakReview

Your progress

Level 1

0 XP100 XP to level 2
0day streak
0best streak
0topics started
0cards reviewed
    Review cards

    Progress is stored only in this browser. No account is required.

    Layer 4 · Full breakdown · 18 min · 5 figures

    Numbers to know

    The latencies, throughputs, service limits and object sizes worth carrying into a design round, each labelled with where it comes from and the decision it drives, plus how to re-derive and defend them.

    Numbers to know are the orders of magnitude that let you size a design without running a benchmark: how long a memory read, a disk read or a round trip takes, how much one disk, database, cache or managed partition can sustain, and how big everyday objects are. A number is only useful if you know where it came from and which decision it settles, so every figure here carries a label: measured, documented, derived or assumption.

    Picture it first: stretch a nanosecond into a second

    Slow a computer down a billion times, so that 1 ns lasts 1 s. Reading the CPU’s L1 cache is picking up the pen on your desk: a second. Main memory is a walk to the next room: under two minutes. A random read from a fast SSD is a trip across town: about four hours. A round trip to another server in the same data centre takes nearly a week, a disk seek a season, and one round trip from Pune to Frankfurt four and a half years.

    The exact durations don’t matter. What matters is that each rung is a different kind of errand. Nobody crosses town to fetch a pen, and no design should fetch over the network, inside a loop, what it could read from memory.

    Map it back: the desk is the CPU cache, the next room is RAM, the trip across town is local storage, the neighbouring building is another machine, and a letter abroad is a cross-region call. Good designs keep the hot path on the low rungs.

    Four kinds of number

    Hardware changes every year, so a number you can’t trace is a number you can’t defend. Every figure on this page wears one of four labels:

    • Measured: someone ran it and published the setup, such as Kafka’s 2014 benchmark or Azure’s monthly round-trip medians.
    • Documented: a vendor publishes it as a specification or quota, such as S3’s per-prefix rates or DynamoDB’s per-partition capacity. The most dependable numbers you can quote, but check them, because vendors raise them.
    • Derived: arithmetic from physics or a specification, shown in full, such as the speed of light in fibre or a memory channel’s bandwidth.
    • Assumption: a rule of thumb that depends on your code and hardware, such as requests per app server. Say these out loud as assumptions.

    Interviewers don’t expect you to know a drive’s exact IOPS. They expect the right power of ten and an honest answer to “where does that come from?”

    The latency ladder

    Two classic lists anchor this ladder. Peter Norvig’s “Teach Yourself Programming in Ten Years” gives approximate timings for a typical PC from 2002, and Colin Scott’s interactive version projects the classic list forward year by year from hardware trends. Its flat lines, such as memory latency and data-centre round trips, deserve more trust than its rising curves, as the going-deeper section shows.

    The latency ladder on a log scale, with each value stretched so that 1 ns lasts 1 s. Representative values; ranges and sources are in the table below.Notice The bars look evenly spaced only because the scale is logarithmic: the last rung is 140 million times the first.
    Operation Typical Where it comes from What it decides
    L1 / L2 cache hit ~1 ns / ~4 ns Scott’s model: 3 and 13 cycles at 3 GHz (Norvig: 0.5 and 7 ns) Compact arrays beat pointer-chasing structures
    Mutex lock and unlock, uncontended ~20 ns Norvig 25 ns; Scott 17 ns Locks are cheap until threads fight over them
    Main memory reference ~100 ns Norvig (2002), still 100 ns in Scott’s model An in-process cache hit; 5,000 fit in one 0.5 ms round trip
    Compress 1 KB with Snappy (Google’s Zippy) ~2 µs Scott’s model Compressing before a network hop is nearly free
    Read 1 MB sequentially from RAM ~26 µs Derived: 10⁶ B ÷ 38.4 GB/s, one DDR5-4800 channel (4,800 MT/s × 8 B) Scanning 1 GB in memory takes tens of milliseconds
    Random 4 KiB read, local NVMe ~16–100 µs 16 µs in Scott’s model; up to 100 µs under load is an assumption A flash read costs 150–1,000 memory reads
    Read 1 MB sequentially from NVMe ~150 µs Derived: a PCIe 4.0 ×4 link carries at most 4 × 16 GT/s × 128/130 ÷ 8 ≈ 7.9 GB/s Streaming from flash is cheap
    Random I/O, network-attached volume gp3: single-digit ms; io2 Block Express: under 0.5 ms average Documented On gp3, every page that misses RAM costs milliseconds
    Round trip, same data centre 0.2–0.5 ms Redis’s latency guide: about 200 µs on 1 Gbit/s; Scott’s model: 500 µs 40 sequential queries spend 8–20 ms travelling
    Round trip, across availability zones ~1–2 ms Derived floor: 1 ms for 100 km; AWS documents single-digit ms Synchronous replication across zones is affordable
    Hard-disk random read 5–10 ms Norvig: 8 ms seek; half a turn at 7,200 rpm is 60 ÷ 7,200 ÷ 2 = 4.2 ms About 100–200 random reads a second per disk
    First byte of a small S3 object ~100–200 ms Documented Keep object storage off synchronous hot paths
    Round trip between continents 50–200 ms Azure’s measured medians, next section Region placement and asynchronous cross-region replication

    Memorise the gaps, not the digits

    RAM to local flash is about 150–1,000×. Flash to a data-centre round trip is another 2–30×. A data-centre round trip to an intercontinental one is 100–1,000×. If you remember the gaps, you can rebuild the ladder from any one rung you trust.

    Round trips and the speed of light

    Light in glass fibre travels at about two-thirds of its vacuum speed, roughly 200,000 km a second, so every 100 km of distance costs 0.5 ms each way: 1 ms of round trip per 100 km. That is a floor. Real paths add longer cable routes, routers and queues.

    How much do they add? Microsoft publishes median round trips between Azure regions, measured continuously by probes on its backbone; the current table covers the 30 days to 30 July 2026. Set beside the straight-line floor:

    Route (Azure regions) Distance Floor Measured P50 Ratio
    Central India (Pune) ↔ South India (Chennai) 914 km 9 ms 20 ms 2.2×
    Central India → Southeast Asia (Singapore) 3,784 km 38 ms 53 ms 1.4×
    East US (Virginia) → West US (California) 3,877 km 39 ms 69 ms 1.8×
    Central India → Germany West Central (Frankfurt) 6,679 km 67 ms 140 ms 2.1×
    Central India → East US (Virginia) 12,955 km 130 ms 201 ms 1.6×

    The working rule: measured round trip ≈ 1.5–2× the straight-line floor, more on short hops where fixed overheads dominate. Inside one region, AWS’s fault-isolation whitepaper places availability zones up to about 100 km apart, “close enough to use synchronous replication with single-digit millisecond latency”.

    Round-trip time by distance. The green part of each bar is what physics demands; the rest is cable routes, equipment and queues. Long routes use Azure’s measured medians.Notice Distance, not software, sets the order of magnitude: no optimisation brings Frankfurt closer than 67 ms to Pune.

    What these numbers decide:

    • Synchronous replication. Across zones (1–2 ms) it is cheap. Across India (20 ms) it suits modest write rates. To Europe (140 ms) a single sequential writer manages about 1,000 ÷ 140 ≈ 7 commits a second.
    • Consensus across regions. Google’s SRE workbook budgets about 25 ms per Paxos operation between datacentres a few hundred kilometres apart, so one sequential process manages 40 operations a second, and 10,000 a second needs at least 250 in parallel.
    • User-facing calls. A fresh HTTPS connection costs three round trips (TCP, TLS 1.3, the request) before the first byte. A user in Chennai served from Frankfurt (about 150 ms each; Azure measures 151 between those regions) waits about 450 ms before any server work. That is why multi-region designs home users near their data.

    Throughput per unit

    Throughput numbers describe one unit: one disk, one node, one partition. Your design’s capacity is that number times the number of units, minus headroom. The storage gap matters most, because it decides where data must live.

    RAM Local NVMe EBS io2 Block Express EBS gp3 Local hard disk S3
    Random read ~100 ns ~16–100 µs Under 0.5 ms average Single-digit ms 5–10 ms 100–200 ms to first byte
    Random operations a second Rarely the limit 400,000 reads per 3,750 GB drive Provisioned per volume 3,000 baseline, up to 80,000 ~200 5,500 GETs per prefix
    Survives losing the host No No: “temporary”, physically attached Yes Yes No Yes, regional
    Choose it for Caches, hot working sets Stores that replicate themselves Latency-sensitive databases Default database volumes Cold sequential bulk Blobs, backups, data lakes
    You pay with Price per GB, volatility Rebuilding replicas after host loss Price per IOPS Milliseconds on every miss Seeks Latency, per-request cost
    Where should hot data live? One unit of each tier, compared

    The numbers come from AWS’s EBS and EC2 storage-optimised instance documentation (400,000 random-read IOPS at 4 KiB for one i4i drive) and the SRE workbook’s estimate that “a common 4 TB HDD might be able to sustain 200 IOPS”. That is a 2,000× gap per device. gp3’s baseline is 3,000 IOPS and 125 MiB/s, provisionable to 80,000 IOPS and 2,000 MiB/s; older guides quote 16,000 and 1,000, which now apply only on Outposts. For what this means inside a database engine, see reads and writes.

    Nodes you run

    Unit Planning number Kind Evidence, and what moves it
    Stateless app server ~2,000 requests/s Assumption Twitter in 2013: 200–300 per Rails host, 10–20K per JVM host. Language and downstream calls swing it 50×
    Reverse proxy, small cached responses Tens of thousands/s Assumption Little work per request; TLS and the NIC usually bind first
    SQL primary, small durable writes ~10,000/s Assumption At 1 ms per log flush, one commit per flush caps you at 1,000/s; group commit sharing each flush among ~10 reaches 10,000. Wide rows, many indexes or a working set bigger than RAM pull it down
    SQL node, indexed point reads from memory 10,000–50,000/s Assumption Add read replicas for more
    Redis node ~100,000 ops/s Measured, rounded down The benchmark docs show 180,180 SETs/s with 50 clients, and 1.5–1.8 million/s with 16-command pipelines on a laptop
    Kafka, 3 brokers ~2 million records/s Measured (2014) Kreps’ benchmark: 100-byte records, 3× async replication, 193 MB/s, 2 ms median end-to-end, on 6-core machines with spinning disks and 1 GbE
    Network interface 10–25 Gbps; up to 100 Gbps Documented 1 Gbps = 125 MB/s; S3’s guide cites up to 100 Gb/s on one instance

    Redis’s docs add a warning that applies to every cache: 4 KB values at 100,000 operations a second need 3.2 Gbit/s, so the network often binds before the CPU (see distributed caching).

    Managed-service limits

    Unit Documented limit Past the limit
    S3, per prefix At least 3,500 PUT/COPY/POST/DELETE and 5,500 GET/HEAD a second 503 Slow Down while S3 scales, gradually; 10 prefixes give about 55,000 reads/s
    DynamoDB, per partition 3,000 read units and 1,000 write units a second (reads ≤ 4 KB, writes ≤ 1 KB); items up to 400 KB A hot key throttles even when the table has spare capacity
    Kinesis, per shard In: 1 MB/s or 1,000 records/s. Out: 2 MB/s Add shards, or pack small records together
    SQS standard queue “Nearly unlimited” calls a second; messages up to 1 MiB Pay per request; at-least-once delivery
    SQS FIFO, per partition 300 calls/s per action, or 3,000 messages/s in batches of 10 High-throughput mode: up to 70,000 calls/s in N. Virginia, Oregon and Ireland, 9,000 in Mumbai and Singapore
    Operations per second for one unit of each component, on a log scale. Green tags are measured, teal are documented by the vendor, grey are assumptions you should load-test.Notice A local NVMe drive does 2,000× the random reads of a hard disk, while managed limits sit in the hundreds to low thousands per partition.

    Limits are per partition, not per table

    A DynamoDB table provisioned for 40,000 writes a second still throttles one partition key at 1,000. An S3 bucket with one hot prefix gets one prefix’s rate. Size from the hottest key, not the total (see hot keys).

    Sizes of things

    Object Size How you get there
    ASCII character, byte, boolean 1 B UTF-8 uses 1–4 bytes; Devanagari and Tamil letters take 3
    64-bit integer, ID or millisecond timestamp 8 B 64 bits
    UUID 16 B binary, 36 B as text 128 bits; text is 32 hex digits and 4 hyphens
    IPv4 / IPv6 address 4 B / 16 B 32 and 128 bits
    GPS fix: rider ID, latitude, longitude, time ~32 B binary, ~100 B as JSON Derived: 4 × 8 B
    Log line 200–500 B Assumption; the SRE workbook rounds a query-log entry up to 2 KB
    280-character post with metadata ~1 KB Derived: up to 280 × 3 = 840 B of UTF-8 text, plus IDs and timestamps
    OLTP row plus its index entries 0.5–1 KB Assumption
    JSON API response 1–10 KB Assumption
    Thumbnail / phone photo 10–50 KB / 2–5 MB Assumption
    Median desktop home page ~2.9 MB Measured: 2,862 KB in July 2025, HTTP Archive Web Almanac
    One minute of 1080p / 4K video 60 MB / 260–340 MB Derived from YouTube’s recommended upload bitrates: 8 Mbps × 60 s ÷ 8; 35–45 Mbps for 4K
    Everyday objects on a log scale of bytes, from a timestamp to a year of UPI records. The dashed line is the 64 GB of RAM in the SRE workbook’s standard machine.Notice A kilobyte for every Aadhaar enrolment fits on one NVMe drive; it is per-event data, a year of payments, that needs a fleet.

    Scale anchors

    A few published totals keep estimates honest. Fewer, verified anchors beat many remembered ones.

    • UPI. RBI’s Payment System Indicators count 2,416,168.86 lakh UPI transactions in FY 2025-26: 2.4 × 10¹¹ ÷ 3.15 × 10⁷ s ≈ 7,700 a second on average. September 2026 alone was 240,683.80 lakh, about 9,300 a second and 23% more than September 2025. A design sized for today’s average is short within a year. Back-of-envelope estimation turns this into a peak.
    • Aadhaar. UIDAI’s home page counts 145.32 crore enrolments, about 1.45 × 10⁹. At 1 KB of text per person that is 1.45 TB: one drive. A population-sized table is not automatically big data; request rates and per-event records are what grow.
    • Twitter, 2013. About 5,700 tweets a second on average against a one-second record of 143,199: a 25× spike.
    • Kafka, 2014. Three commodity machines absorbed 2 million writes a second.

    Capacity rules of thumb

    Five formulas cover most sizing questions:

    • Servers = peak requests/s ÷ per-server requests/s ÷ target utilisation (0.6–0.7), then add spares to survive losing a zone.
    • Cache memory = items × (key + value) × overhead (assume 1.5–3× for small values).
    • Disk per year = writes/s × bytes × 3.15 × 10⁷ s × copies (usually 3), plus indexes.
    • Bandwidth = requests/s × response bytes × 8.
    • Partitions = the largest of total rate ÷ per-partition limit, bytes ÷ per-partition size, and the hottest key’s rate ÷ per-partition limit.
    Which number decides which box. Each estimate is only useful once it is compared with a number to know; the comparison picks the design.Notice Every decision on the right is a threshold test, which is why being 2× off rarely matters and 10× off usually does.

    Worked example: rider locations for a delivery app

    Assume 300,000 riders on shift at the dinner peak, each phone sending a GPS fix every 5 seconds, and 1 million customers watching an order map that refreshes every 10 seconds.

    • Rates: 300,000 ÷ 5 = 60,000 writes/s; 10⁶ ÷ 10 = 100,000 reads/s.
    • Memory for the latest fix per rider: 300,000 × 32 B × 3 (assumed key and bookkeeping overhead) ≈ 29 MB. Memory decides nothing.
    • Cache nodes: 160,000 ops/s ÷ (100,000 × 0.6) ≈ 2.7, so 3 Redis shards plus replicas. Bandwidth is 160,000 × ~100 B ≈ 16 MB/s, about 128 Mbps: trivial. Operations per second size this cluster.
    • History stream: 60,000 records/s needs 60 Kinesis shards by record count but only 2 by bytes (60,000 × 32 B ≈ 1.9 MB/s). Pack 20 fixes per record and 3 shards do. On Kafka it is a rounding error.
    • A year of history: assume the day averages a third of the peak: 20,000 × 32 B × 86,400 s ≈ 55 GB a day, × 365 ≈ 20 TB, × 3 copies ≈ 60 TB a year. Object storage, not Redis.

    The geospatial indexes article covers how to query those positions.

    Worked example: live-score polling during a final

    Assume 25 million phones on a cricket score screen, polling every 10 seconds for a 2 KB response.

    • Rate: 25 × 10⁶ ÷ 10 = 2.5 million requests/s.
    • Servers at the origin: 2.5 × 10⁶ ÷ 2,000 ÷ 0.6 ≈ 2,100.
    • Egress: 2.5 × 10⁶ × 2 KB = 5 GB/s = 40 Gbps.

    Every phone gets the same answer, and it changes a few times a minute. Cache it at the CDN with a 1-second TTL and the origin sees about one request a second per edge cache. With an assumed 300 edge caches, that is 300 requests/s: one server and a spare. The deciding number was not the request rate but the fact that every response was identical.

    Worked example: a checkout’s latency budget

    App servers run in a Mumbai region with a server-side p99 target of 200 ms. The handler loads 40 cart items, calls a fraud service in another zone, and calls a payment provider whose API is served from Singapore (about 53 ms per round trip, Azure’s Pune–Singapore median).

    Step First draft Fixed
    Cart items 40 sequential queries × ~1 ms (0.5 ms RTT + 0.5 ms query) = 40 ms One batched query ≈ 2 ms
    Fraud check, other zone 2 ms RTT + 20 ms work = 22 ms Same, in parallel with the cart query
    Payment provider New connection: 3 round trips × 53 ms + 50 ms work ≈ 210 ms Warm pooled connection: 53 + 50 ≈ 103 ms
    Total ≈ 272 ms: over budget ≈ 125 ms

    Counting round trips found 150 ms before anyone profiled a line of code. The fixes are the N+1 query problem, chatty I/O and connection pooling.

    Availability and conversions, in four lines

    • 99.9% allows about 43 minutes of downtime a month, 99.99% about 4.3 minutes, 99.999% about 26 seconds (availability and the nines).
    • A day is 86,400 s ≈ 10⁵; a year ≈ 3 × 10⁷ s; 1 million a day ≈ 12 a second; 1 billion a day ≈ 12,000 a second.
    • 2¹⁰ ≈ 10³; 1 Gbps = 125 MB/s; multiply bytes by 8 for links.
    • Rounding rules, peak factors and the full conversion table are in back-of-envelope estimation.

    Going deeper: when numbers mislead

    What changed, and what didn’t

    The SRE workbook’s standard machine has 16 cores, 64 GB of RAM and 1 Gbps, with 4 TB disks at 200 IOPS. One storage-optimised EC2 instance (i4i.32xlarge) now lists 128 vCPUs, 1,024 GiB, 75 Gbps and eight NVMe drives with 3.2 million random-read IOPS between them: 16,000× the random reads of one of those disks, 75× the network, 16× the memory.

    What didn’t move: memory latency is still about 100 ns, a data-centre round trip still a few hundred microseconds, and Norvig’s 2002 “US to Europe and back” of 150 ms sits beside Azure’s 2026 median of 145 ms from California to the Netherlands. Bandwidth and IOPS got cheap; round trips didn’t. Designs that batch age well; chatty ones don’t.

    Models drift; check them against physics

    Scott’s page extrapolates trend lines, and some run away. Its disk-seek curve drops below 3 ms by 2020, yet half a rotation of a 7,200 rpm platter alone takes 4.2 ms. Its network curve doubles every two years, which by 2026 implies a commodity network card moving 125 MB/s × 2^11.5 ≈ 360 GB/s, nearly 3 Tbps. When a number comes from a model, test it against a specification or a physical limit before you quote it.

    Totals hide the binding constraint

    Averages hide tails: AWS designs gp3 volumes to deliver their provisioned performance 99% of the time, so your p99 may land in the other 1%. Totals hide hot keys, as the warning above shows. And local and network-attached flash differ by up to about 100× in latency (tens of microseconds against single-digit milliseconds), which is why “the database is on SSD” is not one number. Database scaling shows how these ceilings set a database’s write limit.

    Using numbers in the interview

    • Say the label. “I’ll assume about 10,000 small durable writes a second per Postgres primary; I’d confirm with a load test.” A documented limit can be stated flatly; an assumption should sound like one.
    • Apply the factor-of-10 test. A number is about right if it is within 2–3× and on the correct side of every threshold it touches. If it sits within 10× of a threshold, say so and name the escape hatch, such as sharding later by user ID.
    • Round in the safe direction: capacities down, demands up.
    • Prefer documented limits whenever the design touches a managed service; they are the only numbers you can quote without a caveat.
    • Cross-check by a second route: physics for latency, a published anchor for scale, dividing back to one user for totals.

    In the interview

    When challenged on a number, don’t defend the digit; defend the decision. “Even if a primary only manages 5,000 writes a second, we’re at 2,000 at peak, so one primary still holds. If it were 500, I’d shard by merchant ID.”

    Cheat sheet

    Remember Value
    Memory reference ~100 ns
    Local NVMe random read ~16–100 µs; ~400,000 IOPS per drive
    Hard-disk random read 5–10 ms; ~200 IOPS
    EBS gp3 3,000 IOPS and 125 MiB/s baseline; up to 80,000 and 2,000 MiB/s; single-digit ms
    Round trip: same data centre, across zones 0.2–0.5 ms; ~1–2 ms
    Fibre 1 ms of round trip per 100 km; measured ≈ 1.5–2× that
    India to Singapore, Europe, US East ~50, ~140, ~200 ms
    App server ~2,000 requests/s (assumption)
    SQL primary ~10,000 small durable writes/s (assumption)
    Redis node ~100,000 ops/s; 180,000 measured in its docs
    Kafka 2 million records/s on 3 brokers (2014)
    S3 prefix 3,500 writes and 5,500 reads a second
    DynamoDB partition 1,000 write units, 3,000 read units; items up to 400 KB
    Kinesis shard 1 MB/s or 1,000 records/s in; 2 MB/s out
    Sizes UUID 16 B · row ~1 KB · photo ~3 MB · a minute of 1080p ~60 MB
    Network 1 Gbps = 125 MB/s; NICs 10–25 Gbps, up to 100

    How to say it in the interview

    “Let me put numbers on this. Inside the region each call costs about half a millisecond of round trip, so four calls are 2 ms; the real cost is a database read that misses memory, which is single-digit milliseconds on a network volume. For capacity I’ll assume 2,000 requests a second per app server and 10,000 small writes a second per Postgres primary; I’d load-test both. Peak writes are 30,000, so one primary won’t do; I’ll shard by user. If we used DynamoDB instead, its documented limit is 1,000 writes a second per partition, so the hottest key matters more than the total. Users are in India, so the region is Mumbai; Europe would add about 140 ms per round trip.”

    Where does 10,000 writes a second come from? It’s an assumption built from the commit path. If every commit waits for its own 1 ms log flush, the log caps out near 1,000 a second; group commit lets one flush cover about ten commits, giving roughly 10,000. Wide rows, many indexes or a working set bigger than RAM lower it, so I’d load-test before committing to a shard count.

    How many requests can one server handle? Anywhere from hundreds to tens of thousands. Twitter’s Rails hosts managed 200–300 a second in 2013, and its JVM services 10–20K on similar hardware. I plan on 2,000 and run servers at 60–70% busy.

    Why not serve Indian users from a European region? Physics. Pune to Frankfurt is about 6,700 km, so at least 67 ms per round trip, and Azure measures 140. A cold HTTPS request needs three round trips, nearly half a second before the server starts work.

    Hasn’t new hardware made these numbers obsolete? Bandwidth and IOPS have grown by orders of magnitude: one NVMe drive does 2,000× a hard disk’s random reads. Memory latency, data-centre round trips and the speed of light haven’t moved, so designs bound by round trips gain nothing from new hardware.

    What if your number is off by 10×? I check whether it crosses a threshold. If 2,000 peak writes became 20,000, one primary would no longer do and I’d shard; if a 30 MB cache became 300 MB, nothing changes.

    Where to go next

    References and further reading

    1. Teach Yourself Programming in Ten Years (Peter Norvig)norvig.comThe 2002 table of approximate timings: 100 ns memory fetch, 25 ns mutex, 8 ms disk seek, 20 ms to read 1 MB from disk, 150 ms US–Europe round trip.
    2. Latency Numbers Every Programmer Should Know, by year (Colin Scott)colin-scott.github.ioA trend model of the classic list: cache hits in cycles at 3 GHz, 16 µs SSD reads, 500 µs data-centre round trips, and curves that overshoot when extrapolated.
    3. Non-Abstract Large System Design (Google SRE Workbook, chapter 12)sre.google200 IOPS per 4 TB hard disk, a 16-core, 64 GB, 1 Gbps standard machine, and about 25 ms per cross-datacentre Paxos operation.
    4. Azure network round-trip latency statistics (Microsoft Learn)learn.microsoft.comMeasured P50 round trips between Azure regions for the 30 days to 30 July 2026, used for the India, Singapore, Europe and US routes.
    5. AWS Fault Isolation Boundaries: Availability Zones (AWS whitepaper)docs.aws.amazon.comZones up to about 100 km apart, close enough for synchronous replication with single-digit millisecond latency.
    6. Amazon EBS General Purpose SSD volumesdocs.aws.amazon.comgp3: 3,000 IOPS and 125 MiB/s baseline, up to 80,000 IOPS and 2,000 MiB/s, single-digit ms latency; io2 Block Express under 500 µs on average.
    7. Amazon EC2 storage optimized instance specificationsdocs.aws.amazon.comRandom-read IOPS per local NVMe drive (400,000 for one 3,750 GB i4i drive) and a 128-vCPU, 1,024 GiB, 75 Gbps instance.
    8. Best practices design patterns: optimizing Amazon S3 performancedocs.aws.amazon.com3,500 write and 5,500 read requests per second per prefix, 100–200 ms small-object latency and up to 100 Gb/s per instance.
    9. Redis benchmark (redis-benchmark) documentationredis.io180,000 SETs a second with 50 clients, 1.5–1.8 million with 16-command pipelines, and why the network often limits Redis before the CPU.
    10. Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines) (Jay Kreps, LinkedIn, 2014)engineering.linkedin.com2,024,032 100-byte records a second on three brokers with 3× replication, the hardware used, and 2 ms median end-to-end latency.