Skip to content

Capacity Planning and Performance

Size the deployment from measured encoded operations and their physical lifetime. A small business payload can produce a larger authenticated frame, retained result, journal entry and snapshot. A future that has completed exceptionally can still correspond to physically active work.

Record the expected and worst-case concurrency, request/result sizes, queue backlog, durable identity retention, event lag, checkpoint size, outbox backlog and recovery window. Measure under the target JVM, disks, network and security profile. Include a failure/recovery phase; a steady-state throughput number alone does not establish operational headroom.

Symptom Investigate before changing a limit
High tail latency Physical permits, downstream latency, queueing, GC and storage sync latency
Admission rejection Actual bounded capacity and whether cancelled work still runs
Discovery saturation Poll interval, peer/contact bounds, DNS/TLS failures and context filtering
Growing queue/outbox backlog Consumer physical throughput, retries, ownership renewal and DB commit latency
Snapshot/journal exhaustion Retained identities/results, encoded size and retention policy
Slow recovery Snapshot age, bounded replay work, disk throughput and quorum reformation

Use backpressure and finite admission instead of an unbounded executor or queue. Increasing a worker count without increasing the constrained downstream resource can make latency and recovery worse.

Keep profiling and benchmark conclusions attached to their workload and environment. @Benchmark is metadata; it is not a built-in guarantee of throughput measurement or an automatic benchmark runner. Use the actual benchmark/test tooling and state what was measured.

Clock health is also operational capacity: native time-sensitive mutations stop when the measured reference/uncertainty policy is unsafe. MeasuredClockHealth starts unsafe, detects wall/monotonic/reference discrepancies above its 500 ms boundary and requires two stable aligned samples to recover. A process reading its own wall clock is not an authenticated external reference.

See numeric limits for concrete defaults and the source constructors that validate them.