How do you model throughput for millions of transactions per second?
Modeling throughput for millions of transactions per second (TPS) is done using a combination of queueing theory, service-time decomposition, contention modeling, and system-level simulation. In enterprise platforms like IBM Z or large distributed systems, you don’t model TPS as a single number—you model it as a pipeline of constrained resources under load.
The core idea is:
Throughput is determined by the slowest saturated resource under concurrency, not by raw CPU capacity alone.
At a high level:
Throughput (TPS) = Completed Transactions / Time
But in real systems:
Throughput = function(CPU, memory, I/O, locks, cache, contention, latency)
Most systems are modeled as:
Arrival rate (λ) → Queue → Service center → Departure rate (μ)
Using Little’s Law:
L = λ × W
Where:
👉 This links throughput and latency directly.
A transaction is split into components:
So:
T_total = T_cpu + T_memory + T_io + T_lock + T_sync
👉 Throughput is limited by the dominant component under load.
Maximum TPS is determined by:
Throughput_max ≈ 1 / max(service_time per resource)
So if:
👉 System throughput = 60k TPS (bottleneck = lock contention)
At high TPS, contention dominates:
Used in mainframe modeling:
N users → think time → system → response → loop
👉 Throughput depends on:
You analyze:
For systems like IBM Z / POWER:
Throughput is modeled as:
TPS = min(CPU_parallel_capacity, memory_bandwidth, I/O bandwidth, lock throughput)
With adjustments for:
Each transaction goes through stages:
Each stage has:
👉 Overall TPS = slowest effective pipeline stage
In IBM Z environments:
👉 So throughput is not static—it is policy-driven
At very high TPS:
Speedup limited by serial fraction
Even with more CPUs:
Think of modeling millions TPS as:
A multi-stage pipeline where thousands of parallel execution lanes process transactions, but overall throughput is determined by the most congested shared resource—typically locks, memory bandwidth, or I/O paths—rather than raw CPU power.
To model millions of TPS, you must:
👉 Result: TPS is always bottleneck-driven, not CPU-driven