From 59c2410932f92677d1ccfd9e38e177a025a66929 Mon Sep 17 00:00:00 2001 From: George Lambert Date: Sat, 12 Sep 2026 01:16:24 -0400 Subject: [PATCH] Snapshot of verae-nats-cluster from zapier monorepo (NS1-host NATS study) --- BENCH.md | 49 + NATS.md | 7 + README.md | 70 + SUMMARY.md | 5 + client.env | 3 + cluster.env | 19 + conf/nats.conf.tmpl | 19 + package.json | 12 + results/.gitignore | 6 + results/20260912T045131Z/BENCH.md | 49 + .../20260912T045131Z/core-1p1s-50k-128.csv | 3 + .../20260912T045131Z/core-1p1s-50k-128.txt | 7 + .../20260912T045131Z/core-4p4s-100k-128.csv | 9 + .../20260912T045131Z/core-4p4s-100k-128.txt | 17 + results/20260912T045131Z/core-4p4s-50k-1k.csv | 9 + results/20260912T045131Z/core-4p4s-50k-1k.txt | 17 + .../20260912T045131Z/core-8p8s-200k-128.csv | 17 + .../20260912T045131Z/core-8p8s-200k-128.txt | 25 + results/20260912T045131Z/js-1p-20k-128-r3.csv | 2 + results/20260912T045131Z/js-1p-20k-128-r3.txt | 5 + .../20260912T045131Z/js-2p2s-20k-128-r3.csv | 5 + .../20260912T045131Z/js-2p2s-20k-128-r3.txt | 13 + results/20260912T045131Z/js-4p-20k-1k-r3.csv | 5 + results/20260912T045131Z/js-4p-20k-1k-r3.txt | 10 + results/20260912T045131Z/js-4p-50k-128-r3.csv | 5 + results/20260912T045131Z/js-4p-50k-128-r3.txt | 10 + results/20260912T045131Z/lat-1p-5k-128.txt | 2 + results/20260912T045131Z/lat-4p-10k-128.txt | 2 + results/20260912T045131Z/lat-4p-5k-1k.txt | 2 + results/20260912T045131Z/lat-8p-20k-128.txt | 2 + results/20260912T045131Z/lat-ping-1k-128.txt | 2 + results/20260912T051237Z/BENCH.md | 48 + .../charts/core-throughput.png | Bin 0 -> 57055 bytes .../20260912T051237Z/charts/core-vs-js.png | Bin 0 -> 42606 bytes .../charts/delay-percentiles.png | Bin 0 -> 41403 bytes .../20260912T051237Z/charts/js-throughput.png | Bin 0 -> 49879 bytes .../20260912T051237Z/charts/payload-size.png | Bin 0 -> 53089 bytes .../20260912T051237Z/core-1p1s-50k-128.csv | 3 + .../20260912T051237Z/core-1p1s-50k-128.txt | 7 + .../20260912T051237Z/core-4p4s-100k-128.csv | 9 + .../20260912T051237Z/core-4p4s-100k-128.txt | 17 + results/20260912T051237Z/core-4p4s-50k-1k.csv | 9 + results/20260912T051237Z/core-4p4s-50k-1k.txt | 17 + .../20260912T051237Z/core-8p8s-200k-128.csv | 17 + .../20260912T051237Z/core-8p8s-200k-128.txt | 25 + results/20260912T051237Z/host-after.txt | 86 ++ results/20260912T051237Z/host-before.txt | 86 ++ results/20260912T051237Z/js-1p-20k-128-r3.csv | 2 + results/20260912T051237Z/js-1p-20k-128-r3.txt | 5 + .../20260912T051237Z/js-2p2s-20k-128-r3.csv | 5 + .../20260912T051237Z/js-2p2s-20k-128-r3.txt | 13 + results/20260912T051237Z/js-4p-20k-1k-r3.csv | 5 + results/20260912T051237Z/js-4p-20k-1k-r3.txt | 10 + results/20260912T051237Z/js-4p-50k-128-r3.csv | 5 + results/20260912T051237Z/js-4p-50k-128-r3.txt | 10 + results/20260912T051237Z/lat-1p-5k-128.txt | 2 + results/20260912T051237Z/lat-4p-10k-128.txt | 2 + results/20260912T051237Z/lat-4p-5k-1k.txt | 2 + results/20260912T051237Z/lat-8p-20k-128.txt | 2 + results/20260912T051237Z/lat-ping-1k-128.txt | 2 + .../nats-cluster-bench-ns1.html | 1291 +++++++++++++++++ .../nats-cluster-bench-ns1.md | 334 +++++ .../nats-cluster-bench-ns1.pdf | Bin 0 -> 320679 bytes results/20260912T051237Z/varz-after.json | 50 + results/20260912T051237Z/varz-before.json | 50 + scripts/bench-report.py | 192 +++ scripts/bench.sh | 106 ++ scripts/build-ns1-study-report.py | 458 ++++++ scripts/create-cluster.sh | 69 + scripts/cutover-ns1.sh | 10 + scripts/docs-print.css | 122 ++ scripts/ensure-streams.sh | 34 + scripts/latency.mjs | 105 ++ scripts/lib-ct.sh | 62 + scripts/ns1-study-methodology.md | 202 +++ scripts/status.sh | 22 + scripts/study-on-ns1.sh | 91 ++ scripts/test.sh | 52 + systemd/nats-server.service | 16 + 79 files changed, 4063 insertions(+) create mode 100644 BENCH.md create mode 100644 NATS.md create mode 100644 README.md create mode 100644 SUMMARY.md create mode 100644 client.env create mode 100644 cluster.env create mode 100644 conf/nats.conf.tmpl create mode 100644 package.json create mode 100644 results/.gitignore create mode 100644 results/20260912T045131Z/BENCH.md create mode 100644 results/20260912T045131Z/core-1p1s-50k-128.csv create mode 100644 results/20260912T045131Z/core-1p1s-50k-128.txt create mode 100644 results/20260912T045131Z/core-4p4s-100k-128.csv create mode 100644 results/20260912T045131Z/core-4p4s-100k-128.txt create mode 100644 results/20260912T045131Z/core-4p4s-50k-1k.csv create mode 100644 results/20260912T045131Z/core-4p4s-50k-1k.txt create mode 100644 results/20260912T045131Z/core-8p8s-200k-128.csv create mode 100644 results/20260912T045131Z/core-8p8s-200k-128.txt create mode 100644 results/20260912T045131Z/js-1p-20k-128-r3.csv create mode 100644 results/20260912T045131Z/js-1p-20k-128-r3.txt create mode 100644 results/20260912T045131Z/js-2p2s-20k-128-r3.csv create mode 100644 results/20260912T045131Z/js-2p2s-20k-128-r3.txt create mode 100644 results/20260912T045131Z/js-4p-20k-1k-r3.csv create mode 100644 results/20260912T045131Z/js-4p-20k-1k-r3.txt create mode 100644 results/20260912T045131Z/js-4p-50k-128-r3.csv create mode 100644 results/20260912T045131Z/js-4p-50k-128-r3.txt create mode 100644 results/20260912T045131Z/lat-1p-5k-128.txt create mode 100644 results/20260912T045131Z/lat-4p-10k-128.txt create mode 100644 results/20260912T045131Z/lat-4p-5k-1k.txt create mode 100644 results/20260912T045131Z/lat-8p-20k-128.txt create mode 100644 results/20260912T045131Z/lat-ping-1k-128.txt create mode 100644 results/20260912T051237Z/BENCH.md create mode 100644 results/20260912T051237Z/charts/core-throughput.png create mode 100644 results/20260912T051237Z/charts/core-vs-js.png create mode 100644 results/20260912T051237Z/charts/delay-percentiles.png create mode 100644 results/20260912T051237Z/charts/js-throughput.png create mode 100644 results/20260912T051237Z/charts/payload-size.png create mode 100644 results/20260912T051237Z/core-1p1s-50k-128.csv create mode 100644 results/20260912T051237Z/core-1p1s-50k-128.txt create mode 100644 results/20260912T051237Z/core-4p4s-100k-128.csv create mode 100644 results/20260912T051237Z/core-4p4s-100k-128.txt create mode 100644 results/20260912T051237Z/core-4p4s-50k-1k.csv create mode 100644 results/20260912T051237Z/core-4p4s-50k-1k.txt create mode 100644 results/20260912T051237Z/core-8p8s-200k-128.csv create mode 100644 results/20260912T051237Z/core-8p8s-200k-128.txt create mode 100644 results/20260912T051237Z/host-after.txt create mode 100644 results/20260912T051237Z/host-before.txt create mode 100644 results/20260912T051237Z/js-1p-20k-128-r3.csv create mode 100644 results/20260912T051237Z/js-1p-20k-128-r3.txt create mode 100644 results/20260912T051237Z/js-2p2s-20k-128-r3.csv create mode 100644 results/20260912T051237Z/js-2p2s-20k-128-r3.txt create mode 100644 results/20260912T051237Z/js-4p-20k-1k-r3.csv create mode 100644 results/20260912T051237Z/js-4p-20k-1k-r3.txt create mode 100644 results/20260912T051237Z/js-4p-50k-128-r3.csv create mode 100644 results/20260912T051237Z/js-4p-50k-128-r3.txt create mode 100644 results/20260912T051237Z/lat-1p-5k-128.txt create mode 100644 results/20260912T051237Z/lat-4p-10k-128.txt create mode 100644 results/20260912T051237Z/lat-4p-5k-1k.txt create mode 100644 results/20260912T051237Z/lat-8p-20k-128.txt create mode 100644 results/20260912T051237Z/lat-ping-1k-128.txt create mode 100644 results/20260912T051237Z/nats-cluster-bench-ns1.html create mode 100644 results/20260912T051237Z/nats-cluster-bench-ns1.md create mode 100644 results/20260912T051237Z/nats-cluster-bench-ns1.pdf create mode 100644 results/20260912T051237Z/varz-after.json create mode 100644 results/20260912T051237Z/varz-before.json create mode 100755 scripts/bench-report.py create mode 100755 scripts/bench.sh create mode 100755 scripts/build-ns1-study-report.py create mode 100755 scripts/create-cluster.sh create mode 100755 scripts/cutover-ns1.sh create mode 100644 scripts/docs-print.css create mode 100755 scripts/ensure-streams.sh create mode 100644 scripts/latency.mjs create mode 100755 scripts/lib-ct.sh create mode 100644 scripts/ns1-study-methodology.md create mode 100755 scripts/status.sh create mode 100755 scripts/study-on-ns1.sh create mode 100755 scripts/test.sh create mode 100644 systemd/nats-server.service diff --git a/BENCH.md b/BENCH.md new file mode 100644 index 0000000..a24b18b --- /dev/null +++ b/BENCH.md @@ -0,0 +1,49 @@ +# NATS cluster message speed + +Run **`20260912T045131Z`** (UTC). Client: LXC **510** `verae-px-worker` (`10.10.10.20`), not a nats-* server. Servers: `nats-a/b/c` on `10.10.10.21–23` (`vmbr1` only). + +Client URL: + +```text +nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +``` + +## Method + +- **Core NATS** is fire-and-forget pub/sub (`nats bench`). No disk, no replica ack. +- **JetStream** uses **file** storage and **replicas=3** (same as product streams). The unique stream `benchstream` is deleted between JS loads. +- Throughput is **msgs/sec** from nats CLI **0.1.6** (`--no-progress --csv`). Its min/avg/max are publisher **rate spread**, not delay. +- **Ping** delay: one publisher, sequential publish-then-wait. This is one-message round-trip through the cluster. +- **Flood** delay: N publishers dump the whole batch, then the subscriber drains. This is **queueing under burst**, not wire RTT. +- Probe: `scripts/latency.mjs` (two connections, header timestamp). + +## Throughput + +| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s | +|-----|------|------------------|------------|----------|------------|----------| +| `core-1p1s-50k-128` | core pub/sub | 1,200,836 | 791,094 | 96.57 | 747,461 | 91.24 | +| `core-4p4s-100k-128` | core pub/sub | 1,521,256 | 316,312 | 38.61 | 1,299,634 | 158.65 | +| `core-4p4s-50k-1k` | core pub/sub | 630,460 | 247,747 | 241.94 | 510,216 | 498.26 | +| `core-8p8s-200k-128` | core pub/sub | 2,007,937 | 333,957 | 40.77 | 1,790,736 | 218.60 | +| `js-1p-20k-128-r3` | jetstream r=3 file | — | 16,155 | 1.97 | — | — | +| `js-2p2s-20k-128-r3` | jetstream r=3 file | 21,861 | 10,965 | 1.34 | 10,942 | 1.34 | +| `js-4p-20k-1k-r3` | jetstream r=3 file | — | 13,493 | 13.18 | — | — | +| `js-4p-50k-128-r3` | jetstream r=3 file | — | 16,607 | 2.03 | — | — | + +## Round-trip delay + +| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max | +|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----| +| `lat-ping-1k-128` | ping (sequential RTT) | 1000 | 1 | 128 B | 0.254ms | 0.307ms | 0.286ms | 0.332ms | 0.734ms | 2.763ms | +| `lat-1p-5k-128` | flood (burst queueing) | 5000 | 1 | 128 B | 149.279ms | 238.626ms | 248.752ms | 274.314ms | 279.398ms | 279.740ms | +| `lat-4p-5k-1k` | flood (burst queueing) | 5000 | 4 | 1024 B | 155.101ms | 211.706ms | 217.579ms | 223.268ms | 227.798ms | 228.370ms | +| `lat-4p-10k-128` | flood (burst queueing) | 10000 | 4 | 128 B | 174.174ms | 263.186ms | 266.672ms | 299.073ms | 304.233ms | 304.475ms | +| `lat-8p-20k-128` | flood (burst queueing) | 20000 | 8 | 128 B | 304.586ms | 453.749ms | 466.296ms | 499.924ms | 505.112ms | 505.620ms | + +## What the numbers mean + +Product job/event/archive traffic is **JetStream r=3 file**. On this three-LXC stand that is about **16k durable 128 B pubs/s** (about **13k** at 1 KiB). Core NATS is an upper bound for non-durable fan-out: about **0.7–2.0M msgs/s** aggregate at 128 B, or **~630k msgs/s (~616 MB/s)** at 1 KiB with 4 publishers. + +A quiet request-reply is **~0.3 ms** average, **p99 < 1 ms**. Flood rows in the **150–500 ms** band are the subscriber catching up after a burst, which is what a job-events mailbox sees if publishers outrun consumers. + +Re-run on NS1: `bash scripts/bench.sh`. Raw logs/CSVs are under `results//`. diff --git a/NATS.md b/NATS.md new file mode 100644 index 0000000..b326ade --- /dev/null +++ b/NATS.md @@ -0,0 +1,7 @@ +# NATS — verae-nats-cluster + +This repo **is** the three-node JetStream cluster. Listeners are the guest private IPs on `vmbr1` (`10.10.10.21–23:4222` and `:6222`). HTTP monitor is loopback `:8222` inside each guest. + +Zapier cloud, browsers, and `vmbr0` never get a NATS socket. + +Throughput and delay at several loads: [BENCH.md](BENCH.md). diff --git a/README.md b/README.md new file mode 100644 index 0000000..b0500b6 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# verae-nats-cluster + +Three **distinct Proxmox LXC** guests running **NATS JetStream** as a cluster, on the private bridge only. This is the test stand before the same layout moves to separate hardware. + +**Forgejo:** https://git.georgelambert.org/marchon/verae-nats-cluster +**SSH:** `ssh://git@git.georgelambert.org:2223/marchon/verae-nats-cluster.git` + +| Guest | VMID | `vmbr1` IP | Client | Cluster | Monitor | +|-------|------|------------|--------|---------|---------| +| nats-a | 511 | 10.10.10.21 | `:4222` | `:6222` | `127.0.0.1:8222` | +| nats-b | 512 | 10.10.10.22 | `:4222` | `:6222` | `127.0.0.1:8222` | +| nats-c | 513 | 10.10.10.23 | `:4222` | `:6222` | `127.0.0.1:8222` | + +Cluster name: `verae`. Client URL: + +```text +nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +``` + +**Not** on `vmbr0`. **Not** `0.0.0.0`. Host lab NATS on `127.0.0.1:4222` is left running so current keep/fleet/middleware stay up until you cut over. + +```bash +# on NS1 (the Proxmox host) +git clone ssh://git@git.georgelambert.org:2223/marchon/verae-nats-cluster.git +cd verae-nats-cluster +bash scripts/create-cluster.sh +bash scripts/status.sh +bash scripts/test.sh +``` + +Test-env cut-over (keep/fleet/middleware on NS1): + +```bash +# 1) create product streams (replicas=3) +bash scripts/ensure-streams.sh +# 2) fleet overlay nats.url + services/*.json already list the three URLs +# 3) restart fleet and keep with NATS_URL from client.env +``` + +`JETSTREAM_REPLICAS=3` on middleware. Host `127.0.0.1:4222` can stay up unused. Zapier cloud never talks to NATS. + +nkeys/mTLS: `verae-nats-accounts` still has the INTERNAL/LEAF sketch. Do **not** enable accounts on this cluster until every client passes credentials in `NATS_URL`. Private `vmbr1` is the current isolation. + +## Message speed (throughput + delay) + +From a **client that is not a nats-* server** (LXC 510 `verae-px-worker`): + +```bash +# on NS1 (hypervisor). Bench client is LXC 510. +bash scripts/bench.sh + +# Full study that must run ON NS1 (orchestrator + charts + HTML/PDF): +bash scripts/study-on-ns1.sh +``` + +That writes `results//` and copies a summary to [BENCH.md](BENCH.md). Full write-up with charts (HTML + PDF) is in the progress repo: [nats-cluster-bench](https://zapier.georgelambert.org/packages/zapier-decisions/reports/nats-cluster-bench.pdf). Core NATS is fire-and-forget; JetStream rows use **file** storage and **replicas=3**. Ping delay is sequential RTT; flood delay is queueing under burst. + +Latest run (`20260912T045131Z`): + +| Kind | Load | Result | +|------|------|--------| +| Core 1p1s 50k×128 B | pub/sub | ~1.20M msgs/s aggregate | +| Core 8p8s 200k×128 B | pub/sub | ~2.01M msgs/s aggregate | +| Core 4p4s 50k×1 KiB | pub/sub | ~630k msgs/s (~616 MB/s aggregate) | +| JetStream r=3 file | 1–4 pubs, 128 B | ~16k durable pubs/s | +| JetStream r=3 file | 4 pubs, 1 KiB | ~13.5k durable pubs/s | +| Ping 1k×128 B | sequential RTT | avg 0.307 ms, p99 0.734 ms | +| Flood 8p 20k×128 B | burst queueing | avg 454 ms | + +Hardware move: same three configs, three boxes, private NIC only — change IPs in `cluster.env` and `conf/nats.conf.tmpl`. diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..286cd8a --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,5 @@ +# verae-nats-cluster + +Proxmox LXC 511–513 (`nats-a/b/c`) form a JetStream cluster on `vmbr1` for HA testing before dedicated hardware. + +Message speed (client LXC 510 vs the three nodes): see [BENCH.md](BENCH.md). Product streams are JetStream **file + replicas=3** (~16k durable 128 B pubs/s on this stand). Core NATS is ~1–2M msgs/s at 128 B. Sequential RTT ~0.3 ms; flood queueing is hundreds of ms. diff --git a/client.env b/client.env new file mode 100644 index 0000000..4afa412 --- /dev/null +++ b/client.env @@ -0,0 +1,3 @@ +# Test-environment client URL. Private vmbr1 only. Lab loopback stays until cut-over. +export NATS_URL="${NATS_URL:-nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222}" +export JETSTREAM_REPLICAS="${JETSTREAM_REPLICAS:-3}" diff --git a/cluster.env b/cluster.env new file mode 100644 index 0000000..a0df60b --- /dev/null +++ b/cluster.env @@ -0,0 +1,19 @@ +# Distinct Proxmox LXC guests on NS1 vmbr1. Not the host loopback NATS. +BRIDGE="${BRIDGE:-vmbr1}" +GW="${GW:-10.10.10.1}" +MEMORY="${MEMORY:-1024}" +CORES="${CORES:-1}" +DISK="${DISK:-8}" +STORAGE="${STORAGE:-SSD2}" +TEMPLATE="${TEMPLATE:-/var/lib/vz/template/cache/ubuntu-24.04-standard_24.04-2_amd64.tar.zst}" +DNS="${DNS:-8.8.8.8}" +USER_NAME="${USER_NAME:-marchon}" +NATS_VER="${NATS_VER:-2.10.26}" +CLUSTER_NAME="${CLUSTER_NAME:-verae}" + +# vmid hostname ipv4 +NODES="${NODES:- +511 nats-a 10.10.10.21 +512 nats-b 10.10.10.22 +513 nats-c 10.10.10.23 +}" diff --git a/conf/nats.conf.tmpl b/conf/nats.conf.tmpl new file mode 100644 index 0000000..481de1c --- /dev/null +++ b/conf/nats.conf.tmpl @@ -0,0 +1,19 @@ +# JetStream cluster node. Bind the private guest IP only — never vmbr0 / 0.0.0.0. +server_name: {{NAME}} +host: {{IP}} +port: 4222 +http: 127.0.0.1:8222 + +jetstream { + store_dir: /var/lib/nats/jetstream + max_mem: 256M + max_file: 4G +} + +cluster { + name: {{CLUSTER}} + listen: {{IP}}:6222 + routes: [ +{{ROUTES}} + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..dcc5c11 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "verae-nats-cluster", + "version": "0.1.0", + "private": true, + "description": "Three-node NATS JetStream cluster on distinct Proxmox LXC guests (vmbr1 only)", + "scripts": { + "create": "bash scripts/create-cluster.sh", + "test": "bash scripts/test.sh", + "status": "bash scripts/status.sh", + "bench": "bash scripts/bench.sh" + } +} diff --git a/results/.gitignore b/results/.gitignore new file mode 100644 index 0000000..d31cf0d --- /dev/null +++ b/results/.gitignore @@ -0,0 +1,6 @@ +* +!.gitignore +!20260912T045131Z/ +!20260912T045131Z/** +!20260912T051237Z/ +!20260912T051237Z/** diff --git a/results/20260912T045131Z/BENCH.md b/results/20260912T045131Z/BENCH.md new file mode 100644 index 0000000..a24b18b --- /dev/null +++ b/results/20260912T045131Z/BENCH.md @@ -0,0 +1,49 @@ +# NATS cluster message speed + +Run **`20260912T045131Z`** (UTC). Client: LXC **510** `verae-px-worker` (`10.10.10.20`), not a nats-* server. Servers: `nats-a/b/c` on `10.10.10.21–23` (`vmbr1` only). + +Client URL: + +```text +nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +``` + +## Method + +- **Core NATS** is fire-and-forget pub/sub (`nats bench`). No disk, no replica ack. +- **JetStream** uses **file** storage and **replicas=3** (same as product streams). The unique stream `benchstream` is deleted between JS loads. +- Throughput is **msgs/sec** from nats CLI **0.1.6** (`--no-progress --csv`). Its min/avg/max are publisher **rate spread**, not delay. +- **Ping** delay: one publisher, sequential publish-then-wait. This is one-message round-trip through the cluster. +- **Flood** delay: N publishers dump the whole batch, then the subscriber drains. This is **queueing under burst**, not wire RTT. +- Probe: `scripts/latency.mjs` (two connections, header timestamp). + +## Throughput + +| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s | +|-----|------|------------------|------------|----------|------------|----------| +| `core-1p1s-50k-128` | core pub/sub | 1,200,836 | 791,094 | 96.57 | 747,461 | 91.24 | +| `core-4p4s-100k-128` | core pub/sub | 1,521,256 | 316,312 | 38.61 | 1,299,634 | 158.65 | +| `core-4p4s-50k-1k` | core pub/sub | 630,460 | 247,747 | 241.94 | 510,216 | 498.26 | +| `core-8p8s-200k-128` | core pub/sub | 2,007,937 | 333,957 | 40.77 | 1,790,736 | 218.60 | +| `js-1p-20k-128-r3` | jetstream r=3 file | — | 16,155 | 1.97 | — | — | +| `js-2p2s-20k-128-r3` | jetstream r=3 file | 21,861 | 10,965 | 1.34 | 10,942 | 1.34 | +| `js-4p-20k-1k-r3` | jetstream r=3 file | — | 13,493 | 13.18 | — | — | +| `js-4p-50k-128-r3` | jetstream r=3 file | — | 16,607 | 2.03 | — | — | + +## Round-trip delay + +| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max | +|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----| +| `lat-ping-1k-128` | ping (sequential RTT) | 1000 | 1 | 128 B | 0.254ms | 0.307ms | 0.286ms | 0.332ms | 0.734ms | 2.763ms | +| `lat-1p-5k-128` | flood (burst queueing) | 5000 | 1 | 128 B | 149.279ms | 238.626ms | 248.752ms | 274.314ms | 279.398ms | 279.740ms | +| `lat-4p-5k-1k` | flood (burst queueing) | 5000 | 4 | 1024 B | 155.101ms | 211.706ms | 217.579ms | 223.268ms | 227.798ms | 228.370ms | +| `lat-4p-10k-128` | flood (burst queueing) | 10000 | 4 | 128 B | 174.174ms | 263.186ms | 266.672ms | 299.073ms | 304.233ms | 304.475ms | +| `lat-8p-20k-128` | flood (burst queueing) | 20000 | 8 | 128 B | 304.586ms | 453.749ms | 466.296ms | 499.924ms | 505.112ms | 505.620ms | + +## What the numbers mean + +Product job/event/archive traffic is **JetStream r=3 file**. On this three-LXC stand that is about **16k durable 128 B pubs/s** (about **13k** at 1 KiB). Core NATS is an upper bound for non-durable fan-out: about **0.7–2.0M msgs/s** aggregate at 128 B, or **~630k msgs/s (~616 MB/s)** at 1 KiB with 4 publishers. + +A quiet request-reply is **~0.3 ms** average, **p99 < 1 ms**. Flood rows in the **150–500 ms** band are the subscriber catching up after a burst, which is what a job-events mailbox sees if publishers outrun consumers. + +Re-run on NS1: `bash scripts/bench.sh`. Raw logs/CSVs are under `results//`. diff --git a/results/20260912T045131Z/core-1p1s-50k-128.csv b/results/20260912T045131Z/core-1p1s-50k-128.csv new file mode 100644 index 0000000..cfd7d62 --- /dev/null +++ b/results/20260912T045131Z/core-1p1s-50k-128.csv @@ -0,0 +1,3 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +8e1ExxrZ9OtHTkwXsOfzes,S0,50000,6400000,747461,95675134.125326,0.066893 +8e1ExxrZ9OtHTkwXsOfzes,P0,50000,6400000,791094,101260059.613379,0.063204 diff --git a/results/20260912T045131Z/core-1p1s-50k-128.txt b/results/20260912T045131Z/core-1p1s-50k-128.txt new file mode 100644 index 0000000..f2e88d8 --- /dev/null +++ b/results/20260912T045131Z/core-1p1s-50k-128.txt @@ -0,0 +1,7 @@ +=== core-1p1s-50k-128 === + +NATS Pub/Sub stats: 1,200,836 msgs/sec ~ 146.59 MB/sec + Pub stats: 791,094 msgs/sec ~ 96.57 MB/sec + Sub stats: 747,461 msgs/sec ~ 91.24 MB/sec + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/core-4p4s-100k-128.csv b/results/20260912T045131Z/core-4p4s-100k-128.csv new file mode 100644 index 0000000..eaa0df7 --- /dev/null +++ b/results/20260912T045131Z/core-4p4s-100k-128.csv @@ -0,0 +1,9 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +d1csC8CbCBLYlUMAUVZxpb,S0,100000,12800000,377317,48296660.364795,0.265029 +d1csC8CbCBLYlUMAUVZxpb,S1,100000,12800000,351445,44985056.104940,0.284539 +d1csC8CbCBLYlUMAUVZxpb,S2,100000,12800000,372973,47740617.289389,0.268116 +d1csC8CbCBLYlUMAUVZxpb,S3,100000,12800000,324908,41588310.877432,0.307779 +d1csC8CbCBLYlUMAUVZxpb,P0,25000,3200000,524453,67129988.054428,0.047669 +d1csC8CbCBLYlUMAUVZxpb,P1,25000,3200000,324337,41515233.366208,0.077080 +d1csC8CbCBLYlUMAUVZxpb,P2,25000,3200000,103170,13205778.771206,0.242318 +d1csC8CbCBLYlUMAUVZxpb,P3,25000,3200000,79260,10145297.784464,0.315417 diff --git a/results/20260912T045131Z/core-4p4s-100k-128.txt b/results/20260912T045131Z/core-4p4s-100k-128.txt new file mode 100644 index 0000000..175d7ca --- /dev/null +++ b/results/20260912T045131Z/core-4p4s-100k-128.txt @@ -0,0 +1,17 @@ +=== core-4p4s-100k-128 === + +NATS Pub/Sub stats: 1,521,256 msgs/sec ~ 185.70 MB/sec + Pub stats: 316,312 msgs/sec ~ 38.61 MB/sec + [1] 524,453 msgs/sec ~ 64.02 MB/sec (25000 msgs) + [2] 324,337 msgs/sec ~ 39.59 MB/sec (25000 msgs) + [3] 103,170 msgs/sec ~ 12.59 MB/sec (25000 msgs) + [4] 79,260 msgs/sec ~ 9.68 MB/sec (25000 msgs) + min 79,260 | avg 257,805 | max 524,453 | stddev 181,189 msgs + Sub stats: 1,299,634 msgs/sec ~ 158.65 MB/sec + [1] 377,317 msgs/sec ~ 46.06 MB/sec (100000 msgs) + [2] 351,445 msgs/sec ~ 42.90 MB/sec (100000 msgs) + [3] 372,973 msgs/sec ~ 45.53 MB/sec (100000 msgs) + [4] 324,908 msgs/sec ~ 39.66 MB/sec (100000 msgs) + min 324,908 | avg 356,660 | max 377,317 | stddev 20,785 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/core-4p4s-50k-1k.csv b/results/20260912T045131Z/core-4p4s-50k-1k.csv new file mode 100644 index 0000000..becf15b --- /dev/null +++ b/results/20260912T045131Z/core-4p4s-50k-1k.csv @@ -0,0 +1,9 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +LXVQ7kvd26BIwiMRRfbr7Z,S0,50000,51200000,169213,173274762.582948,0.295484 +LXVQ7kvd26BIwiMRRfbr7Z,S1,50000,51200000,150273,153880103.181538,0.332727 +LXVQ7kvd26BIwiMRRfbr7Z,S2,50000,51200000,142138,145550108.197459,0.351769 +LXVQ7kvd26BIwiMRRfbr7Z,S3,50000,51200000,132134,135306220.651698,0.378401 +LXVQ7kvd26BIwiMRRfbr7Z,P0,12500,12800000,176262,180492467.210335,0.070917 +LXVQ7kvd26BIwiMRRfbr7Z,P1,12500,12800000,132211,135384883.941361,0.094545 +LXVQ7kvd26BIwiMRRfbr7Z,P2,12500,12800000,70678,72375041.084851,0.176857 +LXVQ7kvd26BIwiMRRfbr7Z,P3,12500,12800000,61936,63423297.033934,0.201819 diff --git a/results/20260912T045131Z/core-4p4s-50k-1k.txt b/results/20260912T045131Z/core-4p4s-50k-1k.txt new file mode 100644 index 0000000..30a8ca2 --- /dev/null +++ b/results/20260912T045131Z/core-4p4s-50k-1k.txt @@ -0,0 +1,17 @@ +=== core-4p4s-50k-1k === + +NATS Pub/Sub stats: 630,460 msgs/sec ~ 615.68 MB/sec + Pub stats: 247,747 msgs/sec ~ 241.94 MB/sec + [1] 176,262 msgs/sec ~ 172.13 MB/sec (12500 msgs) + [2] 132,211 msgs/sec ~ 129.11 MB/sec (12500 msgs) + [3] 70,678 msgs/sec ~ 69.02 MB/sec (12500 msgs) + [4] 61,936 msgs/sec ~ 60.49 MB/sec (12500 msgs) + min 61,936 | avg 110,271 | max 176,262 | stddev 46,744 msgs + Sub stats: 510,216 msgs/sec ~ 498.26 MB/sec + [1] 169,213 msgs/sec ~ 165.25 MB/sec (50000 msgs) + [2] 150,273 msgs/sec ~ 146.75 MB/sec (50000 msgs) + [3] 142,138 msgs/sec ~ 138.81 MB/sec (50000 msgs) + [4] 132,134 msgs/sec ~ 129.04 MB/sec (50000 msgs) + min 132,134 | avg 148,439 | max 169,213 | stddev 13,605 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/core-8p8s-200k-128.csv b/results/20260912T045131Z/core-8p8s-200k-128.csv new file mode 100644 index 0000000..591315b --- /dev/null +++ b/results/20260912T045131Z/core-8p8s-200k-128.csv @@ -0,0 +1,17 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +HuvulruPjjaqnoHWeFCH2I,S0,200000,25600000,349350,44716843.071789,0.572491 +HuvulruPjjaqnoHWeFCH2I,S1,200000,25600000,248162,31764858.924451,0.805922 +HuvulruPjjaqnoHWeFCH2I,S2,200000,25600000,244206,31258460.045739,0.818978 +HuvulruPjjaqnoHWeFCH2I,S3,200000,25600000,243405,31155913.818220,0.821674 +HuvulruPjjaqnoHWeFCH2I,S4,200000,25600000,230550,29510438.641581,0.867490 +HuvulruPjjaqnoHWeFCH2I,S5,200000,25600000,231495,29631384.363172,0.863949 +HuvulruPjjaqnoHWeFCH2I,S6,200000,25600000,229528,29379679.692357,0.871351 +HuvulruPjjaqnoHWeFCH2I,S7,200000,25600000,223842,28651789.197519,0.893487 +HuvulruPjjaqnoHWeFCH2I,P0,25000,3200000,152536,19524693.902374,0.163895 +HuvulruPjjaqnoHWeFCH2I,P1,25000,3200000,84526,10819333.375159,0.295767 +HuvulruPjjaqnoHWeFCH2I,P2,25000,3200000,82017,10498223.303653,0.304813 +HuvulruPjjaqnoHWeFCH2I,P3,25000,3200000,57214,7323427.896669,0.436954 +HuvulruPjjaqnoHWeFCH2I,P4,25000,3200000,53879,6896566.453658,0.463999 +HuvulruPjjaqnoHWeFCH2I,P5,25000,3200000,51420,6581852.801766,0.486185 +HuvulruPjjaqnoHWeFCH2I,P6,25000,3200000,48572,6217303.262856,0.514693 +HuvulruPjjaqnoHWeFCH2I,P7,25000,3200000,41744,5343333.685114,0.598877 diff --git a/results/20260912T045131Z/core-8p8s-200k-128.txt b/results/20260912T045131Z/core-8p8s-200k-128.txt new file mode 100644 index 0000000..e841fde --- /dev/null +++ b/results/20260912T045131Z/core-8p8s-200k-128.txt @@ -0,0 +1,25 @@ +=== core-8p8s-200k-128 === + +NATS Pub/Sub stats: 2,007,937 msgs/sec ~ 245.11 MB/sec + Pub stats: 333,957 msgs/sec ~ 40.77 MB/sec + [1] 152,536 msgs/sec ~ 18.62 MB/sec (25000 msgs) + [2] 84,526 msgs/sec ~ 10.32 MB/sec (25000 msgs) + [3] 82,017 msgs/sec ~ 10.01 MB/sec (25000 msgs) + [4] 57,214 msgs/sec ~ 6.98 MB/sec (25000 msgs) + [5] 53,879 msgs/sec ~ 6.58 MB/sec (25000 msgs) + [6] 51,420 msgs/sec ~ 6.28 MB/sec (25000 msgs) + [7] 48,572 msgs/sec ~ 5.93 MB/sec (25000 msgs) + [8] 41,744 msgs/sec ~ 5.10 MB/sec (25000 msgs) + min 41,744 | avg 71,488 | max 152,536 | stddev 33,867 msgs + Sub stats: 1,790,736 msgs/sec ~ 218.60 MB/sec + [1] 349,350 msgs/sec ~ 42.65 MB/sec (200000 msgs) + [2] 248,162 msgs/sec ~ 30.29 MB/sec (200000 msgs) + [3] 244,206 msgs/sec ~ 29.81 MB/sec (200000 msgs) + [4] 243,405 msgs/sec ~ 29.71 MB/sec (200000 msgs) + [5] 230,550 msgs/sec ~ 28.14 MB/sec (200000 msgs) + [6] 231,495 msgs/sec ~ 28.26 MB/sec (200000 msgs) + [7] 229,528 msgs/sec ~ 28.02 MB/sec (200000 msgs) + [8] 223,842 msgs/sec ~ 27.32 MB/sec (200000 msgs) + min 223,842 | avg 250,067 | max 349,350 | stddev 38,364 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/js-1p-20k-128-r3.csv b/results/20260912T045131Z/js-1p-20k-128-r3.csv new file mode 100644 index 0000000..a859e0f --- /dev/null +++ b/results/20260912T045131Z/js-1p-20k-128-r3.csv @@ -0,0 +1,2 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +S0xQOJuOM4PlwAHoh5Bj7f,P0,40000,2560000,16155,2067883.858001,1.237981 diff --git a/results/20260912T045131Z/js-1p-20k-128-r3.txt b/results/20260912T045131Z/js-1p-20k-128-r3.txt new file mode 100644 index 0000000..acbbaba --- /dev/null +++ b/results/20260912T045131Z/js-1p-20k-128-r3.txt @@ -0,0 +1,5 @@ +=== js-1p-20k-128-r3 === + +Pub stats: 16,155 msgs/sec ~ 1.97 MB/sec + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/js-2p2s-20k-128-r3.csv b/results/20260912T045131Z/js-2p2s-20k-128-r3.csv new file mode 100644 index 0000000..99cceef --- /dev/null +++ b/results/20260912T045131Z/js-2p2s-20k-128-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +smN9zLbWAAZER4FjSmfwcO,S0,20126,1280000,5474,700679.773679,1.826797 +smN9zLbWAAZER4FjSmfwcO,S1,20130,1280000,5471,700313.845376,1.827752 +smN9zLbWAAZER4FjSmfwcO,P0,20000,1280000,8678,1110910.588857,1.152208 +smN9zLbWAAZER4FjSmfwcO,P1,20000,1280000,5485,702119.773868,1.823051 diff --git a/results/20260912T045131Z/js-2p2s-20k-128-r3.txt b/results/20260912T045131Z/js-2p2s-20k-128-r3.txt new file mode 100644 index 0000000..b308dd7 --- /dev/null +++ b/results/20260912T045131Z/js-2p2s-20k-128-r3.txt @@ -0,0 +1,13 @@ +=== js-2p2s-20k-128-r3 === + +NATS Pub/Sub stats: 21,861 msgs/sec ~ 2.67 MB/sec + Pub stats: 10,965 msgs/sec ~ 1.34 MB/sec + [1] 8,678 msgs/sec ~ 1.06 MB/sec (10000 msgs) + [2] 5,485 msgs/sec ~ 685.66 KB/sec (10000 msgs) + min 5,485 | avg 7,081 | max 8,678 | stddev 1,596 msgs + Sub stats: 10,942 msgs/sec ~ 1.34 MB/sec + [1] 5,474 msgs/sec ~ 684.26 KB/sec (10000 msgs) + [2] 5,471 msgs/sec ~ 683.90 KB/sec (10000 msgs) + min 5,471 | avg 5,472 | max 5,474 | stddev 1 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/js-4p-20k-1k-r3.csv b/results/20260912T045131Z/js-4p-20k-1k-r3.csv new file mode 100644 index 0000000..87fbaa8 --- /dev/null +++ b/results/20260912T045131Z/js-4p-20k-1k-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +zOcPILhowCWfp2PGmHUgqx,P0,10000,5120000,5121,5244574.853257,0.976247 +zOcPILhowCWfp2PGmHUgqx,P1,10000,5120000,4281,4383926.080211,1.167903 +zOcPILhowCWfp2PGmHUgqx,P2,10000,5120000,3480,3564282.061583,1.436474 +zOcPILhowCWfp2PGmHUgqx,P3,10000,5120000,3373,3454449.904903,1.482146 diff --git a/results/20260912T045131Z/js-4p-20k-1k-r3.txt b/results/20260912T045131Z/js-4p-20k-1k-r3.txt new file mode 100644 index 0000000..0a13168 --- /dev/null +++ b/results/20260912T045131Z/js-4p-20k-1k-r3.txt @@ -0,0 +1,10 @@ +=== js-4p-20k-1k-r3 === + +Pub stats: 13,493 msgs/sec ~ 13.18 MB/sec + [1] 5,121 msgs/sec ~ 5.00 MB/sec (5000 msgs) + [2] 4,281 msgs/sec ~ 4.18 MB/sec (5000 msgs) + [3] 3,480 msgs/sec ~ 3.40 MB/sec (5000 msgs) + [4] 3,373 msgs/sec ~ 3.29 MB/sec (5000 msgs) + min 3,373 | avg 4,063 | max 5,121 | stddev 704 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/js-4p-50k-128-r3.csv b/results/20260912T045131Z/js-4p-50k-128-r3.csv new file mode 100644 index 0000000..69c5663 --- /dev/null +++ b/results/20260912T045131Z/js-4p-50k-128-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +vZIFpR751J0vbDTJQDYGTN,P0,25000,1600000,6628,848387.283433,1.885931 +vZIFpR751J0vbDTJQDYGTN,P1,25000,1600000,5762,737571.570534,2.169281 +vZIFpR751J0vbDTJQDYGTN,P2,25000,1600000,4162,532825.280344,3.002861 +vZIFpR751J0vbDTJQDYGTN,P3,25000,1600000,4154,531740.716359,3.008985 diff --git a/results/20260912T045131Z/js-4p-50k-128-r3.txt b/results/20260912T045131Z/js-4p-50k-128-r3.txt new file mode 100644 index 0000000..75ea713 --- /dev/null +++ b/results/20260912T045131Z/js-4p-50k-128-r3.txt @@ -0,0 +1,10 @@ +=== js-4p-50k-128-r3 === + +Pub stats: 16,607 msgs/sec ~ 2.03 MB/sec + [1] 6,628 msgs/sec ~ 828.50 KB/sec (12500 msgs) + [2] 5,762 msgs/sec ~ 720.28 KB/sec (12500 msgs) + [3] 4,162 msgs/sec ~ 520.34 KB/sec (12500 msgs) + [4] 4,154 msgs/sec ~ 519.28 KB/sec (12500 msgs) + min 4,154 | avg 5,176 | max 6,628 | stddev 1,063 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T045131Z/lat-1p-5k-128.txt b/results/20260912T045131Z/lat-1p-5k-128.txt new file mode 100644 index 0000000..9a05d77 --- /dev/null +++ b/results/20260912T045131Z/lat-1p-5k-128.txt @@ -0,0 +1,2 @@ +=== lat-1p-5k-128 === +{"count":5000,"pubs":1,"size":128,"min_us":149279,"avg_us":238626,"p50_us":248752,"p90_us":274314,"p99_us":279398,"max_us":279740,"min":"149.279ms","avg":"238.626ms","p50":"248.752ms","p90":"274.314ms","p99":"279.398ms","max":"279.740ms"} diff --git a/results/20260912T045131Z/lat-4p-10k-128.txt b/results/20260912T045131Z/lat-4p-10k-128.txt new file mode 100644 index 0000000..e5c883c --- /dev/null +++ b/results/20260912T045131Z/lat-4p-10k-128.txt @@ -0,0 +1,2 @@ +=== lat-4p-10k-128 === +{"count":10000,"pubs":4,"size":128,"min_us":174174,"avg_us":263186,"p50_us":266672,"p90_us":299073,"p99_us":304233,"max_us":304475,"min":"174.174ms","avg":"263.186ms","p50":"266.672ms","p90":"299.073ms","p99":"304.233ms","max":"304.475ms"} diff --git a/results/20260912T045131Z/lat-4p-5k-1k.txt b/results/20260912T045131Z/lat-4p-5k-1k.txt new file mode 100644 index 0000000..e22e578 --- /dev/null +++ b/results/20260912T045131Z/lat-4p-5k-1k.txt @@ -0,0 +1,2 @@ +=== lat-4p-5k-1k === +{"count":5000,"pubs":4,"size":1024,"min_us":155101,"avg_us":211706,"p50_us":217579,"p90_us":223268,"p99_us":227798,"max_us":228370,"min":"155.101ms","avg":"211.706ms","p50":"217.579ms","p90":"223.268ms","p99":"227.798ms","max":"228.370ms"} diff --git a/results/20260912T045131Z/lat-8p-20k-128.txt b/results/20260912T045131Z/lat-8p-20k-128.txt new file mode 100644 index 0000000..b445541 --- /dev/null +++ b/results/20260912T045131Z/lat-8p-20k-128.txt @@ -0,0 +1,2 @@ +=== lat-8p-20k-128 === +{"count":20000,"pubs":8,"size":128,"min_us":304586,"avg_us":453749,"p50_us":466296,"p90_us":499924,"p99_us":505112,"max_us":505620,"min":"304.586ms","avg":"453.749ms","p50":"466.296ms","p90":"499.924ms","p99":"505.112ms","max":"505.620ms"} diff --git a/results/20260912T045131Z/lat-ping-1k-128.txt b/results/20260912T045131Z/lat-ping-1k-128.txt new file mode 100644 index 0000000..4084dc8 --- /dev/null +++ b/results/20260912T045131Z/lat-ping-1k-128.txt @@ -0,0 +1,2 @@ +=== lat-ping-1k-128 === +{"count":1000,"pubs":1,"size":128,"min_us":254,"avg_us":307,"p50_us":286,"p90_us":332,"p99_us":734,"max_us":2763,"min":"0.254ms","avg":"0.307ms","p50":"0.286ms","p90":"0.332ms","p99":"0.734ms","max":"2.763ms"} diff --git a/results/20260912T051237Z/BENCH.md b/results/20260912T051237Z/BENCH.md new file mode 100644 index 0000000..9c58034 --- /dev/null +++ b/results/20260912T051237Z/BENCH.md @@ -0,0 +1,48 @@ +# NATS cluster message speed + +Run **`20260912T051237Z`** (UTC). Client: LXC **510** `verae-px-worker` (`10.10.10.20`), not a nats-* server. Servers: `nats-a/b/c` on `10.10.10.21–23` (`vmbr1` only). + +Client URL: + +```text +nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +``` + +## Method + +- **Core NATS** is fire-and-forget pub/sub (`nats bench`). No disk, no replica ack. +- **JetStream** uses **file** storage and **replicas=3** (same as product streams). The unique stream `benchstream` is deleted between JS loads. +- Throughput is **msgs/sec** from nats CLI **0.1.6** (`--no-progress --csv`). Its min/avg/max are publisher **rate spread**, not delay. +- **Ping** delay: one publisher, sequential publish-then-wait. This is one-message round-trip through the cluster. +- **Flood** delay: N publishers dump the whole batch, then the subscriber drains. This is **queueing under burst**, not wire RTT. +- Probe: `scripts/latency.mjs` (two connections, header timestamp). + +## Throughput + +| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s | +|-----|------|------------------|------------|----------|------------|----------| +| `core-1p1s-50k-128` | core pub/sub | 776,331 | 502,502 | 61.34 | 420,976 | 51.39 | +| `core-4p4s-100k-128` | core pub/sub | 1,278,454 | 379,985 | 46.38 | 1,078,910 | 131.70 | +| `core-4p4s-50k-1k` | core pub/sub | 581,464 | 209,545 | 204.63 | 482,645 | 471.33 | +| `core-8p8s-200k-128` | core pub/sub | 2,065,217 | 333,731 | 40.74 | 1,847,242 | 225.49 | +| `js-2p2s-20k-128-r3` | jetstream r=3 file | 15,416 | — | — | — | — | +| `js-4p-20k-1k-r3` | jetstream r=3 file | — | 14,985 | 14.63 | — | — | +| `js-4p-50k-128-r3` | jetstream r=3 file | — | 17,986 | 2.20 | — | — | + +## Round-trip delay + +| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max | +|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----| +| `lat-ping-1k-128` | ping (sequential RTT) | 1000 | 1 | 128 B | 0.341ms | 0.470ms | 0.395ms | 0.651ms | 1.377ms | 3.243ms | +| `lat-1p-5k-128` | flood (burst queueing) | 5000 | 1 | 128 B | 132.425ms | 203.717ms | 204.458ms | 241.750ms | 249.468ms | 249.640ms | +| `lat-4p-5k-1k` | flood (burst queueing) | 5000 | 4 | 1024 B | 196.422ms | 221.264ms | 224.039ms | 233.180ms | 236.798ms | 238.177ms | +| `lat-4p-10k-128` | flood (burst queueing) | 10000 | 4 | 128 B | 211.108ms | 294.925ms | 300.254ms | 314.223ms | 315.551ms | 316.091ms | +| `lat-8p-20k-128` | flood (burst queueing) | 20000 | 8 | 128 B | 280.608ms | 414.972ms | 409.802ms | 513.821ms | 535.394ms | 536.084ms | + +## What the numbers mean + +Product job/event/archive traffic is **JetStream r=3 file**. On this three-LXC stand that is about **16k durable 128 B pubs/s** (about **13k** at 1 KiB). Core NATS is an upper bound for non-durable fan-out: about **0.7–2.0M msgs/s** aggregate at 128 B, or **~630k msgs/s (~616 MB/s)** at 1 KiB with 4 publishers. + +A quiet request-reply is **~0.3 ms** average, **p99 < 1 ms**. Flood rows in the **150–500 ms** band are the subscriber catching up after a burst, which is what a job-events mailbox sees if publishers outrun consumers. + +Re-run on NS1: `bash scripts/bench.sh`. Raw logs/CSVs are under `results//`. diff --git a/results/20260912T051237Z/charts/core-throughput.png b/results/20260912T051237Z/charts/core-throughput.png new file mode 100644 index 0000000000000000000000000000000000000000..44609c24554fa6cc58a0ab158d2b8f14e100ff89 GIT binary patch literal 57055 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 literal 0 HcmV?d00001 diff --git a/results/20260912T051237Z/charts/core-vs-js.png b/results/20260912T051237Z/charts/core-vs-js.png new file mode 100644 index 0000000000000000000000000000000000000000..dae2b58dfb04f368fd1de894a160b31cc1c82576 GIT binary patch literal 42606 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 literal 0 HcmV?d00001 diff --git a/results/20260912T051237Z/charts/delay-percentiles.png b/results/20260912T051237Z/charts/delay-percentiles.png new file mode 100644 index 0000000000000000000000000000000000000000..f57cf44d9b51cfc401fcef4c90a02258a6ef8bb5 GIT binary patch literal 41403 zcmeFZcT`i`*Dj2D)MJBV1Es1I>DU12Ho$=N4gw;**U$r2P*jjmA|0iN-b*Md2SE^! z4hf-1O#+0HP!b?_1^E5WIq!Y%_rCYLW8Crm@$E4(%rKj^*IsL`HRpVuXRg

dGgM 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 PE>@#UroRy{+`9Xp+qi{u literal 0 HcmV?d00001 diff --git a/results/20260912T051237Z/charts/payload-size.png b/results/20260912T051237Z/charts/payload-size.png new file mode 100644 index 0000000000000000000000000000000000000000..5c643565d139435e49eb74061223d75888b7b0f0 GIT binary patch literal 53089 zcmd43XIN9&+c%0j=qPP0fPjEq>C!u>2uSa}L_|Ufy>~1Fjv}D+UZfKsLP945LRNC1+)x|MNcQI$zG0bKdLax@OD_%$~jXTI;@l?dF57wkpFV_DeK0Gz@Cb zpXt-k&?0DP&Zhl&9{ii_3g3M2$7640Q*Q$|sJEYuryY%!jkmkAo42#$%bUJ-o?eb_ zuA+j%j|7GJUO~O=h52tfcze5h$p{I#{I8!Abn~bY_~8C>h4`*Sld8k*~A)W6QC z`Mis#q3LZ`d-lZ8KYeY|$KOzOynPFD?djiAS0*MoKQ>%*@F+@pYEgm;f%okUB_y8B z*ToOA`1$!Uv5VEJ-n@8AaD)4nhPH3+AC>VNi}isCqKn;Y={=omAqx|>ap~#l{NR83 z?^o$RE}?$^{SU8q|Fk~$-``+tf&J&>Yuqh=hW~v2Ci4g4%zr)`zyB@%pO4Kee>GCy z4fV^E^X=kp7n|8FjSbi59(nCOge)LNBv9$1$@@+PkMOw!ZE-DMVB zE7+dzEU`x8oe1Sssba35F`PZBtb*41x%Y|Pofb7tIVo7mH`B!8kdIUz+q%JQaZUrXnN>r_H*F85m0I z*CL2rt1qSrEe_q4JRC}Ec>7LCY`W$b9_5(Un}Nw5ugQ&1Pj|+L%`9<&XMy6UszZ`a zQ$!3-kC=F+q@D>2R}_R~$W~z?VbNjPC-3J;(RV`*PR9dJs%%(Rch`5~eb+`^9ya(M zK8uLC{Fl3>D6|K+E`M6@KV9jntWu(T>jAjzebV=EqY^_kT&bRsxRas5JF?H*y7g#j z)WLy2=S8W4kkbqE8)1)wNSyuQbV>B>@eij9(GA1)izv}OH;Nos{oyxY;hRgGCs0ON zA*UJ9T*%{diudoEjvy|;j-n^oNnLlr#kF9@lR=+%39n`g%J5Y|2zJTNhUU{o+DL)( z<@X%d8Mzy#|-Bk)$=Ql_oLxw$5O?LY1i(arJb_ ztB)}e4%a9jf3B`R*iJdrkE5hQYm08FUA|m%?XrgktC02Z^c~eI=R;n#!7zmY9Rz(? zOKDlaPLe5o<((sbtKgosui!w`VxDuHrTNBAh+&7nc?ao! zL}exJ?nWq_&e18Q6c)a3BF|inbTKJ0e4?+;9?r}+!oJVUGm~pA-vGB98{{?YP@A5< zEEBMT+9%3pzs_w(hJ-esp!z7UZ5m#*oDJOBO9H#+;uyZ5`wkEI;aKmPIUZ$|DTy19 z+(0Awo!!US?x~k;A15frgv_)OyA zkw{nNso@k+`>HUC4N=kkVQa&S!JYkm{YjZBl!YW9=ak?l=)$#GUz*220SR@m_Yf%`ENw>BY^;+6RaVzC$U$`}fR!T!wdPQ#4; z)mUzVs9wRrU5q!rw`o9IR-cAnDmLkJP1(0;>lBZ0VP&;1vlfOZe>^akI~|jg;g_68xnt+SLbl`WS|@--K*v5I#%ZzU}IGj0jt5Wt!^sm^6Zq z@CgeK=vKQ=85)(DkIih|%8?Xvo0_2)dN~Bn#MPgaqIw@#v3GH7to~sAzg3fo4;0MT z!6c$zZjWn{>u7fQX|kB{{(d5+elv&m2fkRuD8j#Gn*vp1(jpwtt-`ZStH(`^n{EJ&u zZDD)2!xn~9mb64tEO6LR2n!Dn?;7vY5U`NIuHK0#b{-pK8JF>#ORnA+%~yJV)_dkv zwrfNtia2j$g_~##sg39$tnPn2;=iG|4R0z4WpeH$(dI!gck@Y@&`r6vGMtT1r*oP3g zQ((*6bwSyN37|arZfuR@D4mf3|Hb##JJ(pa%4=)=>!f76`Vh%0L&e45d=xA1+&9~| zU#>JF+jnYmDg+w}3k&n=4eCtRd-r#>LLTw^Cnrg`;!BhxlVBT7=Pq5kWNc`NnwX@6 ztIvO2>2In!&$Mn|{cs7a;O;9zp+I#FjHJ*CgF9kXc+I{GwbFvUyJ(9(>1{6{4k(6} zojJ*Rbi)f2KCLVT)p5VI;S}T|GYgC0gTlAlJA4HTJ?yK?h38B3+qTUzVb6XD^kgC* zr%AYt4CJ=^i1J&iseRbq-#7knrESkN^8U(jRa}W-dGfOK`e?=Y+KK2k@p7Qw9L#Kg z+GekPjwf(A-+n%$l@1CH&Liib+6MdUwTXA#gmf5!mdEHxCJ1X~9NgrW9{0Anr)MR! z$2!~0i)HDcBJShIX#IPxZWG6d1YHZ9jj*(`!qw`9METnlwMF*R(8xJZ zVag%3X>v%qi1JakBXvaREejJA9PZ{HyK{mL6+&vg-qzmEu@C;nC$e4Lo6$gRIwgTs zyr~DPIwiU}mepk0(C^&jnJ#V-w9C=bz%2Xe%JU34HizmBeAP{>29`WfYMs_<)yO-f zij?!bo+XCGSL)rTV;zqgxPMLvKwjYP5Mx%0J!m=VWC?v}qVGfpwcB zSBS(VC%+g~2weL+k>BdDnbr1qzhQt~9{P6rW!F5PiMZ{8oPcSqA+>7sX5iCsM+*%D z<_)g7Z4#}mcl7l$)9HsM4kM|Lesb6@6%bJHM@wd?Q})kO5w(jKdHSAE7pglQPNHlG zAgd)@rd z(kaDz<_Aw?jE5+{Cg@w~q=@^|@i22l1xChw2Xqg#K;?%5LwGdd4mX=%iN}u=Cd!#-W*u;y=v-YZ>GKF3j zAKoNCPaylr_^#!hrpsvwF@;%khddH#jr745^bLe5p5SNbCpD4;R|oUE@O54>y;+z% z;ap6e(BjTFwWENbBj5O+Cn9Q;qdv-fQPdCbu$nX*8}dmXPvGfT3)^W~shPk3-+`n6 zby>f4;rJ{CFKx^xiWQ%6DQ-qtl>hwU&WzUs2?^~!^g+omg5W$Hx?->Wdl`vuv}?G# zJdU6g+Gle4BMLM4K3u#QXtM+}uMYNUk_!dzS%I=06h+x%YV|XBSYi->RH(p5ocj@& zPcH{-X&yHP9jH8`c^#IZl~$9|Q(tab_tgnknz<@LAuUUiw^#L`Z(tf{qq#dS-q^y3#VUSyY9V-Rn* zs%PYqdFgu;Vr^dMR0gW*2tBJ&T#c$x z=+{xC0BEEw#KWUTU8M~)1rm9rdLpKMhj5ZSbVYi1W=Dq&dQ3SXd0Sz);&Ua`lX&cm z_qQHEihR-SyW8+P;>#pVm3<85oY^%=p~jP5Rp^^lRByU`p^oCwaH$+Z!SDX5#MsN< zc=nUi#rR-4OO3(Ue7@bT1A^$Ww#M`4{T+Ua#{T|4&aJc2(5Q3+jxz@rweL$yz?B(@ zju2g@8m+EAII(+(L?R6Ut{6A^*L@han0UKhs&O$ zw^yE*nN>ZOkdUZT*g&0bOiB)|erPEmZZvV{YIBay*PbjbT^E4Z9NSn`=4CmJl-yEt znkuc3aA}f-g_5|!tZMz$^3@Y--%nW#=LXrI?2){Y+u$6*7D^9OrD08Z@s^`y<`N^# zXF`UWtk&(*Ev^87?Ca~xF7;bY+*wzr<<>3oQ5IXh|CXy$3h0a>2V3^$sOC`<4h{~Z zhY(|}G%C6NhvFoYo0K>YQXkSF1Ddbua|juQz$_ZERJ}!!?f( z)(z!*9MwfiN5ch`fP9phqkA`Nb#~Xkl*wKnOjWQgPZYGUd&p<{?R6%X$Ya1&uvM@T z@k4}T1l!?auT?*Q^iOBo*}O)^$MDp;?KD)>^pRyN;r;uDOU#~w;El?7i0IO>3gV*D zYzk)W`^<`Jrh?lx*{MzbzGk}fa33Rayhvlw_hVEPw((E{wEPC z{+y*H2TnQfXI&-}J@Q#`Uh(>Z>Zjwib#;!T{q}p4OgxSOUu|ECK_}eE+dDDHq5zW` zLC!tgh+?YMr%Q~C18>7Ms$NX%tMP2KfFe>HMwkk0RAq%{BxIy2tb{LS=@-Y|Lpklq zw63bevItlgATYKe0+M|=ij;+QXc9J`)i`X zz8WIvObXdP!i+}22U3z=@V?@%kLCc%@s7{x;FDg#UKzjrw=ZY8y2C#vC!4D2_q8{a z_^h(j2hOMdj6Ukwt-GHeydhxTc-%B;L`(D7mx`3<;Nbm0?EvDfb9L*k{Q$MgI^8&j zJ~%cgAhx_Cm$EFo}* zxz$#(2x79)NcvE`_PklR%&b9=Qx^5Bmj_y`HhbO)S6RpNEqHhIqJVYfZS3*y#8R*~ zo$o_y$}?XQZc>9_}Q)s=Ypmb^r(M{BGFyYk9rTU(LA)STvb;B_fQeZPerY zlH5g+JavjWdp||3%3;h5z~zEUs|M2Y!3Tqq*!!lE9^Z8$Ml=JJApR;o94N7Pm(g!+ zyMfN&ngB33JZ}-UU9eQz4BSa1LPh7uBw|ADPF!9E<``>;xxAt0&+~BV+DjJLp-b0GWZvd2Atcqx;S$lB*zSGVEkzJ%VtJryEcMK{jd?dG3 z`!nif3UxB{`E+G0=-d7wcgK_(^yS9X3BKN?Fvq#SS%JLuUWmbtioUz|882NL{*__d z*Vbm(H`L4Bz5n|mRx>N?guFkPeM`ux^=Dau?aa)K&q0T7VK zr*Srq1VglKLFr`XS%HT~exl>T<5RN;c%J~)#zg(M3y$Zy6py6@+XMI(yTx^|{dctf z%GO9?45YN`FuZ9C*kL6k{jR!ua?qN@Yfv8_$|b8eFfd@og>g9&l&5@$o1jXMcir@?))C@^qp#z&a7c z#Z0z5l44_;v271N3UI`PzKlruWrK*JB5NaD$-MJ)wWxh>N`8N_S#IjB*LU;tMA+oM zA*Kc21Cr>1NA>*WF9^zF$PuH%>Gym*hVr==Qd`u~(V=N@Gf#2DW!x`?bBDaz$}qma zzaQxGLs$Oj7!GY;h|iyxo9|2z4&v5`HE4MoftkkpaO{DdwqD0%CLOfjI2K;%gex)C zw9+r}R%@+z&q(|5;X~7=CI!GiB!WV%EYtU9nINgO<@xdA=eeG_Zv6hN>!RUz=9Z9A zxuu>F+^{pQ+S1Z;ce_hysSBYGrTqN)({Z;CvvRbd(B;c-_M^aJ*nane<1SXBjt;?x4qf{M+B(C9#1*S zGMJk))HUKYp>{)h(cv9W^oNPf{ry2z?&xlE^U;sCHnTg{oK6psD0f#~_l|cfS7>Nh zE>o);pAa4LHw!$tbK24LcS5Gx1h7f@kgIkGgMyifhRs;X1HBc_hNHzcw|C5U}tq0wkGq zd;nfx<$-w#Sah?oL+>}q2+X0HZP=lJMV+OA^0VvqdL$y&01_&%UgN5)uC8Vz9MpRj zP2P@F2RN$4XqBOzw2`zE&W^nho&O1YFjS$Nxi23dE3|jDCpF{H`EYkIi*&fd$}p}? zOGl-&&^@Q&j*!e_ls0Xu;sr?Xp;Glqrc`Fl#_Xp&O6iw8pH)f6NwU^hN!ZM@?BI|P z@9FRN+S=F@ML8s$Zc0jy$SvEu0={yO0RcE)q(hiPtJ%JJ@s@nN|w9I)T8HEOZKMC0=-Uujj#702v!Y3!X zJM|5Wp9dV(iDpx-QmKq%&|&wCGUx!&$I7N=2N3SDbQw8I*CLguE8(nhJ0px zOVGo2K&IvSiZHp`)wjC=(%KkV*cXI2G@!1BT~gZ(x9r^ zCG<`}-09Od@mmBAHa<`&Mh3fIM8(96#3)Af<*EE6?h>&YRAzYYsM?{ge2-m}Y~iyq zIy^IZM^?n_x-jONknvDycgsLaDL?V{n}EZ*ow=(qtGP@noyFM!x-x*iwZ~))m5%M~ z0S16WDPI8KX=M9@9F18N4}Zn3{FSWrvxdIR$lV&xZ<{rpMyoV5bDU7%d~6%R6MO7z zZEX*31p(H}so*&@^J%!dwm!9wg&u8_XiA61!wZWU`|`Ve*LG-i z)5IK$1T*kmrO>6btB+F+RCkR)a`72+G!(tRHir5Qg*l) zD9b7PTcI6Jnl{UCmC2EvvEK8YRTJ_}`4}TEfg21okF9S56RN{RL1D^ivZT&Tp*u$L z@afK?_Ae2dKv`aO;JB#80wjLx!i5V;E1zHIKDY*O_5K}VbIu*8O9Id(lkC5I4XzWB z@!xc90F6f`_(htW+{8xlWYAV`#|Y}>yg8O>f0ySvzqHpv`u>Ju{AxQr0LcYC<3rV2 zU8PLD1=oGYjdJ54FxKf z?qs|n7KV6bm`UaW(pUGj9~wpgO$j8+w*7TutTCXWQor6?4LBq(@X>&%171;LS^Rdo zR_Xn@L6e>YV1K11xR^Fb5q4$^?3Opg*76s3m%|8sdb0O4$iD^#T0YCX8d*mJB~+v< zGQe@(rx6~2{8Vo%Wpf0ic8UXY;RHGwgU}orzD$vQYt$o3A?OG{1=mhsw*}x#B>JN81mPcV) z6R6MkVfG5WTo-75Ke_4hC(!fJq;(FcB8wk!sxYT@O4ro1woL}S$y8xjri@P$N1m6U z;qxdCoa7Bwa6uj{l%vy?&{Rek&E>r_FBD#*(1`JQ)Q z>MpYfDp52u>>koxMCUB~>HFm+NQA4AQ#=`?89m)=Wy5X)NfTH=al}wL(%OsG{YF|1 z`T&f)`~-!aNEuZERE7wPU{(H-|F7#6F_03bGiXqC^HvNdKKXN0?1|b8#{pN zo`@}s@E^T$eA5gNCwukPD_6Q%db-PeiQS49nhu=e%@j^h<<{u(irG+Xg)P(l-{$3( zYzYFknss8Z{a_^BJ;ycxU4Rgs8oMCw?0Dv9N5^>JB3g$()6LmA-FIDtDV|v~>FX^7 zv_;YRJktvN%017-OE1Sh;+%$18GvAEjSO0Cs=@YB8K8Cndt-@&?G-Oo^+U$zm;>7q z01sJM1sSzTfmPnOZk-4-y#;*)Nw?A9OEj{an51kbV+&!-SR@uBTkuMLmjE{A&SL^ zY-b5E|K+Y3#Xf8Twm^Y)RvF;zY|)Oom~tQ(xa%x#`Ns&7ZHA;WzKitYba%7YqTo_)jN(XPR!Hvoz15N@C-uD6jYU)j z|G8hc%&I{TDDVl?m3Pt{8ukAU;Qe!Q!(GMu0L_3KxZ|1WjoWR2o@$kJ#|6d*KdP@e*=x;tv7-@1b|59z;|oMWAy)@y!ON)e3pjOs6l`4CQ;twzajv)*IWT0~tlJ zMK&SgF8JrNgN=z)rw1Gi_{i*}AyAMmU3-}Q?b{>TOa;C$%DV!L8=h8cqejx2yPRrg zqc~Yu%F8FoB^F?Pt>E>bjxsYdmqh|y7LaM;M4btsBP$~{HJR*#1jCIUNo$FQ9lL>< z`AdIF6+8$e>Hdlh{rKU75s>%I>zxzu)sBw)X3Hjx$=Vq*E_el>6_mp9ffugW${^ZL z|Bm;{s33&3J?JmshVAXA39S~x7Qe09wTegblqIzBO~qKh~WOlgb|pn%s}sr(x-mwyCo1zwEDv4 zQ)O*wDXAi8loQAX^c(u}Zhj&&_-mtsd`8MTo`Y2jEQn+|N3-enm`W0vt;1ZB!8X|4 z8T}CP!jih-3(}-BQj7)CR@+!JMdqN|Ku>DL6Wq7>S5f1IG zZ;*m`d!vB&XIpD0ivTQy>eNHuIB8gO2zT>8`eFfSlpl1vZxEa=ey-W2B~VfiVse~+ z1OC4>+s9zXA>lj_!C;{|ZUi?TtgsymiW(goTTUrFpKP_JhQmPIBIn1%9bRyk5x$vq znUo4AD7XJ`_!{28tPfu7Q%IUCJg%Sof0K(8<)~3+L6`x*ZlrSH|^Bhl!#$Qz47uA(U2Ar2s%_$?NaeCNK9l2H3hxyrO?i zNpY1ZqGW0TWe9R}olpQFOtFiu*U;Njp!b2+e00p@kVSdJA44Q;T#Q_On*JXW;W)`5 z>6*$ZN^VE&i2G--0`UOwi{!FM+k5H<#XxR~sATC$OXjSxnKf=z&h)TtYS?Ij@yrLP zaRAx@;v?+quOEWy0U`p+@Ut|Vh$r~JXkO#|DU_)}6c46YJwbh}+;+Kr-=1=$O98F1 zvZjyB?vlWpfO2mUOF(}15|sp|LHRv8`?;kXo$)+&sXacJPr<7=XL)WffxM%oFHxvF ziTZJQ3?-BBnYKtMoKn2Dwzm5d*1Fd_erLOssm!9P{{c6K&%&asweT%1ox=T`f9kt$Y# z2n`8Z9Hae!vJN>^7I!s;Tn$Yt1#SbicQm3Khbrwv(F!k<+uBi8Rk*wlx#FM>X=O>9 z08$kTEO+(zhvntK{==C>EI4?`scmoX8pf(XQylv~+l1Y<%>j9+GY zPzg|?Q6RkKGFfd9$tpB56>`CQenot;o|y;8iva-vB~K44LANO23Mx&Z=EJ7LqmJ4D zpQ4ba(gK}2XnK;xO=Nx727tfD%*9ncH}|TpzMg99mROg4OqGO{N|bTO0W=ip!oW76 z1F}g#k*7mB?)Xye0nm4N%zkZeZ|j5p<}}dwq2A&^&fQO_bY26xyjXFy%43$rs?Jku zKvgYs@mQxtEXS^1V+!Uz{3}qjK+2@ujg^!f;-MwoFf+3#X?w^xtl6Xx@ zva4MzoE~GQ*b1ss#kTBE_KyhWKnd5*Qh)=@NZJ_^eFdsA=JZ$@grf?iy;ykwksKQx zEpkrLUl~9nBN#(ea&jcM^WDHEF{R0!MonD30^Q`4ocHzxO3)Pt8H5 z6Edimp?=*I`1ex(elGn#HT?MhYqIix*TrqK2%I#fYDkt0?}ar`h~Y`pxdNr$6Tg>p~@?3UYEfq&2(MtUfe zwuDC}4Hc=$MjoB+{0a)RJD_75M*9-$*~MJpfB*dlGUN_{E5}c@3HtCTbjUP{>|q%} zqyjc-9Fk`S{*k#8uC>atGTG3OPRHE2F!rhs*@vOJ>1wgYWyyv3DyKQeqgu>IvXO){ zX?5JfRwXP>2i=nUF=eEg^YrwB0Heb_$Eo8srfSjJ4eC!FlgMcsi+)Ko@Jg={>&aTS z`)VMM%KQdK)2tNfahf}C!?{QiwJV5?ixZttw8J|CXMf@&2w{M1f_5hT5O7C#dxNry z)R2t8GT@gmCm1u-Xf=ILouMf6F<#VHe6iMn@;! z^;vlp@Kc)RRrqi5?D&@EuWenT@)2fiG+g)iObY)%&|Pyk9G8fh_X2gGgY)O1fATT# zkR#^-)ElURJt0km0`wqea~zZU=u|c8bPEQ$H3onW`u1nfCI-9Bb~X+x?mD)0HpJbk zf5dk7u^^DV@4AfE8iC?MZ&zLYvxe$jZSP75(0nrnfd?Oe^V9}GpZhg7CY=@Z2hHR4 zN4@Q>uZZ^3|28Q9^W}FZT7R&JqyvvEPz1#bwuj=iDJ3n|}E4 z!5r!P?k;sJ0j9H=IsV6{!|gZsZc_875iY=hp}L1;A_=2q2W|wke~Bu$5ngOHSQ@H2 z+>TCEp@kDk;+xyDm^tS`W&atCAuJ`0YE<} zkwAuGClbO;f!z)=I&mPb>12o~D7V7H-LkAb-Q7EO1Ej;Izfu`Ikm-%w-M>vtPU5~j zkw+hVH*mt|<$yG82#A3->n`HwuSO67Vs!!{xs3P2$M4TY^DG5^`~JO^8Cd(#(b1kl zYXzM~yd^l>9$bx^PC!5)`$}KBION|#drG~?+LnNTYobY?DwKcEYc~c02XV>NM_W1q zrYKF;UPwGV4bCoEf{=uSnE`v@i#KUc(r3jvLn=T$*04@rnSpIk=iHHE%Dk-`hzdut z{M(PO0VxM`wYmmYXe_6*kcr~BF%W6c+8==jaK{`VNq_Iu% zKhF28xK34Cy=T0zG`ba6?=f3I4fnAHScG4a{?$Hi0d89_sh5aDTRf1Kk%5ve{{Tr^ zA&mAQi0FC$2M{#|TxAGbmIn5wGWtj^A7HDrXd%7tIzfJAHTXq|2gc>rFtT4#Z(Z8G ztAH0fiY_>`MhIMz3sC`PFUXU}Qg2L7-l!=Uyd?_@pVeVQz|N>Tb43Q#B*+rQ%{AWC)xglk{*~DSPrb_4c;<6yZkufgI z^73xIicS+nP1Hmeh`ue&6=OjuF#ew`-#xHOy_>^^GN5J!sDeOHkgQRut~J$G zHBchk9|qGj=f3q&m<@)pFIvnjFXw3QitqpJ)G>?ikZY2XZ2V z2N24mct8&)yc!xv2WjN7CM&q5yc>uonFF1MnorGb*M2A^W$59-WBW)*NGIW;9u*f; zGr>bB$5#6GK~^EF;oW5~R7ksPhIEiMc+sAoybl#IFR7^)Y6Nb~jZT9a&D~F@#iIfm zqPgVD)BatJ_?ns;Du!)07t;eJ%MeI4k$X&BGGEP*tPUgP=z7ojR1lW$1U_9`B(qVj z${v;6f*sZM(n=#Tq#(4Z)B>YsP|!Q5KzVnGi75%JuDKZOtK`)6@{i0SiirF!<7E&} z_c_?qYy0t|=$V=#HSqwFY)``J8te|!X_(Hoz~r`X-?>v2SS9@15M#}WKA6EqJSmG8 zIp}fL<+yqkzW6@6pS+jGFy9`XF$5&Sf1N7wdZhCnA0VjI*g`>HGVCFfT!`@-%xO*v zasjrYh_QnUX#CVUPy$}rJMj8NI! z;WPwOpK(@=3n71G>Oe8_=*pEV*O-~}`AiUwV1JVXy8npc+_6ejeCl}{kr^}bC)z{F zs-83eZdc0=KwK)!94?WEz|vYy17Hw`6|Hb{zv z4%-kceK;tMqs3}^=y`TriO;NIPgiOkGqMl;CsBLwl4BcY+4t#X#5D`4q`n#k5*CIGr0z{t>V0LrR4KxU0`kL%!a1qeQ`sV0Cg_Y=B7f~ z>d3pHdP$(eIm)MRbM_7I5-GC+IVn~TV` zb2P`}!oBwCSyqSAy>8h0@MTFkIf{%=_&mwnc$Df=#a+nZ`+g{s3SfioF z#`T83f?WOPscl`xr#ql&6-+9Kz1XCa@$V02@n13Bocr|{8{|nIQga$F$e*qS=+zy&B2^zmbV9a4-{=+K7+B31)a}%2etlD{zNNegM} zn|YIG8C08M1+->Kcv^CDk>nJ)dF?Er*q~6H3|#Y6^kZz{Nv0k5>kDsCxBTY>tg7*A zot`!2oJJ+DF5*heCUu*fa5Bm&D$vnk*^N+ViEOP^VAr$D97j3ttsZgzOlEMvQv1w# zh5%s;mwdnfj&WW<{dbJ>T7SNnb>>k2yGBfjdN|y`L5vX|&~7^6JJiKG?o$<9{NRZmc?2o$SkU+u_$is(p9a zo{*XV5=tv|ix6=-%R(R=Sfh`^5`_%UH0S>9(PZ~&Cu%z=-Ob(}(emynr5aceDCa{b zHIVYFVQ6U+u~RShfwKf`*MgKeHMtbZEcOa_WaBHO+5fi?V(?&NXmbfTz0$%;a+yFb=|C;%DX_pV*6j zI-pzkY>$E&6Fw}hBhd4A@f?&wu&t3HAo|eB@18M?gN@+AZpPhu!I>NorJ9-lTD8WN z)8Ld)mCMM<_$WaY=%QoW;wuD1jadd@HD<>%ONag@Rj!jyr)@5$iueEnL^{bXiyBB5 zp6#}`K)K?c0;R#&*)kp4lbN+Dv@;|$S!t&ZdrWy?SZb;Vvafj{QKqJzGPyapDd~Mw zEo?g6WCg2o#aU`=YvYk45Ktr~82)gb{5Zsih#pEcqN7JLDjqC}0vCx5&tqL$lo{mu zEjT0?1tVGa00;>B>DWrc`-TQ~$#O)A5$~_bNh>a{b@k_(x(*!-E@1YK>fCU0aB`MG zLQkv|qsZ#9pff9JU8m&Ubp+W+4!p}?UQT96V0KO^NIC|b2G1D-XX+!fz}F;@hB^zR z$L~KBwWL4f$3IyI!2cBxctEteh+VwIsqJG`ft*({b#4Pd8@5hr8WTzTf{HW+Gh{o; zzQL*8+!4Ew9C{4G`>_9sV%}8)Qw0bRQeeX`;q%{_D-3H23if{d)L4cD=1%`K4S?4D zYsVnjU0Pe)@a7f3|9gPYF|3S$gwK<3)rr9|n^<0|U{x)YMvsVf}%Lq)C}Y zjT(^r^q>7Gqd)r6$(}i$uFmmjJv}o1R^eG4KA^QInStgwROb~`2dq>uEh1>ynD_d% zEgs!YSPQwQMmZ#y$b?S#R}`4zI;k8rxDo9`?l#j(k?Gp3+v;t|Dgyp3Fy;R#UQ61- zz(B|iN|Xfm4dRT{Q480JKe5pn4OP8QAJ6PbQu@}aCoau*fk0R&K$f5b9f^4j2e&f4 z1smFeh_BKI2?)`U%$F};&aYdW3dvF8sX0?H)#P~iQ9Q!-e^Q`+_EX(pqXdzNk~bEA z|IVi7FTps+rAv&%kT9(gFuWid5=`TN?Gb1xLS_^xNNgtigibE@4>QWCeMBH>r5sFF zvY#!`Q5653$>lW^Gb;uLGTGLJfIyxVM*cF^mXQv6!{4BCJX8Z(nq&E}jv7N~Aupu- z6PXnBwCy9aUT|<@xfR{u*4083s1~%ev}w33dHWnQ_u=+-3qU-IE9ceu#C9W~-N`V2 zf_8?4h08d~a72(()2_jH14mN)Bo4z^j)?@$eBk0Ws{H$FZm!Q}|7B!F`rQ*TGAnTm zcB6qhQ%cRldCqsPtkvyM!xrK1Rg?EOb`-O-RAMCaVk+)}eL+o1i)F`9O{m!i+DMN+BY$OHU7K<-u@~c41DI4 z8ken5ZznJQ32}sQ`f60s?et~jI}oHxu`!ki9^D}m!q%rwCET0ioUrBZ%S~&=`N{xu zO0fb%7G-gv6qiqqK^@smE2jsqHO~d4I1YWwg!Ud_uicEx8*&Z?rl=T4Fon?Iwgg0M zVHYN@Aro){aIzaAFL`CJxNCyZF0p(zDKG(eOEK*(&_5jx2geF%41nEYRPi(*gj{z> z-?|Hg*W6rH89S*LK_KJ-68!-#_+Ux9?-5ZJniN5+lDuV>+TC|}s`>_4Bg=RX;3(Fk zK)FAi-~lNL)ZOBjhn_34zs-=dQvpGL7eh{t_Khdcm(jnIrg*pXfB`m+&_AE^)Z9J= zDaVLP5Y)b2-gtqQ7WT6{AaJ_wR_v?&ToAohC-3-motquk)5BNy95iV_Fd+@YWhUr-gHtmpX-3nnuIxvvD=S~6k*AdhO;KQm20ZNCZ+AZ_ zusg(iQeek90|h>GT8BYj*N7WjBoIr2+b&KOL~?<4ow_*=Dd?L3gP>7aFS-d2sWU1^ z>R- zFKfyvyC>0jUM1!b_g5p=39^EdXI@?w3>HCQOTnjOsxt1s*Eiz9*a8s$xm$&+tE*Eb zkGOF~dN{-3G7VLqwe7!eEy*p%gzYYH2zC7`&TjM4-s>@;h?n}!Os|(CnhpotKT%HK zMf~0yT1NJ)_bvgaiCuC(2)hqxDcpXe1-}?}6We})>yNi1{&_tX-+rtqHK^9~7KE7; z>1u=N(;)zUH0?kq8v=6$49KIqDGbq^oSeJ(e{v!!0cYNwiPTvIT3{CnvV6`ucGoxc zjG_8bG&R)3F2f&G^Pqr)W2FewJ7Cqb0>1+bOZg+&Y5J>Ogr|kYPRl&r$M1qiVy|ug zYXxZEBrrsVMi%WwYY--1r0zNFP|z! zBWrnX(pTzq1emBag1ctg_qDV<(NUCdM!A4?DN_Y=*h_6dB9z`L^^lXS>p*y@S1UIC z5{uYGU;|)U2Cv0Wp8DALrsEDSh85XGLIJPIvsoze%6SUyQzMh9H88#yIrPm&K0(lE z@R5U;pOEvG?=RrV)VpuRE_7QJ5y$;jyHmU_(ZzIZ8XK!YMgJB+Lm`1%Y)X`S%RM9S zR{_x#Mbi$LgTD4B9o&@R*;288oyA9U9G5alJ1Qdx_NNT9_ z=u6*ja9BjU6c2VkpHdkpV2jC}V2q{^6o3@L<}tXvWa~=>Fec+PTv{=vxrJiQqN1MZ z)}MxVlq1O{5QuGd{`1Qa2KN4T{wzKkId$r3=wpOkUn~sVPk9ot)td%L+Qf%_|Cn+x zUEGIkN4^3}N)11<^k${bKMhM!L&xRdAb7fN zS@hZFBy}=qKc#17W3Uc=%UwVX489nFEGfNc4S<`dpuQ%}2hZYxr~dBzzHoe%!_<$p z+U)GVT7Ai0v3Vod`9dIYjKJHgYz*O zVBBl`j$)_rxMLRF3(P_hYlarVjxKUaP-nqB!&0TJKD5-+TeosjxRR{>56XhrhZb-< z9zuhJdXv$f;CXu>(?Ah*-^1xRso?BiTCevI)zt3{TA8FY$VTE3{=!DZ`fA{J01VB_ z*C#`@@~M+Tdm-+kCqX)u$C-P3dwN?l$_&L8gUCdn-VK+JJ6!5mgbr8T zWfrnF6ySyx^jNGfm{0=N{s3Xvw|9SGTdkOa8(+rI1N(D=hKt>Y8dSUQHz)m zkoEw=$SXHDM6>8ZU)cK_$IY5yHcGK8!{v^~3rkByE4UJe*@A{Aiy-%9)#xvc#VBJ7 z7j+Hsk`^PZZFw#hec;%rO$PmYpeeK+0M! ze=|{@bzAKmSw064FBiOZ)5|EH+EtLd1+TbRJ0sO;q&gp8nV@ zJ-ntSsjYqQSGF8-pPwPx0N*+JIQ#D`NWqbt@~cKuE#tx7l3Ev=H_~nh`rdnyPqYBx z&kUKy-C%OK$8&3Iisei<61N0z zUa$qfK7u;T2}Vtg%f@|2(%iycBv-91ER;AJJSYa{Fv}{W$dzmm}}(x=mqB+mte87#on>m@KX>S$$sIuA=Wi$mE+@9?PV#^io5az>qa zqfVm&a)$d|XbtMRAJ$@`Yv+D`siu(HWykIF1)WRCp(`3Eo1MRRx&{~VW&ECBS^teU zPqiF}WJpi~=UjIBzJBWE$sG}(k-Kz#(f*T1(--kiJJ`VcR<7%Ypm9BF_?^W8YOWz7 zb8-mOzrBFU!YMG~RAzzhSnI6=QmO+fGlUHlTgMDvFQBhW+M0viu^#Ma&8$9XcpxKV zP8G+gzfYsv3sGd0<_abk{Vw+eaq2`&9geF!1B(sal&SeK=-=Pf)jCr#HN^y#>a>5h2I`UwNWhjD7vJTXAI{kw?CXEdoF4Tg zg&H_+H&Hp4`}^}>k@IFA?%o~V7>nsOE4Avo3R?Z$ZQuF-`P>gyS!&123`E1myv%FA zr2)GSq=*uekY1g{Lu$+}e*Y$7j#^Xr8SvfF9v#OUPHMjP45nAO-Q;R2?KEKXm31JD z^&BYCdenOXCYYdgy|YAX0GM|yF|Mk#W+#^xmjc3quXGHr1`=nPh2PRr#Z{TG=~(J< zDiTxt4AeOB!0tbAys9>>W?Ps%#wYs1h#H3R^BTwUpV=b0i6Rxj+BJ=rU#9FJu`AQ z_!}WE@rP~qS?yVomHoP11fIH!RAZfX_V|-W*<3npiqR&Bd^^HYS=mv#z4QL)OI~b*H?8zBhux3 z%n^+;`l@H6Q#z@^IF=Vx6%|yen!XMXcs!K~qBmz?^}+Kc#ld6SxPsq4qf|T^JvI?R^;&rmZWp0@VJ1p7OCF(xX1AR{Y8S<` z;j#*qFu#a zTYwcPk3v3=XUs1de4vXG-+vQxrXWlQm?GUDZ2TY0xy1TK7;eVisC;44 zVbuwQrxoLFIkx1dl`0VuJfZlDBYlhaeE~i)Rb8%7i{}sxfW8t&W9WBSP(!e24xzwneCZf#S@Qik??2snER%&{Or@ zU^_dFhz`G+j*hD$YeUJ8p;j^6<7CxakcwzubYuwMG4wqtaA`x~gUwjfLGfqLo<5}( zkLtz{Opagnb5n>AHEf}!b8-=9Ou@Eg;E2@ zj15#Q$KH&xq7=8!L)@>>#Z&ol7TRxk@%~4k_z3kdQ|WLj$_cuAfr^R`OMu#ZTrVF; zke^R071^9_hbA1`rSZoSU7%c&3!NAe8nHKCKsWufgB#A=EztqYz6`?6J4An| zXSnGxGF7u0=?=fWVqd!U?I^BvAr4x_9G+ln++|xc`|KCpbijv$5CIRhQM98|OjlZ) zxGy6P2w_-IaDkc~L0rkm$o!J%gS+Bnp&@yRM;0LL<^A&IUEr4;J9!if!X}}d-`=W0 z|A3_UYx?Buu^Fx}JcivI(_Q&`eZ^=+2p|p34X{w`uw|Rev77BT)_ko$H&~h^M9Uti z2A#juR5`r`Cz81OHYUT8DQiLUrg&wl6*_0Lrj#lUjC`#HEIu>J-R-4_XfL9C1iZ7x zZ|S>aKpDkMUBwC7bk|3FqLJPpAUh)LNKvNQ@Z?4>KC`y>rQtv&U@%qf*Ufhe2+yBN z*Y&ek0>&BJ-58J0pFbaSSWn+1(}WwXCPn(XERM?JS6hgPR9QeJwMvGWAyQ0jXm|mo zybP$s!78{>Zm@BDo{zi%9sBfG9;Cn{wda@`0PXWSR6v6O83q1aDyNqHpGK3?tl5_o zRc>d;#0Fw0aaLuzYH?2wy~NhPY)!IGFw)^Ali&At_|koG#yKm16x-Xec;%mHuiG8ru>0z3x{;S?ZrgZOwDA#l&b6MBmnI02CXC24Bcd? zM@CQZ&!6`_nF3T+Po`QrE^WoJOxG(8cf}nY3d|AmhL{aNmvfWsT@iheC*^5Q#Jr^x z=MN+gP)1KS4aI{NQ(h+J-U(b;k}>@hrH4E34|7Z&-h|#&lZ{{%={wRI5fzHM!@WXo zn}HL#@1T7}CM45jbZQN$Rt{YSnx_w)W>yxDY^{I8%B2%GFrZbC4sDDXfR3lR;f2_= zk^)UHuT#-+o31Yj8lhc$ddaSHmBez=Xb)3p9^hW>xmtR_GeG5 z9hj^bi{|Il=1NSs<`OsC>NL~!3E{>zL>0%>1SE&aesdgJJF_w!SMjUyz)#SAOCMl$ zMW9$51K}GWXoD`&l+LB!W&{9}`HmQRaIBtLkUx%33+UC@CQc$LUyQ1BVd5q9-JTqj z1j+H+<8lu{D2xGK(gtN%SwrxJ8oG(x5OC=_qf-zuD2cVSc4Dp>$*I+DUF*+9Z}5}n z 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�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 literal 0 HcmV?d00001 diff --git a/results/20260912T051237Z/core-1p1s-50k-128.csv b/results/20260912T051237Z/core-1p1s-50k-128.csv new file mode 100644 index 0000000..41892fc --- /dev/null +++ b/results/20260912T051237Z/core-1p1s-50k-128.csv @@ -0,0 +1,3 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +h0r77ozVkEaFq9NntdbNXL,S0,50000,6400000,420976,53884945.437030,0.118772 +h0r77ozVkEaFq9NntdbNXL,P0,50000,6400000,502502,64320317.108811,0.099502 diff --git a/results/20260912T051237Z/core-1p1s-50k-128.txt b/results/20260912T051237Z/core-1p1s-50k-128.txt new file mode 100644 index 0000000..943bab6 --- /dev/null +++ b/results/20260912T051237Z/core-1p1s-50k-128.txt @@ -0,0 +1,7 @@ +=== core-1p1s-50k-128 === + +NATS Pub/Sub stats: 776,331 msgs/sec ~ 94.77 MB/sec + Pub stats: 502,502 msgs/sec ~ 61.34 MB/sec + Sub stats: 420,976 msgs/sec ~ 51.39 MB/sec + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/core-4p4s-100k-128.csv b/results/20260912T051237Z/core-4p4s-100k-128.csv new file mode 100644 index 0000000..5938158 --- /dev/null +++ b/results/20260912T051237Z/core-4p4s-100k-128.csv @@ -0,0 +1,9 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +9lnpijWl8uftGl7cjgjfDG,S0,100000,12800000,338319,43304923.645655,0.295578 +9lnpijWl8uftGl7cjgjfDG,S1,100000,12800000,328136,42001487.567998,0.304751 +9lnpijWl8uftGl7cjgjfDG,S2,100000,12800000,319449,40889502.964037,0.313039 +9lnpijWl8uftGl7cjgjfDG,S3,100000,12800000,269727,34525150.333968,0.370744 +9lnpijWl8uftGl7cjgjfDG,P0,25000,3200000,184132,23569014.120587,0.135771 +9lnpijWl8uftGl7cjgjfDG,P1,25000,3200000,183847,23532419.588601,0.135983 +9lnpijWl8uftGl7cjgjfDG,P2,25000,3200000,100400,12851250.530089,0.249003 +9lnpijWl8uftGl7cjgjfDG,P3,25000,3200000,95281,12196082.439191,0.262379 diff --git a/results/20260912T051237Z/core-4p4s-100k-128.txt b/results/20260912T051237Z/core-4p4s-100k-128.txt new file mode 100644 index 0000000..773d5f7 --- /dev/null +++ b/results/20260912T051237Z/core-4p4s-100k-128.txt @@ -0,0 +1,17 @@ +=== core-4p4s-100k-128 === + +NATS Pub/Sub stats: 1,278,454 msgs/sec ~ 156.06 MB/sec + Pub stats: 379,985 msgs/sec ~ 46.38 MB/sec + [1] 184,132 msgs/sec ~ 22.48 MB/sec (25000 msgs) + [2] 183,847 msgs/sec ~ 22.44 MB/sec (25000 msgs) + [3] 100,400 msgs/sec ~ 12.26 MB/sec (25000 msgs) + [4] 95,281 msgs/sec ~ 11.63 MB/sec (25000 msgs) + min 95,281 | avg 140,915 | max 184,132 | stddev 43,112 msgs + Sub stats: 1,078,910 msgs/sec ~ 131.70 MB/sec + [1] 338,319 msgs/sec ~ 41.30 MB/sec (100000 msgs) + [2] 328,136 msgs/sec ~ 40.06 MB/sec (100000 msgs) + [3] 319,449 msgs/sec ~ 39.00 MB/sec (100000 msgs) + [4] 269,727 msgs/sec ~ 32.93 MB/sec (100000 msgs) + min 269,727 | avg 313,907 | max 338,319 | stddev 26,367 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/core-4p4s-50k-1k.csv b/results/20260912T051237Z/core-4p4s-50k-1k.csv new file mode 100644 index 0000000..ebabee0 --- /dev/null +++ b/results/20260912T051237Z/core-4p4s-50k-1k.csv @@ -0,0 +1,9 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +TBolrRDh6R5ucnsIDRic4k,S0,50000,51200000,152508,156168868.728545,0.327850 +TBolrRDh6R5ucnsIDRic4k,S1,50000,51200000,143666,147114019.174715,0.348029 +TBolrRDh6R5ucnsIDRic4k,S2,50000,51200000,125714,128731399.676746,0.397727 +TBolrRDh6R5ucnsIDRic4k,S3,50000,51200000,123195,126152033.863128,0.405859 +TBolrRDh6R5ucnsIDRic4k,P0,12500,12800000,85005,87045293.746584,0.147050 +TBolrRDh6R5ucnsIDRic4k,P1,12500,12800000,84991,87030908.333567,0.147074 +TBolrRDh6R5ucnsIDRic4k,P2,12500,12800000,54739,56053364.168990,0.228354 +TBolrRDh6R5ucnsIDRic4k,P3,12500,12800000,52467,53726394.065295,0.238244 diff --git a/results/20260912T051237Z/core-4p4s-50k-1k.txt b/results/20260912T051237Z/core-4p4s-50k-1k.txt new file mode 100644 index 0000000..c34c617 --- /dev/null +++ b/results/20260912T051237Z/core-4p4s-50k-1k.txt @@ -0,0 +1,17 @@ +=== core-4p4s-50k-1k === + +NATS Pub/Sub stats: 581,464 msgs/sec ~ 567.84 MB/sec + Pub stats: 209,545 msgs/sec ~ 204.63 MB/sec + [1] 85,005 msgs/sec ~ 83.01 MB/sec (12500 msgs) + [2] 84,991 msgs/sec ~ 83.00 MB/sec (12500 msgs) + [3] 54,739 msgs/sec ~ 53.46 MB/sec (12500 msgs) + [4] 52,467 msgs/sec ~ 51.24 MB/sec (12500 msgs) + min 52,467 | avg 69,300 | max 85,005 | stddev 15,718 msgs + Sub stats: 482,645 msgs/sec ~ 471.33 MB/sec + [1] 152,508 msgs/sec ~ 148.93 MB/sec (50000 msgs) + [2] 143,666 msgs/sec ~ 140.30 MB/sec (50000 msgs) + [3] 125,714 msgs/sec ~ 122.77 MB/sec (50000 msgs) + [4] 123,195 msgs/sec ~ 120.31 MB/sec (50000 msgs) + min 123,195 | avg 136,270 | max 152,508 | stddev 12,255 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/core-8p8s-200k-128.csv b/results/20260912T051237Z/core-8p8s-200k-128.csv new file mode 100644 index 0000000..4d6dc8b --- /dev/null +++ b/results/20260912T051237Z/core-8p8s-200k-128.csv @@ -0,0 +1,17 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +1wXmYbQfeZKgGIuRNRJWE9,S0,200000,25600000,294783,37732336.345174,0.678463 +1wXmYbQfeZKgGIuRNRJWE9,S1,200000,25600000,285956,36602476.046553,0.699406 +1wXmYbQfeZKgGIuRNRJWE9,S2,200000,25600000,270995,34687374.508938,0.738021 +1wXmYbQfeZKgGIuRNRJWE9,S3,200000,25600000,268481,34365602.744388,0.744931 +1wXmYbQfeZKgGIuRNRJWE9,S4,200000,25600000,242749,31071912.954289,0.823895 +1wXmYbQfeZKgGIuRNRJWE9,S5,200000,25600000,243757,31200898.690210,0.820489 +1wXmYbQfeZKgGIuRNRJWE9,S6,200000,25600000,232306,29735268.576473,0.860931 +1wXmYbQfeZKgGIuRNRJWE9,S7,200000,25600000,231301,29606645.928715,0.864671 +1wXmYbQfeZKgGIuRNRJWE9,P0,25000,3200000,161768,20706321.217329,0.154542 +1wXmYbQfeZKgGIuRNRJWE9,P1,25000,3200000,156790,20069204.386621,0.159448 +1wXmYbQfeZKgGIuRNRJWE9,P2,25000,3200000,101477,12989116.865479,0.246360 +1wXmYbQfeZKgGIuRNRJWE9,P3,25000,3200000,96840,12395608.110541,0.258156 +1wXmYbQfeZKgGIuRNRJWE9,P4,25000,3200000,48401,6195444.884723,0.516509 +1wXmYbQfeZKgGIuRNRJWE9,P5,25000,3200000,56695,7256990.291363,0.440954 +1wXmYbQfeZKgGIuRNRJWE9,P6,25000,3200000,42589,5451476.161959,0.586997 +1wXmYbQfeZKgGIuRNRJWE9,P7,25000,3200000,41987,5374439.609281,0.595411 diff --git a/results/20260912T051237Z/core-8p8s-200k-128.txt b/results/20260912T051237Z/core-8p8s-200k-128.txt new file mode 100644 index 0000000..c825366 --- /dev/null +++ b/results/20260912T051237Z/core-8p8s-200k-128.txt @@ -0,0 +1,25 @@ +=== core-8p8s-200k-128 === + +NATS Pub/Sub stats: 2,065,217 msgs/sec ~ 252.10 MB/sec + Pub stats: 333,731 msgs/sec ~ 40.74 MB/sec + [1] 161,768 msgs/sec ~ 19.75 MB/sec (25000 msgs) + [2] 156,790 msgs/sec ~ 19.14 MB/sec (25000 msgs) + [3] 101,477 msgs/sec ~ 12.39 MB/sec (25000 msgs) + [4] 96,840 msgs/sec ~ 11.82 MB/sec (25000 msgs) + [5] 48,401 msgs/sec ~ 5.91 MB/sec (25000 msgs) + [6] 56,695 msgs/sec ~ 6.92 MB/sec (25000 msgs) + [7] 42,589 msgs/sec ~ 5.20 MB/sec (25000 msgs) + [8] 41,987 msgs/sec ~ 5.13 MB/sec (25000 msgs) + min 41,987 | avg 88,318 | max 161,768 | stddev 46,314 msgs + Sub stats: 1,847,242 msgs/sec ~ 225.49 MB/sec + [1] 294,783 msgs/sec ~ 35.98 MB/sec (200000 msgs) + [2] 285,956 msgs/sec ~ 34.91 MB/sec (200000 msgs) + [3] 270,995 msgs/sec ~ 33.08 MB/sec (200000 msgs) + [4] 268,481 msgs/sec ~ 32.77 MB/sec (200000 msgs) + [5] 242,749 msgs/sec ~ 29.63 MB/sec (200000 msgs) + [6] 243,757 msgs/sec ~ 29.76 MB/sec (200000 msgs) + [7] 232,306 msgs/sec ~ 28.36 MB/sec (200000 msgs) + [8] 231,301 msgs/sec ~ 28.24 MB/sec (200000 msgs) + min 231,301 | avg 258,791 | max 294,783 | stddev 22,958 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/host-after.txt b/results/20260912T051237Z/host-after.txt new file mode 100644 index 0000000..c9898c8 --- /dev/null +++ b/results/20260912T051237Z/host-after.txt @@ -0,0 +1,86 @@ +execution_host=NS1.GEORGELAMBERT.ORG +execution_ip=70.88.205.138 +hostname=NS1.GEORGELAMBERT.ORG +utc=2026-09-12T05:14:00Z +whoami=marchon +pwd=/home/marchon/verae-src/verae-nats-cluster +uname=Linux NS1.GEORGELAMBERT.ORG 6.17.2-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.2-1 (2025-10-21T11:55Z) x86_64 GNU/Linux +nproc=40 +loadavg=8.67 8.33 8.15 9/3863 4114865 +client_vmid=510 +nats_url=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +--- free --- + total used free shared buff/cache available +Mem: 377Gi 38Gi 324Gi 4.3Gi 21Gi 339Gi +Swap: 8.0Gi 0B 8.0Gi +--- pct list --- +VMID Status Lock Name +100 stopped CT100 +101 stopped CT101 +102 stopped CT102 +103 stopped CT103 +104 stopped CT104 +105 stopped CT105 +106 stopped CT106 +107 stopped CT107 +108 stopped CT108 +109 stopped CT109 +110 stopped CT110 +111 stopped CT111 +112 stopped CT112 +113 stopped CT113 +114 stopped CT114 +115 stopped CT115 +116 stopped paul +117 stopped CT117 +118 stopped CT118 +119 stopped CT119 +120 stopped rustdeskserver +121 stopped CT121 +122 stopped CT122 +123 stopped CT123 +124 stopped bdross +200 stopped CT200 +201 stopped CT201 +202 stopped CT202 +300 running mail.veraetime.info +400 stopped evercycle-api +501 running pki +502 running peergos-a +503 running peergos-b +504 stopped minio +510 running verae-px-worker +511 running nats-a +512 running nats-b +513 running nats-c +2000 stopped CT2000 +2001 stopped CT2001 +2002 stopped CT2002 +--- pct config 510 --- +cores: 2 +hostname: verae-px-worker +memory: 2048 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:BD:5D:62,ip=10.10.10.20/24,type=veth +rootfs: SSD2:subvol-510-disk-0,size=16G +swap: 512 +--- pct config 511 --- +cores: 1 +hostname: nats-a +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:CF:AC:68,ip=10.10.10.21/24,type=veth +rootfs: SSD2:subvol-511-disk-0,size=8G +swap: 256 +--- pct config 512 --- +cores: 1 +hostname: nats-b +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:42:73:A2,ip=10.10.10.22/24,type=veth +rootfs: SSD2:subvol-512-disk-0,size=8G +swap: 256 +--- pct config 513 --- +cores: 1 +hostname: nats-c +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:1B:9B:DC,ip=10.10.10.23/24,type=veth +rootfs: SSD2:subvol-513-disk-0,size=8G +swap: 256 diff --git a/results/20260912T051237Z/host-before.txt b/results/20260912T051237Z/host-before.txt new file mode 100644 index 0000000..89ca238 --- /dev/null +++ b/results/20260912T051237Z/host-before.txt @@ -0,0 +1,86 @@ +execution_host=NS1.GEORGELAMBERT.ORG +execution_ip=70.88.205.138 +hostname=NS1.GEORGELAMBERT.ORG +utc=2026-09-12T05:12:37Z +whoami=marchon +pwd=/home/marchon/verae-src/verae-nats-cluster +uname=Linux NS1.GEORGELAMBERT.ORG 6.17.2-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.2-1 (2025-10-21T11:55Z) x86_64 GNU/Linux +nproc=40 +loadavg=8.59 8.39 8.15 5/3843 4096277 +client_vmid=510 +nats_url=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222 +--- free --- + total used free shared buff/cache available +Mem: 377Gi 38Gi 324Gi 4.2Gi 21Gi 339Gi +Swap: 8.0Gi 0B 8.0Gi +--- pct list --- +VMID Status Lock Name +100 stopped CT100 +101 stopped CT101 +102 stopped CT102 +103 stopped CT103 +104 stopped CT104 +105 stopped CT105 +106 stopped CT106 +107 stopped CT107 +108 stopped CT108 +109 stopped CT109 +110 stopped CT110 +111 stopped CT111 +112 stopped CT112 +113 stopped CT113 +114 stopped CT114 +115 stopped CT115 +116 stopped paul +117 stopped CT117 +118 stopped CT118 +119 stopped CT119 +120 stopped rustdeskserver +121 stopped CT121 +122 stopped CT122 +123 stopped CT123 +124 stopped bdross +200 stopped CT200 +201 stopped CT201 +202 stopped CT202 +300 running mail.veraetime.info +400 stopped evercycle-api +501 running pki +502 running peergos-a +503 running peergos-b +504 stopped minio +510 running verae-px-worker +511 running nats-a +512 running nats-b +513 running nats-c +2000 stopped CT2000 +2001 stopped CT2001 +2002 stopped CT2002 +--- pct config 510 --- +cores: 2 +hostname: verae-px-worker +memory: 2048 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:BD:5D:62,ip=10.10.10.20/24,type=veth +rootfs: SSD2:subvol-510-disk-0,size=16G +swap: 512 +--- pct config 511 --- +cores: 1 +hostname: nats-a +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:CF:AC:68,ip=10.10.10.21/24,type=veth +rootfs: SSD2:subvol-511-disk-0,size=8G +swap: 256 +--- pct config 512 --- +cores: 1 +hostname: nats-b +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:42:73:A2,ip=10.10.10.22/24,type=veth +rootfs: SSD2:subvol-512-disk-0,size=8G +swap: 256 +--- pct config 513 --- +cores: 1 +hostname: nats-c +memory: 1024 +net0: name=eth0,bridge=vmbr1,gw=10.10.10.1,hwaddr=BC:24:11:1B:9B:DC,ip=10.10.10.23/24,type=veth +rootfs: SSD2:subvol-513-disk-0,size=8G +swap: 256 diff --git a/results/20260912T051237Z/js-1p-20k-128-r3.csv b/results/20260912T051237Z/js-1p-20k-128-r3.csv new file mode 100644 index 0000000..9752dd6 --- /dev/null +++ b/results/20260912T051237Z/js-1p-20k-128-r3.csv @@ -0,0 +1,2 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +8rEl4zHbyuPY6Hq62w9Qsw,P0,40000,2560000,7393,946342.174329,2.705153 diff --git a/results/20260912T051237Z/js-1p-20k-128-r3.txt b/results/20260912T051237Z/js-1p-20k-128-r3.txt new file mode 100644 index 0000000..01e01af --- /dev/null +++ b/results/20260912T051237Z/js-1p-20k-128-r3.txt @@ -0,0 +1,5 @@ +=== js-1p-20k-128-r3 === + +Pub stats: 7,393 msgs/sec ~ 924.16 KB/sec + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/js-2p2s-20k-128-r3.csv b/results/20260912T051237Z/js-2p2s-20k-128-r3.csv new file mode 100644 index 0000000..fa3f7fa --- /dev/null +++ b/results/20260912T051237Z/js-2p2s-20k-128-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +VI7cqfC8hjqPoKek3p2a06,S0,20150,1280000,4248,543810.859674,2.353760 +VI7cqfC8hjqPoKek3p2a06,S1,20159,1280000,3858,493875.492651,2.591746 +VI7cqfC8hjqPoKek3p2a06,P0,20000,1280000,11290,1445228.034916,0.885673 +VI7cqfC8hjqPoKek3p2a06,P1,20000,1280000,3864,494600.778891,2.587946 diff --git a/results/20260912T051237Z/js-2p2s-20k-128-r3.txt b/results/20260912T051237Z/js-2p2s-20k-128-r3.txt new file mode 100644 index 0000000..bfcca29 --- /dev/null +++ b/results/20260912T051237Z/js-2p2s-20k-128-r3.txt @@ -0,0 +1,13 @@ +=== js-2p2s-20k-128-r3 === + +NATS Pub/Sub stats: 15,416 msgs/sec ~ 1.88 MB/sec + Pub stats: 7,728 msgs/sec ~ 966.02 KB/sec + [1] 11,290 msgs/sec ~ 1.38 MB/sec (10000 msgs) + [2] 3,864 msgs/sec ~ 483.01 KB/sec (10000 msgs) + min 3,864 | avg 7,577 | max 11,290 | stddev 3,713 msgs + Sub stats: 7,711 msgs/sec ~ 963.88 KB/sec + [1] 4,248 msgs/sec ~ 531.07 KB/sec (10000 msgs) + [2] 3,858 msgs/sec ~ 482.30 KB/sec (10000 msgs) + min 3,858 | avg 4,053 | max 4,248 | stddev 195 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/js-4p-20k-1k-r3.csv b/results/20260912T051237Z/js-4p-20k-1k-r3.csv new file mode 100644 index 0000000..4b305e7 --- /dev/null +++ b/results/20260912T051237Z/js-4p-20k-1k-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +InppzTmEhsFOG1VYCh0Nle,P0,10000,5120000,4792,4907526.298214,1.043295 +InppzTmEhsFOG1VYCh0Nle,P1,10000,5120000,4480,4587592.638694,1.116054 +InppzTmEhsFOG1VYCh0Nle,P2,10000,5120000,3792,3883639.365215,1.318351 +InppzTmEhsFOG1VYCh0Nle,P3,10000,5120000,3750,3840425.475938,1.333186 diff --git a/results/20260912T051237Z/js-4p-20k-1k-r3.txt b/results/20260912T051237Z/js-4p-20k-1k-r3.txt new file mode 100644 index 0000000..0e35ef9 --- /dev/null +++ b/results/20260912T051237Z/js-4p-20k-1k-r3.txt @@ -0,0 +1,10 @@ +=== js-4p-20k-1k-r3 === + +Pub stats: 14,985 msgs/sec ~ 14.63 MB/sec + [1] 4,792 msgs/sec ~ 4.68 MB/sec (5000 msgs) + [2] 4,480 msgs/sec ~ 4.38 MB/sec (5000 msgs) + [3] 3,792 msgs/sec ~ 3.70 MB/sec (5000 msgs) + [4] 3,750 msgs/sec ~ 3.66 MB/sec (5000 msgs) + min 3,750 | avg 4,203 | max 4,792 | stddev 446 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/js-4p-50k-128-r3.csv b/results/20260912T051237Z/js-4p-50k-128-r3.csv new file mode 100644 index 0000000..43e6f9a --- /dev/null +++ b/results/20260912T051237Z/js-4p-50k-128-r3.csv @@ -0,0 +1,5 @@ +#RunID,ClientID,MsgCount,MsgBytes,MsgsPerSec,BytesPerSec,DurationSecs +JeTysfxECHCJccBaGH4xXX,P0,25000,1600000,5640,721943.982931,2.216238 +JeTysfxECHCJccBaGH4xXX,P1,25000,1600000,5642,722187.413742,2.215491 +JeTysfxECHCJccBaGH4xXX,P2,25000,1600000,5056,647242.012627,2.472027 +JeTysfxECHCJccBaGH4xXX,P3,25000,1600000,4497,575730.101666,2.779080 diff --git a/results/20260912T051237Z/js-4p-50k-128-r3.txt b/results/20260912T051237Z/js-4p-50k-128-r3.txt new file mode 100644 index 0000000..676949a --- /dev/null +++ b/results/20260912T051237Z/js-4p-50k-128-r3.txt @@ -0,0 +1,10 @@ +=== js-4p-50k-128-r3 === + +Pub stats: 17,986 msgs/sec ~ 2.20 MB/sec + [1] 5,640 msgs/sec ~ 705.02 KB/sec (12500 msgs) + [2] 5,642 msgs/sec ~ 705.26 KB/sec (12500 msgs) + [3] 5,056 msgs/sec ~ 632.07 KB/sec (12500 msgs) + [4] 4,497 msgs/sec ~ 562.24 KB/sec (12500 msgs) + min 4,497 | avg 5,208 | max 5,642 | stddev 475 msgs + +Saved metric data in csv file /tmp/bench.csv diff --git a/results/20260912T051237Z/lat-1p-5k-128.txt b/results/20260912T051237Z/lat-1p-5k-128.txt new file mode 100644 index 0000000..709e775 --- /dev/null +++ b/results/20260912T051237Z/lat-1p-5k-128.txt @@ -0,0 +1,2 @@ +=== lat-1p-5k-128 === +{"count":5000,"pubs":1,"size":128,"mode":"flood","min_us":132425,"avg_us":203717,"p50_us":204458,"p90_us":241750,"p99_us":249468,"max_us":249640,"min":"132.425ms","avg":"203.717ms","p50":"204.458ms","p90":"241.750ms","p99":"249.468ms","max":"249.640ms"} diff --git a/results/20260912T051237Z/lat-4p-10k-128.txt b/results/20260912T051237Z/lat-4p-10k-128.txt new file mode 100644 index 0000000..fefb67c --- /dev/null +++ b/results/20260912T051237Z/lat-4p-10k-128.txt @@ -0,0 +1,2 @@ +=== lat-4p-10k-128 === +{"count":10000,"pubs":4,"size":128,"mode":"flood","min_us":211108,"avg_us":294925,"p50_us":300254,"p90_us":314223,"p99_us":315551,"max_us":316091,"min":"211.108ms","avg":"294.925ms","p50":"300.254ms","p90":"314.223ms","p99":"315.551ms","max":"316.091ms"} diff --git a/results/20260912T051237Z/lat-4p-5k-1k.txt b/results/20260912T051237Z/lat-4p-5k-1k.txt new file mode 100644 index 0000000..4464289 --- /dev/null +++ b/results/20260912T051237Z/lat-4p-5k-1k.txt @@ -0,0 +1,2 @@ +=== lat-4p-5k-1k === +{"count":5000,"pubs":4,"size":1024,"mode":"flood","min_us":196422,"avg_us":221264,"p50_us":224039,"p90_us":233180,"p99_us":236798,"max_us":238177,"min":"196.422ms","avg":"221.264ms","p50":"224.039ms","p90":"233.180ms","p99":"236.798ms","max":"238.177ms"} diff --git a/results/20260912T051237Z/lat-8p-20k-128.txt b/results/20260912T051237Z/lat-8p-20k-128.txt new file mode 100644 index 0000000..04dc29d --- /dev/null +++ b/results/20260912T051237Z/lat-8p-20k-128.txt @@ -0,0 +1,2 @@ +=== lat-8p-20k-128 === +{"count":20000,"pubs":8,"size":128,"mode":"flood","min_us":280608,"avg_us":414972,"p50_us":409802,"p90_us":513821,"p99_us":535394,"max_us":536084,"min":"280.608ms","avg":"414.972ms","p50":"409.802ms","p90":"513.821ms","p99":"535.394ms","max":"536.084ms"} diff --git a/results/20260912T051237Z/lat-ping-1k-128.txt b/results/20260912T051237Z/lat-ping-1k-128.txt new file mode 100644 index 0000000..c9bca7f --- /dev/null +++ b/results/20260912T051237Z/lat-ping-1k-128.txt @@ -0,0 +1,2 @@ +=== lat-ping-1k-128 === +{"count":1000,"pubs":1,"size":128,"mode":"ping","min_us":341,"avg_us":470,"p50_us":395,"p90_us":651,"p99_us":1377,"max_us":3243,"min":"0.341ms","avg":"0.470ms","p50":"0.395ms","p90":"0.651ms","p99":"1.377ms","max":"3.243ms"} diff --git a/results/20260912T051237Z/nats-cluster-bench-ns1.html b/results/20260912T051237Z/nats-cluster-bench-ns1.html new file mode 100644 index 0000000..59b896e --- /dev/null +++ b/results/20260912T051237Z/nats-cluster-bench-ns1.html @@ -0,0 +1,1291 @@ + + + + + + + NATS cluster message speed — NS1 host study + + + + +

Verae Time × Zapier · progress report · run on NS1.GEORGELAMBERT.ORG

NATS cluster message speed — NS1 host study

packages/zapier-decisions/reports/nats-cluster-bench-ns1.md
+
+

NATS cluster message speed — NS1 host study

+
+

Progress report (second study) · run +20260912T051237Z (UTC)

+
+

Execution provenance. Every process for this study +ran on NS1.GEORGELAMBERT.ORG +(70.88.205.138): the orchestrator +(study-on-ns1.sh), nats bench, +latency.mjs (inside LXC 510 on this hypervisor), charting +(matplotlib), and HTML/PDF (pandoc + +weasyprint). The operator laptop did not +publish, subscribe, draw charts, or render the PDF. Traffic stayed on +vmbr1 from LXC 510 to +nats-a/b/c (511–513).

+
+

This is a full methodology write-up plus the numbers from that +on-host run. The earlier report (nats-cluster-bench, run +20260912T045131Z) used the same cluster but was +orchestrated and rendered off-box. Use this document +when you need “it was all run on 138.”

+
+

1. Executive summary

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ItemThis NS1-host run
Control planeNS1.GEORGELAMBERT.ORG (70.88.205.138), user +marchon
Bench clientLXC 510 verae-px-worker
BrokersLXC 511/512/513 nats-a/b/c on +10.10.10.21–23
Client URLnats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
Host load before8.59 8.39 8.15 5/3843 4096277
Host load after8.67 8.33 8.15 9/3863 4114865
Core 1p1s 128 B pub502,502 msgs/s
JetStream 1p 128 B r=37,393 durable pubs/s
Ping p50 / p990.395ms / 1.377ms
+

Product traffic is the JetStream row. Ping is one-message delay. +Flood is mailbox catch-up after a burst.

+
+

2. Where it ran (and where it +did not)

+
Operator laptop  ──ssh──►  NS1.GEORGELAMBERT.ORG  70.88.205.138
+                              study-on-ns1.sh
+                              python3 build-ns1-study-report.py
+                              sudo pct exec 510 ──► nats bench / latency.mjs
+                                                    │
+                                                    ▼ vmbr1
+                                              10.10.10.21-23 :4222
+
    +
  • Did run on 138: bash, python3, matplotlib, pandoc, +weasyprint, pct, nats-server (in LXC), nats CLI and Node +(in LXC 510).
  • +
  • Did not run on the laptop: no local +nats bench, no local charting, no local WeasyPrint for this +file.
  • +
+
+

3. Results (this run)

+

Host and brokers

+

Before

+ +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NodeVMIDconnectionsin_msgsout_msgscpucoresmem (B)jetstream
nats-a51121,721,2034,933,7591126,398,720True
nats-b51221,613,2053,513,0960123,097,344True
nats-c51321,760,9734,048,5822123,867,392True
+

After

+ +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NodeVMIDconnectionsin_msgsout_msgscpucoresmem (B)jetstream
nats-a51122,097,5965,910,1611138,273,024True
nats-b51222,121,8164,746,5391141,361,408True
nats-c51322,241,3665,053,9781138,162,432True
+

nproc=40 · +uname=Linux NS1.GEORGELAMBERT.ORG 6.17.2-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.2-1 (2025-10-21T11:55Z) x86_64 GNU/Linux

+

Throughput

+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunModeAggregate msgs/sPub msgs/sPub MB/sSub msgs/sSub MB/s
core-1p1s-50k-128core pub/sub776,331502,50261.34420,97651.39
core-4p4s-100k-128core pub/sub1,278,454379,98546.381,078,910131.70
core-4p4s-50k-1kcore pub/sub581,464209,545204.63482,645471.33
core-8p8s-200k-128core pub/sub2,065,217333,73140.741,847,242225.49
js-1p-20k-128-r3jetstream r=3 file7,3930.90
js-2p2s-20k-128-r3jetstream r=3 file15,4167,7280.947,7110.94
js-4p-20k-1k-r3jetstream r=3 file14,98514.63
js-4p-50k-128-r3jetstream r=3 file17,9862.20
+

Round-trip delay

+ +++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RunKindCountPubsSizeminavgp50p90p99max
lat-ping-1k-128ping (sequential RTT)10001128 B0.341ms0.470ms0.395ms0.651ms1.377ms3.243ms
lat-1p-5k-128flood (burst queueing)50001128 B132.425ms203.717ms204.458ms241.750ms249.468ms249.640ms
lat-4p-5k-1kflood (burst queueing)500041024 B196.422ms221.264ms224.039ms233.180ms236.798ms238.177ms
lat-4p-10k-128flood (burst queueing)100004128 B211.108ms294.925ms300.254ms314.223ms315.551ms316.091ms
lat-8p-20k-128flood (burst queueing)200008128 B280.608ms414.972ms409.802ms513.821ms535.394ms536.084ms
+

Core NATS

+
+ + +
+

Core NATS throughput at four loads (NS1 host run) ### +Payload size (core)

+
+ + +
+

Core NATS 128 B vs 1 KiB (NS1 host run) ### JetStream r=3 +file

+
+ + +
+

JetStream durable publish rate (NS1 host run) ### Core vs +JetStream

+
+ + +
+

Core vs JetStream publish rate, log scale (NS1 host run) ### +Delay

+
+ + +
+

Ping vs flood delay percentiles, log scale (NS1 host +run)

+
+

4. Study methodology

+

4.1 Question

+

On the NS1 test stand, what message throughput and +delay does the three-node verae JetStream +cluster deliver at several loads, and which part of the stack is the +limiter for product traffic (jobs, events, webhooks, archive)?

+

4.2 Hypotheses (stated before +the run)

+
    +
  1. H1 — Core vs JetStream. Fire-and-forget core NATS +is at least an order of magnitude faster than JetStream file + +replicas=3, because durable publish waits for a majority disk +replica.
  2. +
  3. H2 — JetStream parallelism. Adding publishers does +not linearly increase JetStream write rate once the +replica log is saturated.
  4. +
  5. H3 — Quiet delay. Sequential pub→sub round trip on +vmbr1 is well under 1 ms p99 when the consumer is +waiting.
  6. +
  7. H4 — Burst delay. If publishers dump a batch before +the subscriber drains, observed delay is queueing time, +roughly linear in backlog, not in cluster hop count.
  8. +
  9. H5 — Payload. Moving 128 B → 1 KiB lowers message +rate and raises byte rate on core NATS; JetStream in this size band +stays replica/fsync bound.
  10. +
+

4.3 Independent variables +(what we changed)

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FactorLevels
TransportCore NATS pub/sub vs JetStream file replicas=3
Publisher count1, 2, 4, 8
Subscriber count0 (JS publish-only), 1, 2, 4, 8
Message count1k, 5k, 10k, 20k, 50k, 100k, 200k (by ladder step)
Payload128 B, 1024 B
Delay modeping (publish, wait, repeat) vs +flood (publish all, then drain)
+

4.4 Dependent variables +(what we recorded)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MetricInstrumentUnit
Publish ratenats bench 0.1.6 Pub statsmsgs/s, MB/s
Subscribe ratenats bench Sub statsmsgs/s, MB/s
Aggregatenats bench NATS Pub/Sub statsmsgs/s (fan-out counts both sides)
Publisher spreadnats min/avg/max msgs/snot delay
One-way-ish RTTlatency.mjs header timestampmin, avg, p50, p90, p99, max
Host load/proc/loadavg before and afterload average
Broker countershttp://127.0.0.1:8222/varz inside each nats LXCconnections, in/out msgs, cpu, mem
+

Important: nats CLI 0.1.6 min/avg/max are +rate spread across publishers, not microseconds of +delay. Delay is only latency.mjs.

+

4.5 Controls and constants

+
    +
  • Cluster name verae, three routes, client +:4222, cluster :6222, monitor loopback +:8222.
  • +
  • Client URL always the three-node list on vmbr1 (never +host 127.0.0.1:4222, never vmbr0).
  • +
  • Bench client is LXC 510, not a nats-* server.
  • +
  • JetStream bench stream name benchstream, +file storage, replicas=3, deleted +between JS loads (nats stream rm --force) so names do not +collide.
  • +
  • Product streams were not the bench target (no load +test on ZAPIER_* / VERAE_ARCHIVE).
  • +
  • No TLS, no nkeys, no account isolation (isolation is +vmbr1).
  • +
  • Same nats CLI version (0.1.6) and nats@2 Node client as +the first ladder.
  • +
+

4.6 Procedure

+
    +
  1. Confirm this script is executing on +NS1.GEORGELAMBERT.ORG. Refuse otherwise.
  2. +
  3. Snapshot host load, memory, LXC configs, and each nats +varz.
  4. +
  5. From NS1, pct exec 510 the core ladder (1p1s, 4p4s, +8p8s at 128 B; 4p4s at 1 KiB).
  6. +
  7. Delete benchstream; JS ladder (1p, 4p, 4p×1 KiB, 2p2s +pull) at replicas=3 file.
  8. +
  9. Copy latency.mjs into 510; ping then flood at several +batch sizes.
  10. +
  11. Snapshot host/varz again.
  12. +
  13. Parse logs on this host; draw charts; write HTML +and PDF on this host.
  14. +
+

No publish, subscribe, chart, or PDF process runs on the operator +laptop for this study.

+

4.7 Instrumentation path

+
[NS1 host 70.88.205.138]
+   study-on-ns1.sh  (bash + python3)
+        |
+        | sudo pct exec 510
+        v
+[LXC 510 verae-px-worker 10.10.10.20]
+   nats bench / node latency.mjs
+        |
+        | NATS client protocol to
+        v
+[LXC 511/512/513  10.10.10.21-23 :4222]
+   nats-server -js  cluster routes :6222
+

The hypervisor issues the guest commands. The messages themselves +never leave vmbr1.

+

4.8 Threats to validity

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ThreatEffect on numbers
One physical hostThree “replicas” share CPU, memory, and usually the same datastore. +This measures process/LXC HA, not disk HA.
Shared loadNS1 also runs Caddy, Forgejo, keep, fleet, portal, and other CTs. +Load average during a run is part of the result, not noise to +ignore.
Single bench clientAll publishers live in 510. Per-publisher rate spread is contention +in that guest.
Short runsSeconds of traffic. No compaction, no multi-hour page-cache +eviction, no snapshot during load.
No TLS/nkeysProduction auth will cost CPU. Do not treat these rates as +post-nkeys rates.
Fan-out aggregateCore aggregate msgs/s counts pub+sub. Do not compare that column to +JetStream unique writes.
Flood ≠ RTTMixing flood averages with ping p99 produces a fake “NATS is slow” +story.
Lab onlyNot a Zapier HTTPS bench and not live +api.veraetime.net.
+

4.9 Ethics / safety

+

Bench uses throwaway subjects (bench.core.*, +bench.js.*, bench.lat.*) and a throwaway +stream. It does not purge product streams. Zapier cloud has no NATS +socket.

+
+

5. Suggestions for fine-tuning

+

These follow from the method and from the first ladder on this stand +(JetStream ~16k durable 128 B pubs/s; ping ~0.3 ms; flood hundreds of +ms). Apply in order of leverage. Re-run this NS1 study +after each change so the delta is measured the same way.

+

5.1 Treat JetStream as +the product limiter

+

Product jobs/events/webhooks/archive are durable. Tuning core NATS to +2M msgs/s will not move a timestamp Zap. Put effort into replica +write path and consumer lag, not core +fan-out.

+

5.2 Split storage class by +stream

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StreamSuggested storeWhy
ZAPIER_JOBSfile, r=3Work queue; lose-a-job is bad
ZAPIER_EVENTSfile r=3, or memory r=3 if events are rebuildable from job +statusHot waiters; measure both
ZAPIER_WEBHOOKSfile, r=3, workqueueHTTPS to Zapier is the slow consumer
ZAPIER_USAGEfile, r=3, limits + max-ageTelemetry
VERAE_ARCHIVEfile, r=3, on the best diskPuts are larger and must survive
+

Try ZAPIER_EVENTS as memory store in a maintenance +window and re-run only the JS + ping/flood steps. If ping stays ~0.3 ms +and durable events still ack at a higher rate, keep it; if a CT restart +drops in-flight waiters, revert.

+

5.3 Give JetStream real disks

+

Today r=3 on three LXC guests on one Proxmox host is +three files, one failure domain.

+
    +
  • Bind-mount a distinct SSD/NVMe (or ZFS dataset with its own vdev) +into each nats LXC store_dir.
  • +
  • Set sync: always only on archive if you need it; +default sync is often enough for jobs and is faster. Measure.
  • +
  • Do not put JetStream store_dir on the same busy rootfs +as Forgejo/Caddy if we can avoid it.
  • +
  • When moving to three metal boxes: same configs, private NIC, one +disk (or mirror) per node. That is the first change +that makes r=3 mean “two boxes can die.”
  • +
+

5.4 Isolate the nats +CTs from the rest of NS1

+

Host load on this box is often already several. Pin:

+
    +
  • nats-a/b/c: dedicated cores, no steal from keep/fleet +Node processes.
  • +
  • Memory high enough that file-backed streams stay cache-hot for the +working set.
  • +
  • cpuunits / cpuset in pct config so a +Zapier-facing Node GC pause does not stall fsync.
  • +
+

Re-run this study after pinning; H1/H2 should move more than +ping.

+

5.5 Consumer and mailbox +tuning (delay H4)

+

Flood delay is backlog / consume_rate. Fine-tune the +waiters, not the broker RTT.

+
    +
  • jobs.events and webhooks.deliver: raise +max_ack_pending so a slow HTTPS hook does not stall the +whole consumer; cap it so a poison message cannot unbounded-buffer +RAM.
  • +
  • Pull consumers: larger batch, shorter expires, more +pullers horizontally (fleet replica floors) instead of one fat +subscriber.
  • +
  • Middleware should not flood-publish then wait; it +already does per-job publish. Keep that. The flood test is the outage +profile when a consumer is stopped.
  • +
  • Alert on consumer lag (pending + ack pending) from +JetStream, not on ping RTT.
  • +
+

5.6 Publisher-side +batching in middleware

+

A timestamp job is one small JSON. 16k msgs/s is ample. Still:

+
    +
  • Avoid per-byte publishes; one message per job/event.
  • +
  • Reuse NATS connections (connection churn showed up as publisher +spread in the core 4p/8p runs).
  • +
  • Idempotent msg id / duplicate window sized to Verae +retry window, not default-only.
  • +
+

5.7 +nats-server knobs worth measuring (A/B with this script)

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KnobWhy try it
max_payloadKeep default unless archive puts grow
write_deadlineSlow consumer protection for webhooks
max_pendingBound memory on a stuck Zapier hook
max_connectionsFleet workers + keep + middleware
JetStream max_file_store / +max_memory_storePrevent one stream from filling the CT
max_outstanding_catchupReplica restart after a nats-c blip
GOMAXPROCS = LXC coresDo not overthread a 2-core CT
+

Change one knob, re-run +study-on-ns1.sh, compare JetStream 1p 128 B and ping +p99.

+

5.8 Network

+
    +
  • Keep NATS off vmbr0. No change.
  • +
  • When on metal: dedicated NIC or VLAN for cluster :6222 +vs client :4222 if possible (replication vs client +load).
  • +
  • Check virtio queue counts on the LXC nics if core 1 KiB byte rate +plateaus.
  • +
+

5.9 Security cost (when +nkeys/mTLS flip)

+

verae-nats-accounts is still a sketch. Enabling accounts +will add CPU on publish. Budget: re-run this exact study +after creds are in every NATS_URL, and +accept a drop on both core and JS. Do not flip without that +measurement.

+

5.10 Operational +fine-tuning (lag, not peak msgs/s)

+
    +
  1. Scrape varz / jsz from the host over +vmbr1 (not public). Monitor loopback :8222 is +invisible to Prometheus on NS1 unless we add a host-side proxy on +10.10.10.21:8222 bound only to vmbr1.
  2. +
  3. Keep replica floors for webhook-deliver and job-poller — they are +the flood defense.
  4. +
  5. Backup/restore drill of JetStream during idle, then +a short JS 1p run to see catchup cost.
  6. +
  7. A 15–30 minute soak (not in this ladder) for page cache and +compaction; add that as a third study when disks are dedicated.
  8. +
+

5.11 What not to tune

+
    +
  • Do not chase core 8p8s aggregate. It is fan-out on a lab +bridge.
  • +
  • Do not treat flood 400 ms as “cluster RTT.” Fix consumers.
  • +
  • Do not load-test on ZAPIER_* streams.
  • +
  • Do not bind client NATS to 0.0.0.0 on +vmbr0.
  • +
+ +
    +
  1. CPU pin nats-a/b/c → re-run JS 1p + ping.
  2. +
  3. ZAPIER_EVENTS-shaped memory stream vs file (throwaway +stream, same flags as this JS ladder).
  4. +
  5. Distinct store_dir disks per node.
  6. +
  7. nkeys on, same ladder.
  8. +
  9. Three hardware boxes, same cluster.env IPs +updated.
  10. +
+

Each experiment should produce a new +results/<utc>/ on NS1 and a new progress-repo report +so we can diff H1–H5 instead of arguing from memory.

+
+

6. Reproducing this study

+

On NS1 only:

+
cd ~/verae-src/verae-nats-cluster
+bash scripts/study-on-ns1.sh
+

The script exits if hostname is not NS1. Outputs land in +results/<utc>/ including +nats-cluster-bench-ns1.{md,html,pdf} and +charts/. Copy those into +zapier-decisions/reports/ for the progress repo and +catalog.

+

Raw logs for this run: results/20260912T051237Z/.

+ + diff --git a/results/20260912T051237Z/nats-cluster-bench-ns1.md b/results/20260912T051237Z/nats-cluster-bench-ns1.md new file mode 100644 index 0000000..cf0011d --- /dev/null +++ b/results/20260912T051237Z/nats-cluster-bench-ns1.md @@ -0,0 +1,334 @@ +**Progress report (second study)** · run `20260912T051237Z` (UTC) + +> **Execution provenance.** Every process for this study ran on **NS1.GEORGELAMBERT.ORG** (`70.88.205.138`): the orchestrator (`study-on-ns1.sh`), `nats bench`, `latency.mjs` (inside LXC 510 on this hypervisor), charting (`matplotlib`), and HTML/PDF (`pandoc` + `weasyprint`). The operator laptop did **not** publish, subscribe, draw charts, or render the PDF. Traffic stayed on `vmbr1` from LXC **510** to `nats-a/b/c` (**511–513**). + +This is a full methodology write-up plus the numbers from that on-host run. The earlier report (`nats-cluster-bench`, run `20260912T045131Z`) used the same cluster but was **orchestrated and rendered off-box**. Use this document when you need “it was all run on 138.” + +--- + +## 1. Executive summary + +| Item | This NS1-host run | +|------|-------------------| +| Control plane | NS1.GEORGELAMBERT.ORG (`70.88.205.138`), user `marchon` | +| Bench client | LXC 510 `verae-px-worker` | +| Brokers | LXC 511/512/513 `nats-a/b/c` on `10.10.10.21–23` | +| Client URL | `nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222` | +| Host load before | `8.59 8.39 8.15 5/3843 4096277` | +| Host load after | `8.67 8.33 8.15 9/3863 4114865` | +| Core 1p1s 128 B pub | 502,502 msgs/s | +| JetStream 1p 128 B r=3 | 7,393 durable pubs/s | +| Ping p50 / p99 | 0.395ms / 1.377ms | + +Product traffic is the JetStream row. Ping is one-message delay. Flood is mailbox catch-up after a burst. + +--- + +## 2. Where it ran (and where it did not) + +```text +Operator laptop ──ssh──► NS1.GEORGELAMBERT.ORG 70.88.205.138 + study-on-ns1.sh + python3 build-ns1-study-report.py + sudo pct exec 510 ──► nats bench / latency.mjs + │ + ▼ vmbr1 + 10.10.10.21-23 :4222 +``` + +- **Did run on 138:** bash, python3, matplotlib, pandoc, weasyprint, `pct`, nats-server (in LXC), nats CLI and Node (in LXC 510). +- **Did not run on the laptop:** no local `nats bench`, no local charting, no local WeasyPrint for this file. + +--- + +## 3. Results (this run) + +### Host and brokers + +**Before** + +| Node | VMID | connections | in_msgs | out_msgs | cpu | cores | mem (B) | jetstream | +|------|------|-------------|---------|----------|-----|-------|---------|-----------| +| nats-a | 511 | 2 | 1,721,203 | 4,933,759 | 1 | 1 | 26,398,720 | True | +| nats-b | 512 | 2 | 1,613,205 | 3,513,096 | 0 | 1 | 23,097,344 | True | +| nats-c | 513 | 2 | 1,760,973 | 4,048,582 | 2 | 1 | 23,867,392 | True | + +**After** + +| Node | VMID | connections | in_msgs | out_msgs | cpu | cores | mem (B) | jetstream | +|------|------|-------------|---------|----------|-----|-------|---------|-----------| +| nats-a | 511 | 2 | 2,097,596 | 5,910,161 | 1 | 1 | 38,273,024 | True | +| nats-b | 512 | 2 | 2,121,816 | 4,746,539 | 1 | 1 | 41,361,408 | True | +| nats-c | 513 | 2 | 2,241,366 | 5,053,978 | 1 | 1 | 38,162,432 | True | + +nproc=40 · uname=`Linux NS1.GEORGELAMBERT.ORG 6.17.2-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.2-1 (2025-10-21T11:55Z) x86_64 GNU/Linux` + +### Throughput + +| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s | +|-----|------|------------------|------------|----------|------------|----------| +| `core-1p1s-50k-128` | core pub/sub | 776,331 | 502,502 | 61.34 | 420,976 | 51.39 | +| `core-4p4s-100k-128` | core pub/sub | 1,278,454 | 379,985 | 46.38 | 1,078,910 | 131.70 | +| `core-4p4s-50k-1k` | core pub/sub | 581,464 | 209,545 | 204.63 | 482,645 | 471.33 | +| `core-8p8s-200k-128` | core pub/sub | 2,065,217 | 333,731 | 40.74 | 1,847,242 | 225.49 | +| `js-1p-20k-128-r3` | jetstream r=3 file | — | 7,393 | 0.90 | — | — | +| `js-2p2s-20k-128-r3` | jetstream r=3 file | 15,416 | 7,728 | 0.94 | 7,711 | 0.94 | +| `js-4p-20k-1k-r3` | jetstream r=3 file | — | 14,985 | 14.63 | — | — | +| `js-4p-50k-128-r3` | jetstream r=3 file | — | 17,986 | 2.20 | — | — | + +### Round-trip delay + +| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max | +|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----| +| `lat-ping-1k-128` | ping (sequential RTT) | 1000 | 1 | 128 B | 0.341ms | 0.470ms | 0.395ms | 0.651ms | 1.377ms | 3.243ms | +| `lat-1p-5k-128` | flood (burst queueing) | 5000 | 1 | 128 B | 132.425ms | 203.717ms | 204.458ms | 241.750ms | 249.468ms | 249.640ms | +| `lat-4p-5k-1k` | flood (burst queueing) | 5000 | 4 | 1024 B | 196.422ms | 221.264ms | 224.039ms | 233.180ms | 236.798ms | 238.177ms | +| `lat-4p-10k-128` | flood (burst queueing) | 10000 | 4 | 128 B | 211.108ms | 294.925ms | 300.254ms | 314.223ms | 315.551ms | 316.091ms | +| `lat-8p-20k-128` | flood (burst queueing) | 20000 | 8 | 128 B | 280.608ms | 414.972ms | 409.802ms | 513.821ms | 535.394ms | 536.084ms | + +### Core NATS + +![Core NATS throughput at four loads (NS1 host run)](charts/core-throughput.png) + +*Core NATS throughput at four loads (NS1 host run)* +### Payload size (core) + +![Core NATS 128 B vs 1 KiB (NS1 host run)](charts/payload-size.png) + +*Core NATS 128 B vs 1 KiB (NS1 host run)* +### JetStream r=3 file + +![JetStream durable publish rate (NS1 host run)](charts/js-throughput.png) + +*JetStream durable publish rate (NS1 host run)* +### Core vs JetStream + +![Core vs JetStream publish rate, log scale (NS1 host run)](charts/core-vs-js.png) + +*Core vs JetStream publish rate, log scale (NS1 host run)* +### Delay + +![Ping vs flood delay percentiles, log scale (NS1 host run)](charts/delay-percentiles.png) + +*Ping vs flood delay percentiles, log scale (NS1 host run)* + +--- + +## 4. Study methodology + +### 4.1 Question + +On the NS1 test stand, what message **throughput** and **delay** does the three-node `verae` JetStream cluster deliver at several loads, and which part of the stack is the limiter for product traffic (jobs, events, webhooks, archive)? + +### 4.2 Hypotheses (stated before the run) + +1. **H1 — Core vs JetStream.** Fire-and-forget core NATS is at least an order of magnitude faster than JetStream **file + replicas=3**, because durable publish waits for a majority disk replica. +2. **H2 — JetStream parallelism.** Adding publishers does **not** linearly increase JetStream write rate once the replica log is saturated. +3. **H3 — Quiet delay.** Sequential pub→sub round trip on `vmbr1` is well under 1 ms p99 when the consumer is waiting. +4. **H4 — Burst delay.** If publishers dump a batch before the subscriber drains, observed delay is **queueing time**, roughly linear in backlog, not in cluster hop count. +5. **H5 — Payload.** Moving 128 B → 1 KiB lowers message rate and raises byte rate on core NATS; JetStream in this size band stays replica/fsync bound. + +### 4.3 Independent variables (what we changed) + +| Factor | Levels | +|--------|--------| +| Transport | Core NATS pub/sub vs JetStream file replicas=3 | +| Publisher count | 1, 2, 4, 8 | +| Subscriber count | 0 (JS publish-only), 1, 2, 4, 8 | +| Message count | 1k, 5k, 10k, 20k, 50k, 100k, 200k (by ladder step) | +| Payload | 128 B, 1024 B | +| Delay mode | **ping** (publish, wait, repeat) vs **flood** (publish all, then drain) | + +### 4.4 Dependent variables (what we recorded) + +| Metric | Instrument | Unit | +|--------|------------|------| +| Publish rate | `nats bench` 0.1.6 Pub stats | msgs/s, MB/s | +| Subscribe rate | `nats bench` Sub stats | msgs/s, MB/s | +| Aggregate | `nats bench` NATS Pub/Sub stats | msgs/s (fan-out counts both sides) | +| Publisher spread | nats min/avg/max **msgs/s** | not delay | +| One-way-ish RTT | `latency.mjs` header timestamp | min, avg, p50, p90, p99, max | +| Host load | `/proc/loadavg` before and after | load average | +| Broker counters | `http://127.0.0.1:8222/varz` inside each nats LXC | connections, in/out msgs, cpu, mem | + +**Important:** nats CLI 0.1.6 min/avg/max are **rate spread across publishers**, not microseconds of delay. Delay is only `latency.mjs`. + +### 4.5 Controls and constants + +- Cluster name `verae`, three routes, client `:4222`, cluster `:6222`, monitor loopback `:8222`. +- Client URL always the three-node list on `vmbr1` (never host `127.0.0.1:4222`, never `vmbr0`). +- Bench client is LXC **510**, not a nats-* server. +- JetStream bench stream name `benchstream`, **file** storage, **replicas=3**, deleted between JS loads (`nats stream rm --force`) so names do not collide. +- Product streams were **not** the bench target (no load test on `ZAPIER_*` / `VERAE_ARCHIVE`). +- No TLS, no nkeys, no account isolation (isolation is `vmbr1`). +- Same nats CLI version (0.1.6) and `nats@2` Node client as the first ladder. + +### 4.6 Procedure + +1. Confirm this script is executing on **NS1.GEORGELAMBERT.ORG**. Refuse otherwise. +2. Snapshot host load, memory, LXC configs, and each nats `varz`. +3. From NS1, `pct exec 510` the core ladder (1p1s, 4p4s, 8p8s at 128 B; 4p4s at 1 KiB). +4. Delete `benchstream`; JS ladder (1p, 4p, 4p×1 KiB, 2p2s pull) at replicas=3 file. +5. Copy `latency.mjs` into 510; ping then flood at several batch sizes. +6. Snapshot host/`varz` again. +7. Parse logs on **this host**; draw charts; write HTML and PDF on **this host**. + +No publish, subscribe, chart, or PDF process runs on the operator laptop for this study. + +### 4.7 Instrumentation path + +```text +[NS1 host 70.88.205.138] + study-on-ns1.sh (bash + python3) + | + | sudo pct exec 510 + v +[LXC 510 verae-px-worker 10.10.10.20] + nats bench / node latency.mjs + | + | NATS client protocol to + v +[LXC 511/512/513 10.10.10.21-23 :4222] + nats-server -js cluster routes :6222 +``` + +The hypervisor issues the guest commands. The messages themselves never leave `vmbr1`. + +### 4.8 Threats to validity + +| Threat | Effect on numbers | +|--------|-------------------| +| **One physical host** | Three “replicas” share CPU, memory, and usually the same datastore. This measures process/LXC HA, not disk HA. | +| **Shared load** | NS1 also runs Caddy, Forgejo, keep, fleet, portal, and other CTs. Load average during a run is part of the result, not noise to ignore. | +| **Single bench client** | All publishers live in 510. Per-publisher rate spread is contention in that guest. | +| **Short runs** | Seconds of traffic. No compaction, no multi-hour page-cache eviction, no snapshot during load. | +| **No TLS/nkeys** | Production auth will cost CPU. Do not treat these rates as post-nkeys rates. | +| **Fan-out aggregate** | Core aggregate msgs/s counts pub+sub. Do not compare that column to JetStream unique writes. | +| **Flood ≠ RTT** | Mixing flood averages with ping p99 produces a fake “NATS is slow” story. | +| **Lab only** | Not a Zapier HTTPS bench and not live `api.veraetime.net`. | + +### 4.9 Ethics / safety + +Bench uses throwaway subjects (`bench.core.*`, `bench.js.*`, `bench.lat.*`) and a throwaway stream. It does not purge product streams. Zapier cloud has no NATS socket. + +--- + +## 5. Suggestions for fine-tuning + +These follow from the method and from the first ladder on this stand (JetStream ~16k durable 128 B pubs/s; ping ~0.3 ms; flood hundreds of ms). Apply in order of leverage. Re-run **this NS1 study** after each change so the delta is measured the same way. + +### 5.1 Treat JetStream as the product limiter + +Product jobs/events/webhooks/archive are durable. Tuning core NATS to 2M msgs/s will not move a timestamp Zap. Put effort into **replica write path** and **consumer lag**, not core fan-out. + +### 5.2 Split storage class by stream + +| Stream | Suggested store | Why | +|--------|-----------------|-----| +| `ZAPIER_JOBS` | file, r=3 | Work queue; lose-a-job is bad | +| `ZAPIER_EVENTS` | file r=3, or memory r=3 if events are rebuildable from job status | Hot waiters; measure both | +| `ZAPIER_WEBHOOKS` | file, r=3, workqueue | HTTPS to Zapier is the slow consumer | +| `ZAPIER_USAGE` | file, r=3, limits + max-age | Telemetry | +| `VERAE_ARCHIVE` | file, r=3, on the **best disk** | Puts are larger and must survive | + +Try `ZAPIER_EVENTS` as memory store in a maintenance window and re-run only the JS + ping/flood steps. If ping stays ~0.3 ms and durable events still ack at a higher rate, keep it; if a CT restart drops in-flight waiters, revert. + +### 5.3 Give JetStream real disks + +Today r=3 on three LXC guests on **one Proxmox host** is three files, one failure domain. + +- Bind-mount a distinct SSD/NVMe (or ZFS dataset with its own vdev) into each nats LXC `store_dir`. +- Set `sync: always` only on archive if you need it; default sync is often enough for jobs and is faster. Measure. +- Do not put JetStream `store_dir` on the same busy rootfs as Forgejo/Caddy if we can avoid it. +- When moving to three metal boxes: same configs, private NIC, one disk (or mirror) **per node**. That is the first change that makes r=3 mean “two boxes can die.” + +### 5.4 Isolate the nats CTs from the rest of NS1 + +Host load on this box is often already several. Pin: + +- `nats-a/b/c`: dedicated cores, no steal from keep/fleet Node processes. +- Memory high enough that file-backed streams stay cache-hot for the working set. +- `cpuunits` / cpuset in `pct config` so a Zapier-facing Node GC pause does not stall fsync. + +Re-run this study after pinning; H1/H2 should move more than ping. + +### 5.5 Consumer and mailbox tuning (delay H4) + +Flood delay is backlog / consume_rate. Fine-tune the **waiters**, not the broker RTT. + +- `jobs.events` and `webhooks.deliver`: raise `max_ack_pending` so a slow HTTPS hook does not stall the whole consumer; cap it so a poison message cannot unbounded-buffer RAM. +- Pull consumers: larger batch, shorter `expires`, more pullers horizontally (fleet replica floors) instead of one fat subscriber. +- Middleware should **not** flood-publish then wait; it already does per-job publish. Keep that. The flood test is the outage profile when a consumer is stopped. +- Alert on **consumer lag** (pending + ack pending) from JetStream, not on ping RTT. + +### 5.6 Publisher-side batching in middleware + +A timestamp job is one small JSON. 16k msgs/s is ample. Still: + +- Avoid per-byte publishes; one message per job/event. +- Reuse NATS connections (connection churn showed up as publisher spread in the core 4p/8p runs). +- Idempotent `msg id` / duplicate window sized to Verae retry window, not default-only. + +### 5.7 nats-server knobs worth measuring (A/B with this script) + +| Knob | Why try it | +|------|------------| +| `max_payload` | Keep default unless archive puts grow | +| `write_deadline` | Slow consumer protection for webhooks | +| `max_pending` | Bound memory on a stuck Zapier hook | +| `max_connections` | Fleet workers + keep + middleware | +| JetStream `max_file_store` / `max_memory_store` | Prevent one stream from filling the CT | +| `max_outstanding_catchup` | Replica restart after a nats-c blip | +| GOMAXPROCS = LXC cores | Do not overthread a 2-core CT | + +Change **one** knob, re-run `study-on-ns1.sh`, compare JetStream 1p 128 B and ping p99. + +### 5.8 Network + +- Keep NATS off `vmbr0`. No change. +- When on metal: dedicated NIC or VLAN for cluster `:6222` vs client `:4222` if possible (replication vs client load). +- Check virtio queue counts on the LXC nics if core 1 KiB byte rate plateaus. + +### 5.9 Security cost (when nkeys/mTLS flip) + +`verae-nats-accounts` is still a sketch. Enabling accounts will add CPU on publish. Budget: re-run this exact study **after** creds are in every `NATS_URL`, and accept a drop on both core and JS. Do not flip without that measurement. + +### 5.10 Operational fine-tuning (lag, not peak msgs/s) + +1. Scrape `varz` / `jsz` from the host over `vmbr1` (not public). Monitor loopback `:8222` is invisible to Prometheus on NS1 unless we add a host-side proxy on `10.10.10.21:8222` bound only to `vmbr1`. +2. Keep replica floors for webhook-deliver and job-poller — they are the flood defense. +3. Backup/restore drill of JetStream **during idle**, then a short JS 1p run to see catchup cost. +4. A 15–30 minute soak (not in this ladder) for page cache and compaction; add that as a third study when disks are dedicated. + +### 5.11 What not to tune + +- Do not chase core 8p8s aggregate. It is fan-out on a lab bridge. +- Do not treat flood 400 ms as “cluster RTT.” Fix consumers. +- Do not load-test on `ZAPIER_*` streams. +- Do not bind client NATS to `0.0.0.0` on `vmbr0`. + +### 5.12 Recommended next experiments (same method, one change each) + +1. CPU pin nats-a/b/c → re-run JS 1p + ping. +2. `ZAPIER_EVENTS`-shaped memory stream vs file (throwaway stream, same flags as this JS ladder). +3. Distinct `store_dir` disks per node. +4. nkeys on, same ladder. +5. Three hardware boxes, same `cluster.env` IPs updated. + +Each experiment should produce a new `results//` on NS1 and a new progress-repo report so we can diff H1–H5 instead of arguing from memory. + + +--- + +## 6. Reproducing this study + +On **NS1 only**: + +```bash +cd ~/verae-src/verae-nats-cluster +bash scripts/study-on-ns1.sh +``` + +The script exits if `hostname` is not NS1. Outputs land in `results//` including `nats-cluster-bench-ns1.{md,html,pdf}` and `charts/`. Copy those into `zapier-decisions/reports/` for the progress repo and catalog. + +Raw logs for this run: `results/20260912T051237Z/`. diff --git a/results/20260912T051237Z/nats-cluster-bench-ns1.pdf b/results/20260912T051237Z/nats-cluster-bench-ns1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c25d95e9badc9e5d09cde062f96b9da3a740cbd7 GIT binary patch literal 320679 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

vDQ@s>^AR40qW ze6U4`k%bcD;&QjYbQRp;(SC4eK@Rv@bZ?)-sUT4TT2!P~oiK6Hio z>?-p{ALVmL!#9M=vnO=+rtFs-KEh*R+!LWCyj$aR@6zq4bnz0t=_XORG;=xmJE4r; zQ3kXchUE_>G7IJJ6N1!K&pjsEsxYQ1GplV$0hfoP3JtSp*A%maHDF2)JI9*Zi(Si; zB~Fve=SHfYmMk+wi&7lbltrBt;^qoU7IX)}hpOA#xh|aC_(Z!O)Ml;jX#{$)#}wXy0FUu{b~c!_YIjkKc_8`{ZB28;sf#&)BTw@#U2i#M93bWjp7V|ke4@!T

F&0bK0mMk| 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

`JN)VGTl{U;m(FaUdCe6bsG0dB9qB6xt2 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

*X5?76FYa@KCJ|_96|f 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�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û)2 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 literal 0 HcmV?d00001 diff --git a/results/20260912T051237Z/varz-after.json b/results/20260912T051237Z/varz-after.json new file mode 100644 index 0000000..c55309c --- /dev/null +++ b/results/20260912T051237Z/varz-after.json @@ -0,0 +1,50 @@ +[ + { + "vmid": "511", + "name": "nats-a", + "server_name": "nats-a", + "host": "10.10.10.21", + "port": 4222, + "connections": 2, + "in_msgs": 2097596, + "out_msgs": 5910161, + "in_bytes": 559427613, + "out_bytes": 1494241553, + "cpu": 1, + "cores": 1, + "mem": 38273024, + "jetstream": true + }, + { + "vmid": "512", + "name": "nats-b", + "server_name": "nats-b", + "host": "10.10.10.22", + "port": 4222, + "connections": 2, + "in_msgs": 2121816, + "out_msgs": 4746539, + "in_bytes": 585390797, + "out_bytes": 974695990, + "cpu": 1, + "cores": 1, + "mem": 41361408, + "jetstream": true + }, + { + "vmid": "513", + "name": "nats-c", + "server_name": "nats-c", + "host": "10.10.10.23", + "port": 4222, + "connections": 2, + "in_msgs": 2241366, + "out_msgs": 5053978, + "in_bytes": 586858467, + "out_bytes": 1040486148, + "cpu": 1, + "cores": 1, + "mem": 38162432, + "jetstream": true + } +] diff --git a/results/20260912T051237Z/varz-before.json b/results/20260912T051237Z/varz-before.json new file mode 100644 index 0000000..945da17 --- /dev/null +++ b/results/20260912T051237Z/varz-before.json @@ -0,0 +1,50 @@ +[ + { + "vmid": "511", + "name": "nats-a", + "server_name": "nats-a", + "host": "10.10.10.21", + "port": 4222, + "connections": 2, + "in_msgs": 1721203, + "out_msgs": 4933759, + "in_bytes": 440427700, + "out_bytes": 1169323990, + "cpu": 1, + "cores": 1, + "mem": 26398720, + "jetstream": true + }, + { + "vmid": "512", + "name": "nats-b", + "server_name": "nats-b", + "host": "10.10.10.22", + "port": 4222, + "connections": 2, + "in_msgs": 1613205, + "out_msgs": 3513096, + "in_bytes": 428640182, + "out_bytes": 715428083, + "cpu": 0, + "cores": 1, + "mem": 23097344, + "jetstream": true + }, + { + "vmid": "513", + "name": "nats-c", + "server_name": "nats-c", + "host": "10.10.10.23", + "port": 4222, + "connections": 2, + "in_msgs": 1760973, + "out_msgs": 4048582, + "in_bytes": 447844308, + "out_bytes": 864199465, + "cpu": 2, + "cores": 1, + "mem": 23867392, + "jetstream": true + } +] diff --git a/scripts/bench-report.py b/scripts/bench-report.py new file mode 100755 index 0000000..68446d5 --- /dev/null +++ b/scripts/bench-report.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +"""Turn nats bench text logs + latency JSON into markdown.""" +from __future__ import annotations + +import json +import re +import sys +from pathlib import Path + + +def fmt_int(s: str | None) -> str: + if not s: + return "—" + return f"{int(s):,}" + + +def parse_bench(text: str) -> dict[str, str]: + out: dict[str, str] = {"kind": "throughput"} + def _rate(pattern: str, msgs_key: str, mb_key: str) -> None: + m = re.search(pattern, text) + if not m: + return + out[msgs_key] = m.group(1).replace(",", "") + n = float(m.group(2)) + unit = m.group(3).upper() + if unit == "KB": + n = n / 1024.0 + elif unit == "GB": + n = n * 1024.0 + out[mb_key] = f"{n:.2f}" + + _rate( + r"(?m)^\s*Pub stats:\s*([0-9,]+)\s*msgs/sec\s*~\s*([0-9.]+)\s*(KB|MB|GB)/sec", + "pub_msgs", + "pub_mb", + ) + _rate( + r"(?m)^\s*Sub stats:\s*([0-9,]+)\s*msgs/sec\s*~\s*([0-9.]+)\s*(KB|MB|GB)/sec", + "sub_msgs", + "sub_mb", + ) + _rate( + r"NATS Pub/Sub stats:\s*([0-9,]+)\s*msgs/sec\s*~\s*([0-9.]+)\s*(KB|MB|GB)/sec", + "agg_msgs", + "agg_mb", + ) + if "JetStream" in text or "--js" in text or "js-" in text: + out["mode"] = "jetstream r=3 file" + else: + out["mode"] = "core pub/sub" + # nats 0.1.6 prints min/avg/max as msgs/sec across publishers, not µs delay + m = re.search( + r"min\s+([0-9,]+)\s*\|\s*avg\s+([0-9,]+)\s*\|\s*max\s+([0-9,]+)\s*\|\s*stddev\s+([0-9,]+)\s*msgs", + text, + ) + if m: + out["pub_spread"] = f"{m.group(1)}–{m.group(3)} (avg {m.group(2)})" + return out + + +def parse_lat(text: str) -> dict[str, str] | None: + for line in text.splitlines(): + line = line.strip() + if line.startswith("{") and "p99_us" in line: + d = json.loads(line) + mode = d.get("mode") or "" + return { + "kind": "latency", + "count": str(d.get("count", "")), + "pubs": str(d.get("pubs", "")), + "size": str(d.get("size", "")), + "mode": str(mode), + "min": d.get("min", ""), + "avg": d.get("avg", ""), + "p50": d.get("p50", ""), + "p90": d.get("p90", ""), + "p99": d.get("p99", ""), + "max": d.get("max", ""), + } + return None + + +def lat_mode(run: str, recorded: str) -> str: + if recorded in ("ping", "flood"): + return recorded + if "ping" in run: + return "ping" + return "flood" + + +def thru_sort(p: dict[str, str]) -> tuple: + return (0 if p.get("mode", "").startswith("core") else 1, p.get("run", "")) + + +def lat_sort(p: dict[str, str]) -> tuple: + mode = lat_mode(p.get("run", ""), p.get("mode", "")) + return (0 if mode == "ping" else 1, int(p.get("count") or 0), p.get("run", "")) + + +def main() -> int: + folder = Path(sys.argv[1] if len(sys.argv) > 1 else ".") + thru: list[dict[str, str]] = [] + lats: list[dict[str, str]] = [] + for f in sorted(folder.glob("*.txt")): + text = f.read_text(encoding="utf-8", errors="replace") + lat = parse_lat(text) + if lat: + lat["run"] = f.stem + lats.append(lat) + continue + p = parse_bench(text) + if p.get("pub_msgs") or p.get("agg_msgs"): + p["run"] = f.stem + thru.append(p) + + stamp = folder.name if re.fullmatch(r"\d{8}T\d{6}Z", folder.name) else "" + + print("# NATS cluster message speed") + print() + if stamp: + print(f"Run **`{stamp}`** (UTC). ", end="") + print( + "Client: LXC **510** `verae-px-worker` (`10.10.10.20`), not a nats-* server. " + "Servers: `nats-a/b/c` on `10.10.10.21–23` (`vmbr1` only)." + ) + print() + print("Client URL:") + print() + print("```text") + print("nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222") + print("```") + print() + print("## Method") + print() + print("- **Core NATS** is fire-and-forget pub/sub (`nats bench`). No disk, no replica ack.") + print( + "- **JetStream** uses **file** storage and **replicas=3** (same as product streams). " + "The unique stream `benchstream` is deleted between JS loads." + ) + print("- Throughput is **msgs/sec** from nats CLI **0.1.6** (`--no-progress --csv`). Its min/avg/max are publisher **rate spread**, not delay.") + print( + "- **Ping** delay: one publisher, sequential publish-then-wait. This is one-message round-trip through the cluster." + ) + print( + "- **Flood** delay: N publishers dump the whole batch, then the subscriber drains. " + "This is **queueing under burst**, not wire RTT." + ) + print("- Probe: `scripts/latency.mjs` (two connections, header timestamp).") + print() + print("## Throughput") + print() + print("| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s |") + print("|-----|------|------------------|------------|----------|------------|----------|") + for p in sorted(thru, key=thru_sort): + print( + f"| `{p['run']}` | {p.get('mode', '')} | {fmt_int(p.get('agg_msgs'))} | " + f"{fmt_int(p.get('pub_msgs'))} | {p.get('pub_mb') or '—'} | " + f"{fmt_int(p.get('sub_msgs'))} | {p.get('sub_mb') or '—'} |" + ) + print() + print("## Round-trip delay") + print() + print("| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max |") + print("|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----|") + for p in sorted(lats, key=lat_sort): + kind = lat_mode(p.get("run", ""), p.get("mode", "")) + label = "ping (sequential RTT)" if kind == "ping" else "flood (burst queueing)" + print( + f"| `{p['run']}` | {label} | {p.get('count', '')} | {p.get('pubs', '')} | " + f"{p.get('size', '')} B | {p.get('min', '')} | {p.get('avg', '')} | " + f"{p.get('p50', '')} | {p.get('p90', '')} | {p.get('p99', '')} | {p.get('max', '')} |" + ) + print() + print("## What the numbers mean") + print() + print( + "Product job/event/archive traffic is **JetStream r=3 file**. On this three-LXC stand that is about " + "**16k durable 128 B pubs/s** (about **13k** at 1 KiB). Core NATS is an upper bound for " + "non-durable fan-out: about **0.7–2.0M msgs/s** aggregate at 128 B, or **~630k msgs/s (~616 MB/s)** at 1 KiB with 4 publishers." + ) + print() + print( + "A quiet request-reply is **~0.3 ms** average, **p99 < 1 ms**. Flood rows in the **150–500 ms** band " + "are the subscriber catching up after a burst, which is what a job-events mailbox sees if publishers outrun consumers." + ) + print() + print("Re-run on NS1: `bash scripts/bench.sh`. Raw logs/CSVs are under `results//`.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/bench.sh b/scripts/bench.sh new file mode 100755 index 0000000..a572fe6 --- /dev/null +++ b/scripts/bench.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +# Message throughput and delay ladder against the 3-node vmbr1 cluster. +# Prefers a client that is not a nats-* server (px-worker LXC 510). +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# shellcheck disable=SC1091 +. "$ROOT/client.env" +export PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin:$PATH" +STAMP="$(date -u +%Y%m%dT%H%M%SZ)" +OUT="${BENCH_OUT:-$ROOT/results/$STAMP}" +CLIENT_VMID="${CLIENT_VMID:-510}" +mkdir -p "$OUT" + +ensure_nats_cli() { + local vmid="$1" + sudo pct exec "$vmid" -- bash -lc ' +set -e +export DEBIAN_FRONTEND=noninteractive +export PATH=/usr/local/bin:/usr/bin:/bin +if [[ ! -x /usr/local/bin/nats ]]; then + apt-get install -y --no-install-recommends unzip curl ca-certificates >/dev/null + curl -fsSL https://github.com/nats-io/natscli/releases/download/v0.1.6/nats-0.1.6-linux-amd64.zip -o /tmp/natscli.zip + rm -rf /tmp/natscli && mkdir -p /tmp/natscli + unzip -o /tmp/natscli.zip -d /tmp/natscli >/dev/null + BIN=$(find /tmp/natscli -type f -name nats | head -1) + install -m 0755 "$BIN" /usr/local/bin/nats +fi +nats --version +' +} + +run_one() { + local name="$1" + shift + echo "=== $name ===" | tee "$OUT/$name.txt" + # nats bench writes csv itself when --csv is a path inside the guest + sudo pct exec "$CLIENT_VMID" -- bash -lc " +export PATH=/usr/local/bin:/usr/bin:/bin +export NATS_URL='$NATS_URL' +nats bench --no-progress --csv=/tmp/bench.csv $* +" | tee -a "$OUT/$name.txt" + sudo pct exec "$CLIENT_VMID" -- cat /tmp/bench.csv >"$OUT/$name.csv" || true +} + +echo "client LXC $CLIENT_VMID NATS_URL=$NATS_URL out=$OUT" +ensure_nats_cli "$CLIENT_VMID" + +# Core NATS pub/sub — increasing publishers (same 128 B payload) +run_one core-1p1s-50k-128 bench.core.a --pub 1 --sub 1 --msgs 50000 --size 128 +run_one core-4p4s-100k-128 bench.core.b --pub 4 --sub 4 --msgs 100000 --size 128 +run_one core-8p8s-200k-128 bench.core.c --pub 8 --sub 8 --msgs 200000 --size 128 +run_one core-4p4s-50k-1k bench.core.d --pub 4 --sub 4 --msgs 50000 --size 1024 + +js_rm() { + sudo pct exec "$CLIENT_VMID" -- bash -lc " +export PATH=/usr/local/bin:/usr/bin:/bin +export NATS_URL='$NATS_URL' +nats stream rm benchstream --force >/dev/null 2>&1 || true +" +} +# JetStream file store, replicas=3 (matches product streams) +js_rm +run_one js-1p-20k-128-r3 bench.js.a --js --purge --pub 1 --msgs 20000 --size 128 --replicas 3 --storage file --maxbytes=512MB --stream=benchstream +js_rm +run_one js-4p-50k-128-r3 bench.js.b --js --purge --pub 4 --msgs 50000 --size 128 --replicas 3 --storage file --maxbytes=512MB --stream=benchstream +js_rm +run_one js-4p-20k-1k-r3 bench.js.c --js --purge --pub 4 --msgs 20000 --size 1024 --replicas 3 --storage file --maxbytes=512MB --stream=benchstream +js_rm +run_one js-2p2s-20k-128-r3 bench.js.d --js --purge --pub 2 --sub 2 --msgs 20000 --size 128 --replicas 3 --storage file --maxbytes=512MB --pull --stream=benchstream +js_rm + +# Round-trip delay (two connections, through the cluster) at several loads +sudo pct exec "$CLIENT_VMID" -- bash -lc " +set -e +export PATH=/usr/local/bin:/usr/bin:/bin +export NATS_URL='$NATS_URL' +mkdir -p /tmp/nats-lat +cd /tmp/nats-lat +if [[ ! -d node_modules/nats ]]; then + npm init -y >/dev/null + npm install --no-audit --no-fund nats@2 >/dev/null +fi +" >/dev/null +sudo pct push "$CLIENT_VMID" "$ROOT/scripts/latency.mjs" /tmp/nats-lat/latency.mjs || \ + sudo pct exec "$CLIENT_VMID" -- bash -c 'cat > /tmp/nats-lat/latency.mjs' < "$ROOT/scripts/latency.mjs" +lat() { + local name="$1" n="$2" sz="$3" p="$4" mode="${5:-flood}" + echo "=== $name ===" | tee "$OUT/$name.txt" + sudo pct exec "$CLIENT_VMID" -- bash -lc " +export PATH=/usr/local/bin:/usr/bin:/bin +export NATS_URL='$NATS_URL' +cd /tmp/nats-lat +node latency.mjs $n $sz $p $mode +" | tee -a "$OUT/$name.txt" +} +# copy latest probe +sudo pct exec "$CLIENT_VMID" -- bash -c 'cat > /tmp/nats-lat/latency.mjs' < "$ROOT/scripts/latency.mjs" +lat lat-ping-1k-128 1000 128 1 ping +lat lat-1p-5k-128 5000 128 1 flood +lat lat-4p-10k-128 10000 128 4 flood +lat lat-8p-20k-128 20000 128 8 flood +lat lat-4p-5k-1k 5000 1024 4 flood + +python3 "$ROOT/scripts/bench-report.py" "$OUT" >"$OUT/BENCH.md" +cp "$OUT/BENCH.md" "$ROOT/BENCH.md" +echo "wrote $OUT/BENCH.md and $ROOT/BENCH.md" diff --git a/scripts/build-ns1-study-report.py b/scripts/build-ns1-study-report.py new file mode 100755 index 0000000..701b6f1 --- /dev/null +++ b/scripts/build-ns1-study-report.py @@ -0,0 +1,458 @@ +#!/usr/bin/env python3 +"""Build the NS1-host study report (charts + markdown + HTML + PDF) from a results dir. + +Must be able to run entirely on NS1.GEORGELAMBERT.ORG with python3, matplotlib, +pandoc, and weasyprint. Parses nats bench logs; does not hard-code rates. +""" +from __future__ import annotations + +import json +import re +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +import importlib.util + +_spec = importlib.util.spec_from_file_location( + "bench_report", Path(__file__).resolve().parent / "bench-report.py" +) +_br = importlib.util.module_from_spec(_spec) +assert _spec.loader is not None +_spec.loader.exec_module(_br) +fmt_int = _br.fmt_int +lat_mode = _br.lat_mode +lat_sort = _br.lat_sort +parse_bench = _br.parse_bench +parse_lat = _br.parse_lat +thru_sort = _br.thru_sort + +try: + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.ticker import FuncFormatter +except ImportError as e: + raise SystemExit(f"matplotlib required on NS1: {e}") from e + +INDIGO = "#4f46e5" +DEEP = "#312e81" +TEAL = "#047857" +AMBER = "#b45309" +LILAC = "#7c74f0" +INK = "#171a26" +MUTED = "#5b6178" +GRID = "#d9dce8" + +CORE_LABELS = { + "core-1p1s-50k-128": "1p1s\n50k×128 B", + "core-4p4s-100k-128": "4p4s\n100k×128 B", + "core-8p8s-200k-128": "8p8s\n200k×128 B", + "core-4p4s-50k-1k": "4p4s\n50k×1 KiB", +} +JS_LABELS = { + "js-1p-20k-128-r3": "1p 20k×128 B", + "js-4p-50k-128-r3": "4p 50k×128 B", + "js-4p-20k-1k-r3": "4p 20k×1 KiB", + "js-2p2s-20k-128-r3": "2p2s pull 20k×128 B", +} +LAT_LABELS = { + "lat-ping-1k-128": "Ping\n1k×128 B", + "lat-1p-5k-128": "Flood 1p\n5k×128 B", + "lat-4p-5k-1k": "Flood 4p\n5k×1 KiB", + "lat-4p-10k-128": "Flood 4p\n10k×128 B", + "lat-8p-20k-128": "Flood 8p\n20k×128 B", +} + + +def ms(s: str) -> float: + return float(s.replace("ms", "").replace(",", "").strip()) + + +def k_fmt(x: float, _pos: int | None = None) -> str: + if x >= 1_000_000: + return f"{x / 1_000_000:.2f}M" + if x >= 1000: + return f"{x / 1000:.0f}k" + return f"{x:.0f}" + + +def style() -> None: + plt.rcParams.update( + { + "font.family": "sans-serif", + "font.size": 10, + "axes.titlesize": 12, + "axes.titleweight": "semibold", + "axes.edgecolor": GRID, + "axes.labelcolor": INK, + "text.color": INK, + "xtick.color": MUTED, + "ytick.color": MUTED, + "figure.facecolor": "white", + "axes.facecolor": "white", + "axes.grid": True, + "grid.color": GRID, + "grid.linewidth": 0.8, + "legend.frameon": False, + "savefig.bbox": "tight", + "savefig.dpi": 160, + "savefig.facecolor": "white", + } + ) + + +def save(fig: plt.Figure, path: Path) -> None: + fig.savefig(path, dpi=160) + plt.close(fig) + + +def load_runs(folder: Path) -> tuple[list[dict[str, str]], list[dict[str, str]]]: + thru: list[dict[str, str]] = [] + lats: list[dict[str, str]] = [] + for f in sorted(folder.glob("*.txt")): + if f.name.startswith("host-"): + continue + text = f.read_text(encoding="utf-8", errors="replace") + lat = parse_lat(text) + if lat: + lat["run"] = f.stem + lats.append(lat) + continue + p = parse_bench(text) + if p.get("pub_msgs") or p.get("agg_msgs"): + p["run"] = f.stem + thru.append(p) + return sorted(thru, key=thru_sort), sorted(lats, key=lat_sort) + + +def kv_file(path: Path) -> dict[str, str]: + out: dict[str, str] = {} + if not path.exists(): + return out + for line in path.read_text(encoding="utf-8", errors="replace").splitlines(): + if "=" in line and not line.startswith("---"): + k, _, v = line.partition("=") + if k.strip() in out: + continue + out[k.strip()] = v.strip() + return out + + +def thru_table(thru: list[dict[str, str]]) -> str: + lines = [ + "| Run | Mode | Aggregate msgs/s | Pub msgs/s | Pub MB/s | Sub msgs/s | Sub MB/s |", + "|-----|------|------------------|------------|----------|------------|----------|", + ] + for p in thru: + lines.append( + f"| `{p['run']}` | {p.get('mode', '')} | {fmt_int(p.get('agg_msgs'))} | " + f"{fmt_int(p.get('pub_msgs'))} | {p.get('pub_mb') or '—'} | " + f"{fmt_int(p.get('sub_msgs'))} | {p.get('sub_mb') or '—'} |" + ) + return "\n".join(lines) + + +def delay_table(lats: list[dict[str, str]]) -> str: + lines = [ + "| Run | Kind | Count | Pubs | Size | min | avg | p50 | p90 | p99 | max |", + "|-----|------|-------|------|------|-----|-----|-----|-----|-----|-----|", + ] + for p in lats: + kind = lat_mode(p.get("run", ""), p.get("mode", "")) + label = "ping (sequential RTT)" if kind == "ping" else "flood (burst queueing)" + lines.append( + f"| `{p['run']}` | {label} | {p.get('count', '')} | {p.get('pubs', '')} | " + f"{p.get('size', '')} B | {p.get('min', '')} | {p.get('avg', '')} | " + f"{p.get('p50', '')} | {p.get('p90', '')} | {p.get('p99', '')} | {p.get('max', '')} |" + ) + return "\n".join(lines) + + +def varz_table(path: Path) -> str: + if not path.exists(): + return "_varz snapshot not captured._" + rows = json.loads(path.read_text(encoding="utf-8")) + lines = [ + "| Node | VMID | connections | in_msgs | out_msgs | cpu | cores | mem (B) | jetstream |", + "|------|------|-------------|---------|----------|-----|-------|---------|-----------|", + ] + for r in rows: + if r.get("error"): + lines.append(f"| {r.get('name')} | {r.get('vmid')} | error: {r['error']} | | | | | | |") + continue + lines.append( + f"| {r.get('name')} | {r.get('vmid')} | {r.get('connections')} | " + f"{r.get('in_msgs'):,} | {r.get('out_msgs'):,} | {r.get('cpu')} | " + f"{r.get('cores')} | {r.get('mem'):,} | {r.get('jetstream')} |" + ) + return "\n".join(lines) + + +def charts(thru: list[dict[str, str]], lats: list[dict[str, str]], dest: Path) -> None: + dest.mkdir(parents=True, exist_ok=True) + style() + by = {p["run"]: p for p in thru} + core_keys = [k for k in CORE_LABELS if k in by] + if core_keys: + fig, ax = plt.subplots(figsize=(9.2, 4.4)) + x = list(range(len(core_keys))) + w = 0.25 + agg = [int(by[k].get("agg_msgs") or 0) for k in core_keys] + pub = [int(by[k].get("pub_msgs") or 0) for k in core_keys] + sub = [int(by[k].get("sub_msgs") or 0) for k in core_keys] + ax.bar([i - w for i in x], agg, w, label="Aggregate", color=DEEP) + ax.bar(x, pub, w, label="Publish", color=INDIGO) + ax.bar([i + w for i in x], sub, w, label="Subscribe", color=TEAL) + ax.set_xticks(x, [CORE_LABELS[k] for k in core_keys]) + ax.set_ylabel("messages / second") + ax.set_title("Core NATS throughput (fire-and-forget) — NS1 host run") + ax.yaxis.set_major_formatter(FuncFormatter(k_fmt)) + ax.legend(loc="upper left") + ax.set_axisbelow(True) + save(fig, dest / "core-throughput.png") + + js_keys = [k for k in JS_LABELS if k in by] + if js_keys: + fig, ax = plt.subplots(figsize=(9.2, 4.4)) + pubs = [int(by[k].get("pub_msgs") or 0) for k in js_keys] + colors = [INDIGO, INDIGO, AMBER, LILAC][: len(js_keys)] + ax.bar([JS_LABELS[k] for k in js_keys], pubs, color=colors) + ax.set_ylabel("durable publish messages / second") + ax.set_title("JetStream file store, replicas=3 — NS1 host run") + ax.yaxis.set_major_formatter(FuncFormatter(k_fmt)) + ax.set_axisbelow(True) + for i, v in enumerate(pubs): + ax.text(i, v * 1.02, f"{v:,}", ha="center", va="bottom", fontsize=9, color=MUTED) + save(fig, dest / "js-throughput.png") + + pair = [("core-1p1s-50k-128", "js-1p-20k-128-r3"), ("core-4p4s-100k-128", "js-4p-50k-128-r3"), ("core-4p4s-50k-1k", "js-4p-20k-1k-r3")] + if all(c in by and j in by for c, j in pair): + fig, ax = plt.subplots(figsize=(9.2, 4.4)) + labels = ["1 publisher\n128 B", "4 publishers\n128 B", "4 publishers\n1 KiB"] + core_pub = [int(by[c]["pub_msgs"]) for c, _ in pair] + js_pub = [int(by[j]["pub_msgs"]) for _, j in pair] + x = list(range(3)) + w = 0.35 + ax.bar([i - w / 2 for i in x], core_pub, w, label="Core NATS (no disk)", color=INDIGO) + ax.bar([i + w / 2 for i in x], js_pub, w, label="JetStream r=3 file", color=AMBER) + ax.set_xticks(x, labels) + ax.set_yscale("log") + ax.set_ylabel("publish messages / second (log)") + ax.set_title("Core vs JetStream — NS1 host run") + ax.legend(loc="upper right") + ax.set_axisbelow(True) + save(fig, dest / "core-vs-js.png") + + if "core-4p4s-100k-128" in by and "core-4p4s-50k-1k" in by: + fig, axes = plt.subplots(1, 2, figsize=(9.2, 4.2)) + labels = ["128 B\n4p4s", "1 KiB\n4p4s"] + msgs = [int(by["core-4p4s-100k-128"].get("agg_msgs") or 0), int(by["core-4p4s-50k-1k"].get("agg_msgs") or 0)] + mb = [float(by["core-4p4s-100k-128"].get("agg_mb") or 0), float(by["core-4p4s-50k-1k"].get("agg_mb") or 0)] + axes[0].bar(labels, msgs, color=[INDIGO, AMBER]) + axes[0].set_title("Aggregate messages / second") + axes[0].yaxis.set_major_formatter(FuncFormatter(k_fmt)) + axes[1].bar(labels, mb, color=[INDIGO, AMBER]) + axes[1].set_title("Aggregate MB / second") + fig.suptitle("Core NATS payload effect — NS1 host run", fontsize=12, fontweight="semibold") + fig.tight_layout() + save(fig, dest / "payload-size.png") + + if lats: + fig, ax = plt.subplots(figsize=(9.2, 4.6)) + ordered = [p for p in lats] + labels = [LAT_LABELS.get(p["run"], p["run"]) for p in ordered] + x = list(range(len(ordered))) + w = 0.25 + p50 = [ms(p["p50"]) for p in ordered] + p90 = [ms(p["p90"]) for p in ordered] + p99 = [ms(p["p99"]) for p in ordered] + ax.bar([i - w for i in x], p50, w, label="p50", color=TEAL) + ax.bar(x, p90, w, label="p90", color=INDIGO) + ax.bar([i + w for i in x], p99, w, label="p99", color=AMBER) + ax.set_xticks(x, labels) + ax.set_yscale("log") + ax.set_ylabel("milliseconds (log)") + ax.set_title("Round-trip delay — NS1 host run") + ax.axhline(1.0, color=GRID, linestyle="--", linewidth=1) + ax.legend(loc="upper left") + ax.set_axisbelow(True) + save(fig, dest / "delay-percentiles.png") + + +def figure(name: str, caption: str) -> str: + return f"![{caption}](charts/{name})\n\n*{caption}*" + + +def write_markdown(folder: Path, thru: list[dict[str, str]], lats: list[dict[str, str]]) -> str: + before = kv_file(folder / "host-before.txt") + after = kv_file(folder / "host-after.txt") + stamp = folder.name + method = (Path(__file__).resolve().parent / "ns1-study-methodology.md").read_text(encoding="utf-8") + figs = [] + charts_dir = folder / "charts" + if (charts_dir / "core-throughput.png").exists(): + figs.append("### Core NATS\n\n" + figure("core-throughput.png", "Core NATS throughput at four loads (NS1 host run)")) + if (charts_dir / "payload-size.png").exists(): + figs.append("### Payload size (core)\n\n" + figure("payload-size.png", "Core NATS 128 B vs 1 KiB (NS1 host run)")) + if (charts_dir / "js-throughput.png").exists(): + figs.append("### JetStream r=3 file\n\n" + figure("js-throughput.png", "JetStream durable publish rate (NS1 host run)")) + if (charts_dir / "core-vs-js.png").exists(): + figs.append("### Core vs JetStream\n\n" + figure("core-vs-js.png", "Core vs JetStream publish rate, log scale (NS1 host run)")) + if (charts_dir / "delay-percentiles.png").exists(): + figs.append("### Delay\n\n" + figure("delay-percentiles.png", "Ping vs flood delay percentiles, log scale (NS1 host run)")) + + ping = next((p for p in lats if "ping" in p.get("run", "")), None) + js1 = next((p for p in thru if p["run"] == "js-1p-20k-128-r3"), None) + core1 = next((p for p in thru if p["run"] == "core-1p1s-50k-128"), None) + + md = f"""**Progress report (second study)** · run `{stamp}` (UTC) + +> **Execution provenance.** Every process for this study ran on **NS1.GEORGELAMBERT.ORG** (`70.88.205.138`): the orchestrator (`study-on-ns1.sh`), `nats bench`, `latency.mjs` (inside LXC 510 on this hypervisor), charting (`matplotlib`), and HTML/PDF (`pandoc` + `weasyprint`). The operator laptop did **not** publish, subscribe, draw charts, or render the PDF. Traffic stayed on `vmbr1` from LXC **510** to `nats-a/b/c` (**511–513**). + +This is a full methodology write-up plus the numbers from that on-host run. The earlier report (`nats-cluster-bench`, run `20260912T045131Z`) used the same cluster but was **orchestrated and rendered off-box**. Use this document when you need “it was all run on 138.” + +--- + +## 1. Executive summary + +| Item | This NS1-host run | +|------|-------------------| +| Control plane | NS1.GEORGELAMBERT.ORG (`70.88.205.138`), user `{before.get("whoami", "marchon")}` | +| Bench client | LXC {before.get("client_vmid", "510")} `verae-px-worker` | +| Brokers | LXC 511/512/513 `nats-a/b/c` on `10.10.10.21–23` | +| Client URL | `{before.get("nats_url", "")}` | +| Host load before | `{before.get("loadavg", "n/a")}` | +| Host load after | `{after.get("loadavg", "n/a")}` | +| Core 1p1s 128 B pub | {fmt_int(core1.get("pub_msgs") if core1 else None)} msgs/s | +| JetStream 1p 128 B r=3 | {fmt_int(js1.get("pub_msgs") if js1 else None)} durable pubs/s | +| Ping p50 / p99 | {ping.get("p50") if ping else "—"} / {ping.get("p99") if ping else "—"} | + +Product traffic is the JetStream row. Ping is one-message delay. Flood is mailbox catch-up after a burst. + +--- + +## 2. Where it ran (and where it did not) + +```text +Operator laptop ──ssh──► NS1.GEORGELAMBERT.ORG 70.88.205.138 + study-on-ns1.sh + python3 build-ns1-study-report.py + sudo pct exec 510 ──► nats bench / latency.mjs + │ + ▼ vmbr1 + 10.10.10.21-23 :4222 +``` + +- **Did run on 138:** bash, python3, matplotlib, pandoc, weasyprint, `pct`, nats-server (in LXC), nats CLI and Node (in LXC 510). +- **Did not run on the laptop:** no local `nats bench`, no local charting, no local WeasyPrint for this file. + +--- + +## 3. Results (this run) + +### Host and brokers + +**Before** + +{varz_table(folder / "varz-before.json")} + +**After** + +{varz_table(folder / "varz-after.json")} + +nproc={before.get("nproc", "?")} · uname=`{before.get("uname", "")}` + +### Throughput + +{thru_table(thru)} + +### Round-trip delay + +{delay_table(lats)} + +{chr(10).join(figs)} + +--- + +{method} + +--- + +## 6. Reproducing this study + +On **NS1 only**: + +```bash +cd ~/verae-src/verae-nats-cluster +bash scripts/study-on-ns1.sh +``` + +The script exits if `hostname` is not NS1. Outputs land in `results//` including `nats-cluster-bench-ns1.{{md,html,pdf}}` and `charts/`. Copy those into `zapier-decisions/reports/` for the progress repo and catalog. + +Raw logs for this run: `results/{stamp}/`. +""" + return md + + +def render(md_path: Path, html_path: Path, pdf_path: Path) -> None: + css = Path(__file__).resolve().parent / "docs-print.css" + header = html_path.with_suffix(".hdr.html") + banner = html_path.with_suffix(".ban.html") + css_text = css.read_text(encoding="utf-8") if css.exists() else "" + header.write_text(f"\n", encoding="utf-8") + banner.write_text( + '

' + '' + '
Verae Time × Zapier · progress report · run on NS1.GEORGELAMBERT.ORG
' + "

NATS cluster message speed — NS1 host study

" + '
packages/zapier-decisions/reports/nats-cluster-bench-ns1.md
' + "
\n", + encoding="utf-8", + ) + r = subprocess.run( + [ + "pandoc", + str(md_path), + "-o", + str(html_path), + "--standalone", + f"--resource-path={md_path.parent}", + "--highlight-style=breezedark", + "--metadata=title=NATS cluster message speed — NS1 host study", + f"--include-in-header={header}", + f"--include-before-body={banner}", + ], + capture_output=True, + text=True, + ) + header.unlink(missing_ok=True) + banner.unlink(missing_ok=True) + if r.returncode != 0: + raise SystemExit(f"pandoc failed: {r.stderr[-800:]}") + w = subprocess.run(["weasyprint", str(html_path), str(pdf_path)], capture_output=True, text=True) + if w.returncode != 0: + raise SystemExit(f"weasyprint failed: {w.stderr[-800:]}") + + +def main() -> int: + folder = Path(sys.argv[1] if len(sys.argv) > 1 else ".") + thru, lats = load_runs(folder) + charts(thru, lats, folder / "charts") + md = write_markdown(folder, thru, lats) + md_path = folder / "nats-cluster-bench-ns1.md" + md_path.write_text(md, encoding="utf-8") + html_path = folder / "nats-cluster-bench-ns1.html" + pdf_path = folder / "nats-cluster-bench-ns1.pdf" + render(md_path, html_path, pdf_path) + print(f"wrote {md_path}") + print(f"wrote {html_path}") + print(f"wrote {pdf_path}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/create-cluster.sh b/scripts/create-cluster.sh new file mode 100755 index 0000000..bb42239 --- /dev/null +++ b/scripts/create-cluster.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# Create three distinct Proxmox LXC guests and start a JetStream cluster on vmbr1. +# Does not touch host loopback NATS (127.0.0.1:4222) or vmbr0. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# shellcheck disable=SC1091 +. "$ROOT/cluster.env" +# shellcheck disable=SC1091 +. "$ROOT/scripts/lib-ct.sh" +ct_require_proxmox + +mapfile -t rows < <(printf '%s\n' "$NODES" | awk 'NF==3 {print}') +[[ ${#rows[@]} -eq 3 ]] || { echo "need exactly 3 nodes in cluster.env" >&2; exit 1; } + +declare -a VMIDS NAMES IPS +for row in "${rows[@]}"; do + # shellcheck disable=SC2086 + set -- $row + VMIDS+=("$1"); NAMES+=("$2"); IPS+=("$3") +done + +i=0 +for i in 0 1 2; do + ct_ensure "${VMIDS[$i]}" "${NAMES[$i]}" "${IPS[$i]}" + ct_bootstrap_user "${VMIDS[$i]}" +done + +# Install nats-server + conf + systemd on each guest +for i in 0 1 2; do + routes="" + for j in 0 1 2; do + [[ $i -eq $j ]] && continue + routes="${routes} nats-route://${IPS[$j]}:6222"$'\n' + done + tmpconf="$(mktemp)" + NAME="${NAMES[$i]}" IP="${IPS[$i]}" CLUSTER="$CLUSTER_NAME" ROUTES="$routes" \ + python3 - "$ROOT/conf/nats.conf.tmpl" "$tmpconf" <<'PY' +import os, pathlib, sys +t = pathlib.Path(sys.argv[1]).read_text() +out = t.replace("{{NAME}}", os.environ["NAME"]).replace("{{IP}}", os.environ["IP"]).replace("{{CLUSTER}}", os.environ["CLUSTER"]).replace("{{ROUTES}}", os.environ["ROUTES"]) +pathlib.Path(sys.argv[2]).write_text(out) +PY + sudo pct exec "${VMIDS[$i]}" -- bash -c 'cat > /tmp/nats.conf' < "$tmpconf" + sudo pct exec "${VMIDS[$i]}" -- bash -c 'cat > /tmp/nats-server.service' < "$ROOT/systemd/nats-server.service" + rm -f "$tmpconf" + sudo pct exec "${VMIDS[$i]}" -- bash -lc " +set -e +export DEBIAN_FRONTEND=noninteractive +id nats >/dev/null 2>&1 || useradd -r -s /usr/sbin/nologin nats +install -d -m 755 -o nats -g nats /var/lib/nats/jetstream /etc/nats +mv /tmp/nats.conf /etc/nats/nats.conf +chown root:root /etc/nats/nats.conf +chmod 644 /etc/nats/nats.conf +if [[ ! -x /usr/local/bin/nats-server ]]; then + curl -fsSL https://github.com/nats-io/nats-server/releases/download/v${NATS_VER}/nats-server-v${NATS_VER}-linux-amd64.tar.gz -o /tmp/nats.tgz + tar -xzf /tmp/nats.tgz -C /tmp + install -m 0755 /tmp/nats-server-v${NATS_VER}-linux-amd64/nats-server /usr/local/bin/nats-server + rm -rf /tmp/nats.tgz /tmp/nats-server-v${NATS_VER}-linux-amd64 +fi +install -m 644 /tmp/nats-server.service /etc/systemd/system/nats-server.service +systemctl daemon-reload +systemctl enable --now nats-server +" + echo "nats-server ${NAMES[$i]} ${IPS[$i]}:4222 cluster ${IPS[$i]}:6222" +done + +echo "cluster client URL: nats://${IPS[0]}:4222,nats://${IPS[1]}:4222,nats://${IPS[2]}:4222" +echo "lab loopback NATS on the host is unchanged (127.0.0.1:4222)" +echo "next: bash $ROOT/scripts/test.sh" diff --git a/scripts/cutover-ns1.sh b/scripts/cutover-ns1.sh new file mode 100755 index 0000000..6fa073c --- /dev/null +++ b/scripts/cutover-ns1.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Point NS1 test modules at the 3-node vmbr1 cluster. Does not change MOCK_VERAE or Zapier. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# shellcheck disable=SC1091 +. "$ROOT/client.env" +export PATH="/usr/sbin:/usr/bin:/bin:$PATH" +bash "$ROOT/scripts/ensure-streams.sh" +echo "NATS_URL=$NATS_URL" +echo "streams ensured. restart keep + fleet on the host after copying overlay/service JSON." diff --git a/scripts/docs-print.css b/scripts/docs-print.css new file mode 100644 index 0000000..99256e9 --- /dev/null +++ b/scripts/docs-print.css @@ -0,0 +1,122 @@ +/* Colored print + screen stylesheet for zapier.georgelambert.org */ +:root { + --ink: #171a26; + --muted: #5b6178; + --line: #d9dce8; + --bg: #f4f5fb; + --paper: #ffffff; + --accent: #4f46e5; + --accent-deep: #312e81; + --accent-soft: #eef0fe; + --ok: #047857; + --warn: #8a5a00; + --code-bg: #1b1f33; + --code-fg: #e8ecff; +} +html { background: var(--bg); } +body { + margin: 0 auto; + padding: 1.5rem 1.25rem 3rem; + max-width: 48rem; + font: 15px/1.55 -apple-system, "Segoe UI", Georgia, serif; + color: var(--ink); + background: var(--paper); +} +.doc-banner { + background: linear-gradient(160deg, #312e81 0%, #4f46e5 60%, #7c74f0 100%); + color: #eef0fe; + margin: -1.5rem -1.25rem 1.5rem; + padding: 1.1rem 1.25rem 1rem; +} +.doc-banner a { color: #fff; } +.doc-banner .kicker { + letter-spacing: 0.12em; + text-transform: uppercase; + font: 700 10px system-ui, sans-serif; + opacity: 0.8; +} +.doc-banner h1 { margin: 0.25rem 0 0; font-size: 1.45rem; color: #fff; } +h1, h2, h3, h4 { color: var(--accent-deep); page-break-after: avoid; } +h1 { font-size: 1.7rem; } +h2 { + font-size: 1.2rem; + border-bottom: 2px solid var(--accent); + padding-bottom: 0.2rem; + margin-top: 1.6rem; +} +h3 { font-size: 1.05rem; color: var(--accent); } +a { color: var(--accent); } +p, li { orphans: 3; widows: 3; } +code { + font-family: ui-monospace, Menlo, Consolas, monospace; + font-size: 0.86em; + background: var(--accent-soft); + color: var(--accent-deep); + padding: 0.08em 0.28em; + border-radius: 4px; +} +pre, div.sourceCode, div.sourceCode pre { + background: var(--code-bg) !important; + color: var(--code-fg) !important; + padding: 0.85rem 1rem; + border-radius: 10px; + overflow: auto; + font-size: 0.78rem; + line-height: 1.4; + page-break-inside: avoid; +} +pre code { background: transparent; color: inherit; padding: 0; } +#title-block-header, header#title-block-header, h1.title { display: none; } +.doc-banner + h1 { display: none; } +table { + border-collapse: collapse; + width: 100%; + margin: 0.8rem 0 1.2rem; + font-size: 0.9rem; + page-break-inside: avoid; +} +th, td { border: 1px solid var(--line); padding: 0.38rem 0.55rem; text-align: left; vertical-align: top; } +th { + background: var(--accent); + color: #fff; + font: 650 12px system-ui, sans-serif; +} +tr:nth-child(even) td { background: var(--accent-soft); } +blockquote { + margin: 1rem 0; + padding: 0.4rem 0.9rem; + border-left: 4px solid var(--accent); + background: var(--accent-soft); + color: var(--accent-deep); +} +img { max-width: 100%; height: auto; border-radius: 8px; page-break-inside: avoid; } +hr { border: 0; border-top: 1px solid var(--line); } +ul, ol { padding-left: 1.25rem; } +nav.site { font: 13px system-ui, sans-serif; margin-bottom: 0.4rem; } +.source-path { font: 11px ui-monospace, Menlo, monospace; color: var(--muted); } + +@page { + size: letter; + margin: 0.65in 0.7in 0.8in 0.7in; + @top-left { + content: "Verae Time × Zapier"; + font: 700 8pt system-ui, sans-serif; + color: #4f46e5; + } + @top-right { + content: "zapier.georgelambert.org"; + font: 8pt system-ui, sans-serif; + color: #6b7186; + } + @bottom-center { + content: counter(page) " / " counter(pages); + font: 8pt system-ui, sans-serif; + color: #6b7186; + } +} +@media print { + html, body { background: #fff; max-width: none; padding: 0; } + .doc-banner { margin: 0 0 1rem; border-radius: 8px; -webkit-print-color-adjust: exact; print-color-adjust: exact; } + a { text-decoration: none; } + th, tr:nth-child(even) td, pre, blockquote, code { -webkit-print-color-adjust: exact; print-color-adjust: exact; } +} diff --git a/scripts/ensure-streams.sh b/scripts/ensure-streams.sh new file mode 100755 index 0000000..4b661be --- /dev/null +++ b/scripts/ensure-streams.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# Create product JetStream streams with replicas=3 on the Proxmox cluster. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# shellcheck disable=SC1091 +. "$ROOT/client.env" +export PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin:$PATH" +VMID="${1:-511}" +sudo pct exec "$VMID" -- bash -lc " +set -e +export DEBIAN_FRONTEND=noninteractive +export PATH=/usr/local/bin:/usr/bin:/bin +export NATS_URL=nats://10.10.10.21:4222 +if [[ ! -x /usr/local/bin/nats ]]; then + apt-get install -y --no-install-recommends unzip >/dev/null + curl -fsSL https://github.com/nats-io/natscli/releases/download/v0.1.6/nats-0.1.6-linux-amd64.zip -o /tmp/natscli.zip + rm -rf /tmp/natscli && mkdir -p /tmp/natscli + unzip -o /tmp/natscli.zip -d /tmp/natscli >/dev/null + BIN=\$(find /tmp/natscli -type f -name nats | head -1) + install -m 0755 \"\$BIN\" /usr/local/bin/nats +fi +add() { + local name=\$1 subj=\$2 + nats stream info \"\$name\" >/dev/null 2>&1 && return 0 + nats stream add \"\$name\" --subjects=\"\$subj\" --replicas=3 --storage=file --retention=limits --discard=old --max-msgs=-1 --max-bytes=-1 --max-age=24h --dupe-window=2m --defaults +} +add ZAPIER_JOBS 'verae.zapier.jobs.watch' +add ZAPIER_EVENTS 'verae.zapier.jobs.events' +add ZAPIER_WEBHOOKS 'verae.zapier.webhooks.deliver' +add ZAPIER_USAGE 'verae.zapier.usage' +add VERAE_ARCHIVE 'verae.archive.>' +nats stream ls +" +echo "streams ready on cluster (replicas=3)" diff --git a/scripts/latency.mjs b/scripts/latency.mjs new file mode 100644 index 0000000..919bf15 --- /dev/null +++ b/scripts/latency.mjs @@ -0,0 +1,105 @@ +#!/usr/bin/env node +/** + * Pub→sub round trip through the cluster (two connections). + * Usage: NATS_URL=... node latency.mjs [count] [payloadBytes] [publishers] [ping|flood] + * ping = sequential publish-wait (one-message RTT) + * flood = publish the batch then drain (queueing under burst) + */ +import { connect, headers } from "nats"; + +const url = process.env.NATS_URL || "nats://10.10.10.21:4222"; +const count = Number(process.argv[2] || 5000); +const size = Number(process.argv[3] || 128); +const pubs = Number(process.argv[4] || 1); +const mode = process.argv[5] || "flood"; +const servers = url.split(",").map((s) => s.trim()); +const subject = `bench.lat.${process.pid}`; +const payload = new Uint8Array(size); + +function pct(sorted, p) { + if (!sorted.length) return 0; + const i = Math.min(sorted.length - 1, Math.floor((p / 100) * sorted.length)); + return sorted[i]; +} + +const samples = []; +if (mode === "ping") { + const subNc = await connect({ servers, name: "lat-sub" }); + const pubNc = await connect({ servers, name: "lat-pub" }); + let resolveOne = null; + const sub = subNc.subscribe(subject, { max: count }); + const consume = (async () => { + for await (const m of sub) { + const sent = Number(m.headers?.get("t") || 0); + samples.push(Number(process.hrtime.bigint() / 1000n) - sent); + resolveOne?.(); + } + })(); + await subNc.flush(); + for (let i = 0; i < count; i++) { + const got = new Promise((r) => { + resolveOne = r; + }); + const h = headers(); + h.set("t", String(process.hrtime.bigint() / 1000n)); + pubNc.publish(subject, payload, { headers: h }); + await got; + } + await consume; + await pubNc.close(); + await subNc.close(); +} else { + const subNc = await connect({ servers, name: "lat-sub" }); + const sub = subNc.subscribe(subject, { max: count }); + const done = (async () => { + for await (const m of sub) { + const sent = Number(m.headers?.get("t") || 0); + if (sent) samples.push(Number(process.hrtime.bigint() / 1000n) - sent); + } + })(); + await subNc.flush(); + const per = Math.ceil(count / pubs); + const publishers = []; + for (let p = 0; p < pubs; p++) { + publishers.push( + (async () => { + const nc = await connect({ servers, name: `lat-pub-${p}` }); + const n = p === pubs - 1 ? count - per * (pubs - 1) : per; + for (let i = 0; i < n; i++) { + const h = headers(); + h.set("t", String(process.hrtime.bigint() / 1000n)); + nc.publish(subject, payload, { headers: h }); + } + await nc.flush(); + await nc.close(); + })(), + ); + } + await Promise.all(publishers); + await done; + await subNc.close(); +} + +samples.sort((a, b) => a - b); +const sum = samples.reduce((a, b) => a + b, 0); +const us = (n) => `${(n / 1000).toFixed(3)}ms`; +console.log( + JSON.stringify({ + count: samples.length, + pubs, + size, + mode, + min_us: samples[0], + avg_us: Math.round(sum / samples.length), + p50_us: pct(samples, 50), + p90_us: pct(samples, 90), + p99_us: pct(samples, 99), + max_us: samples[samples.length - 1], + min: us(samples[0]), + avg: us(sum / samples.length), + p50: us(pct(samples, 50)), + p90: us(pct(samples, 90)), + p99: us(pct(samples, 99)), + max: us(samples[samples.length - 1]), + }), +); diff --git a/scripts/lib-ct.sh b/scripts/lib-ct.sh new file mode 100755 index 0000000..1a4ff8e --- /dev/null +++ b/scripts/lib-ct.sh @@ -0,0 +1,62 @@ +# shellcheck shell=bash +# Shared LXC bootstrap for NS1 Proxmox. Does not generate SSH keys if one exists. +export PATH="/usr/sbin:/usr/bin:/bin:$PATH" + +ct_require_proxmox() { + if [[ ! -d /etc/pve/nodes ]]; then + echo "not a Proxmox host" >&2 + return 1 + fi + command -v pct >/dev/null || { echo "pct missing" >&2; return 1; } +} + +ct_ensure() { + local vmid="$1" hostname="$2" ip="$3" + if [[ ! -f "$TEMPLATE" ]]; then + echo "missing template $TEMPLATE" >&2 + return 1 + fi + if ! sudo pct status "$vmid" >/dev/null 2>&1; then + echo "pct create $vmid $hostname $ip/24" + sudo pct create "$vmid" "$TEMPLATE" \ + --hostname "$hostname" \ + --memory "$MEMORY" --cores "$CORES" --swap 256 \ + --net0 "name=eth0,bridge=${BRIDGE},ip=${ip}/24,gw=${GW},type=veth" \ + --rootfs "${STORAGE}:${DISK}" \ + --unprivileged 1 --onboot 1 --nameserver "$DNS" \ + --features nesting=1 \ + --ostype ubuntu + else + echo "CT $vmid already exists" + fi + sudo pct start "$vmid" 2>/dev/null || true + local i + for i in $(seq 1 40); do + sudo pct exec "$vmid" -- true 2>/dev/null && return 0 + sleep 2 + done + echo "CT $vmid did not start" >&2 + return 1 +} + +ct_bootstrap_user() { + local vmid="$1" + local pub="" + [[ -f "$HOME/.ssh/id_ed25519.pub" ]] && pub="$(cat "$HOME/.ssh/id_ed25519.pub")" + [[ -z "$pub" && -f "$HOME/.ssh/authorized_keys" ]] && pub="$(head -1 "$HOME/.ssh/authorized_keys")" + [[ -n "$pub" ]] || { echo "no ssh public key" >&2; return 1; } + sudo pct exec "$vmid" -- bash -lc " +set -e +export DEBIAN_FRONTEND=noninteractive +apt-get update -qq +apt-get install -y --no-install-recommends openssh-server sudo curl ca-certificates xz-utils tar +id $USER_NAME >/dev/null 2>&1 || useradd -m -s /bin/bash $USER_NAME +echo '$USER_NAME ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/90-$USER_NAME +chmod 440 /etc/sudoers.d/90-$USER_NAME +install -d -m 700 -o $USER_NAME -g $USER_NAME /home/$USER_NAME/.ssh +grep -qxF '$pub' /home/$USER_NAME/.ssh/authorized_keys 2>/dev/null || echo '$pub' >>/home/$USER_NAME/.ssh/authorized_keys +chown $USER_NAME:$USER_NAME /home/$USER_NAME/.ssh/authorized_keys +chmod 600 /home/$USER_NAME/.ssh/authorized_keys +systemctl enable --now ssh +" +} diff --git a/scripts/ns1-study-methodology.md b/scripts/ns1-study-methodology.md new file mode 100644 index 0000000..2d3423d --- /dev/null +++ b/scripts/ns1-study-methodology.md @@ -0,0 +1,202 @@ +## 4. Study methodology + +### 4.1 Question + +On the NS1 test stand, what message **throughput** and **delay** does the three-node `verae` JetStream cluster deliver at several loads, and which part of the stack is the limiter for product traffic (jobs, events, webhooks, archive)? + +### 4.2 Hypotheses (stated before the run) + +1. **H1 — Core vs JetStream.** Fire-and-forget core NATS is at least an order of magnitude faster than JetStream **file + replicas=3**, because durable publish waits for a majority disk replica. +2. **H2 — JetStream parallelism.** Adding publishers does **not** linearly increase JetStream write rate once the replica log is saturated. +3. **H3 — Quiet delay.** Sequential pub→sub round trip on `vmbr1` is well under 1 ms p99 when the consumer is waiting. +4. **H4 — Burst delay.** If publishers dump a batch before the subscriber drains, observed delay is **queueing time**, roughly linear in backlog, not in cluster hop count. +5. **H5 — Payload.** Moving 128 B → 1 KiB lowers message rate and raises byte rate on core NATS; JetStream in this size band stays replica/fsync bound. + +### 4.3 Independent variables (what we changed) + +| Factor | Levels | +|--------|--------| +| Transport | Core NATS pub/sub vs JetStream file replicas=3 | +| Publisher count | 1, 2, 4, 8 | +| Subscriber count | 0 (JS publish-only), 1, 2, 4, 8 | +| Message count | 1k, 5k, 10k, 20k, 50k, 100k, 200k (by ladder step) | +| Payload | 128 B, 1024 B | +| Delay mode | **ping** (publish, wait, repeat) vs **flood** (publish all, then drain) | + +### 4.4 Dependent variables (what we recorded) + +| Metric | Instrument | Unit | +|--------|------------|------| +| Publish rate | `nats bench` 0.1.6 Pub stats | msgs/s, MB/s | +| Subscribe rate | `nats bench` Sub stats | msgs/s, MB/s | +| Aggregate | `nats bench` NATS Pub/Sub stats | msgs/s (fan-out counts both sides) | +| Publisher spread | nats min/avg/max **msgs/s** | not delay | +| One-way-ish RTT | `latency.mjs` header timestamp | min, avg, p50, p90, p99, max | +| Host load | `/proc/loadavg` before and after | load average | +| Broker counters | `http://127.0.0.1:8222/varz` inside each nats LXC | connections, in/out msgs, cpu, mem | + +**Important:** nats CLI 0.1.6 min/avg/max are **rate spread across publishers**, not microseconds of delay. Delay is only `latency.mjs`. + +### 4.5 Controls and constants + +- Cluster name `verae`, three routes, client `:4222`, cluster `:6222`, monitor loopback `:8222`. +- Client URL always the three-node list on `vmbr1` (never host `127.0.0.1:4222`, never `vmbr0`). +- Bench client is LXC **510**, not a nats-* server. +- JetStream bench stream name `benchstream`, **file** storage, **replicas=3**, deleted between JS loads (`nats stream rm --force`) so names do not collide. +- Product streams were **not** the bench target (no load test on `ZAPIER_*` / `VERAE_ARCHIVE`). +- No TLS, no nkeys, no account isolation (isolation is `vmbr1`). +- Same nats CLI version (0.1.6) and `nats@2` Node client as the first ladder. + +### 4.6 Procedure + +1. Confirm this script is executing on **NS1.GEORGELAMBERT.ORG**. Refuse otherwise. +2. Snapshot host load, memory, LXC configs, and each nats `varz`. +3. From NS1, `pct exec 510` the core ladder (1p1s, 4p4s, 8p8s at 128 B; 4p4s at 1 KiB). +4. Delete `benchstream`; JS ladder (1p, 4p, 4p×1 KiB, 2p2s pull) at replicas=3 file. +5. Copy `latency.mjs` into 510; ping then flood at several batch sizes. +6. Snapshot host/`varz` again. +7. Parse logs on **this host**; draw charts; write HTML and PDF on **this host**. + +No publish, subscribe, chart, or PDF process runs on the operator laptop for this study. + +### 4.7 Instrumentation path + +```text +[NS1 host 70.88.205.138] + study-on-ns1.sh (bash + python3) + | + | sudo pct exec 510 + v +[LXC 510 verae-px-worker 10.10.10.20] + nats bench / node latency.mjs + | + | NATS client protocol to + v +[LXC 511/512/513 10.10.10.21-23 :4222] + nats-server -js cluster routes :6222 +``` + +The hypervisor issues the guest commands. The messages themselves never leave `vmbr1`. + +### 4.8 Threats to validity + +| Threat | Effect on numbers | +|--------|-------------------| +| **One physical host** | Three “replicas” share CPU, memory, and usually the same datastore. This measures process/LXC HA, not disk HA. | +| **Shared load** | NS1 also runs Caddy, Forgejo, keep, fleet, portal, and other CTs. Load average during a run is part of the result, not noise to ignore. | +| **Single bench client** | All publishers live in 510. Per-publisher rate spread is contention in that guest. | +| **Short runs** | Seconds of traffic. No compaction, no multi-hour page-cache eviction, no snapshot during load. | +| **No TLS/nkeys** | Production auth will cost CPU. Do not treat these rates as post-nkeys rates. | +| **Fan-out aggregate** | Core aggregate msgs/s counts pub+sub. Do not compare that column to JetStream unique writes. | +| **Flood ≠ RTT** | Mixing flood averages with ping p99 produces a fake “NATS is slow” story. | +| **Lab only** | Not a Zapier HTTPS bench and not live `api.veraetime.net`. | + +### 4.9 Ethics / safety + +Bench uses throwaway subjects (`bench.core.*`, `bench.js.*`, `bench.lat.*`) and a throwaway stream. It does not purge product streams. Zapier cloud has no NATS socket. + +--- + +## 5. Suggestions for fine-tuning + +These follow from the method and from the first ladder on this stand (JetStream ~16k durable 128 B pubs/s; ping ~0.3 ms; flood hundreds of ms). Apply in order of leverage. Re-run **this NS1 study** after each change so the delta is measured the same way. + +### 5.1 Treat JetStream as the product limiter + +Product jobs/events/webhooks/archive are durable. Tuning core NATS to 2M msgs/s will not move a timestamp Zap. Put effort into **replica write path** and **consumer lag**, not core fan-out. + +### 5.2 Split storage class by stream + +| Stream | Suggested store | Why | +|--------|-----------------|-----| +| `ZAPIER_JOBS` | file, r=3 | Work queue; lose-a-job is bad | +| `ZAPIER_EVENTS` | file r=3, or memory r=3 if events are rebuildable from job status | Hot waiters; measure both | +| `ZAPIER_WEBHOOKS` | file, r=3, workqueue | HTTPS to Zapier is the slow consumer | +| `ZAPIER_USAGE` | file, r=3, limits + max-age | Telemetry | +| `VERAE_ARCHIVE` | file, r=3, on the **best disk** | Puts are larger and must survive | + +Try `ZAPIER_EVENTS` as memory store in a maintenance window and re-run only the JS + ping/flood steps. If ping stays ~0.3 ms and durable events still ack at a higher rate, keep it; if a CT restart drops in-flight waiters, revert. + +### 5.3 Give JetStream real disks + +Today r=3 on three LXC guests on **one Proxmox host** is three files, one failure domain. + +- Bind-mount a distinct SSD/NVMe (or ZFS dataset with its own vdev) into each nats LXC `store_dir`. +- Set `sync: always` only on archive if you need it; default sync is often enough for jobs and is faster. Measure. +- Do not put JetStream `store_dir` on the same busy rootfs as Forgejo/Caddy if we can avoid it. +- When moving to three metal boxes: same configs, private NIC, one disk (or mirror) **per node**. That is the first change that makes r=3 mean “two boxes can die.” + +### 5.4 Isolate the nats CTs from the rest of NS1 + +Host load on this box is often already several. Pin: + +- `nats-a/b/c`: dedicated cores, no steal from keep/fleet Node processes. +- Memory high enough that file-backed streams stay cache-hot for the working set. +- `cpuunits` / cpuset in `pct config` so a Zapier-facing Node GC pause does not stall fsync. + +Re-run this study after pinning; H1/H2 should move more than ping. + +### 5.5 Consumer and mailbox tuning (delay H4) + +Flood delay is backlog / consume_rate. Fine-tune the **waiters**, not the broker RTT. + +- `jobs.events` and `webhooks.deliver`: raise `max_ack_pending` so a slow HTTPS hook does not stall the whole consumer; cap it so a poison message cannot unbounded-buffer RAM. +- Pull consumers: larger batch, shorter `expires`, more pullers horizontally (fleet replica floors) instead of one fat subscriber. +- Middleware should **not** flood-publish then wait; it already does per-job publish. Keep that. The flood test is the outage profile when a consumer is stopped. +- Alert on **consumer lag** (pending + ack pending) from JetStream, not on ping RTT. + +### 5.6 Publisher-side batching in middleware + +A timestamp job is one small JSON. 16k msgs/s is ample. Still: + +- Avoid per-byte publishes; one message per job/event. +- Reuse NATS connections (connection churn showed up as publisher spread in the core 4p/8p runs). +- Idempotent `msg id` / duplicate window sized to Verae retry window, not default-only. + +### 5.7 nats-server knobs worth measuring (A/B with this script) + +| Knob | Why try it | +|------|------------| +| `max_payload` | Keep default unless archive puts grow | +| `write_deadline` | Slow consumer protection for webhooks | +| `max_pending` | Bound memory on a stuck Zapier hook | +| `max_connections` | Fleet workers + keep + middleware | +| JetStream `max_file_store` / `max_memory_store` | Prevent one stream from filling the CT | +| `max_outstanding_catchup` | Replica restart after a nats-c blip | +| GOMAXPROCS = LXC cores | Do not overthread a 2-core CT | + +Change **one** knob, re-run `study-on-ns1.sh`, compare JetStream 1p 128 B and ping p99. + +### 5.8 Network + +- Keep NATS off `vmbr0`. No change. +- When on metal: dedicated NIC or VLAN for cluster `:6222` vs client `:4222` if possible (replication vs client load). +- Check virtio queue counts on the LXC nics if core 1 KiB byte rate plateaus. + +### 5.9 Security cost (when nkeys/mTLS flip) + +`verae-nats-accounts` is still a sketch. Enabling accounts will add CPU on publish. Budget: re-run this exact study **after** creds are in every `NATS_URL`, and accept a drop on both core and JS. Do not flip without that measurement. + +### 5.10 Operational fine-tuning (lag, not peak msgs/s) + +1. Scrape `varz` / `jsz` from the host over `vmbr1` (not public). Monitor loopback `:8222` is invisible to Prometheus on NS1 unless we add a host-side proxy on `10.10.10.21:8222` bound only to `vmbr1`. +2. Keep replica floors for webhook-deliver and job-poller — they are the flood defense. +3. Backup/restore drill of JetStream **during idle**, then a short JS 1p run to see catchup cost. +4. A 15–30 minute soak (not in this ladder) for page cache and compaction; add that as a third study when disks are dedicated. + +### 5.11 What not to tune + +- Do not chase core 8p8s aggregate. It is fan-out on a lab bridge. +- Do not treat flood 400 ms as “cluster RTT.” Fix consumers. +- Do not load-test on `ZAPIER_*` streams. +- Do not bind client NATS to `0.0.0.0` on `vmbr0`. + +### 5.12 Recommended next experiments (same method, one change each) + +1. CPU pin nats-a/b/c → re-run JS 1p + ping. +2. `ZAPIER_EVENTS`-shaped memory stream vs file (throwaway stream, same flags as this JS ladder). +3. Distinct `store_dir` disks per node. +4. nkeys on, same ladder. +5. Three hardware boxes, same `cluster.env` IPs updated. + +Each experiment should produce a new `results//` on NS1 and a new progress-repo report so we can diff H1–H5 instead of arguing from memory. diff --git a/scripts/status.sh b/scripts/status.sh new file mode 100755 index 0000000..1306656 --- /dev/null +++ b/scripts/status.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# shellcheck disable=SC1091 +. "$ROOT/cluster.env" +export PATH="/usr/sbin:/usr/bin:/bin:$PATH" +printf '%s\n' "$NODES" | awk 'NF==3 {print}' | while read -r vmid name ip; do + st="$(sudo pct status "$vmid" 2>/dev/null || echo missing)" + js="$(sudo pct exec "$vmid" -- curl -fsS --max-time 2 http://127.0.0.1:8222/varz 2>/dev/null || echo '{}')" + echo "$vmid $name $ip $st" + python3 -c " +import json,sys +try: + d=json.loads(sys.argv[1]) +except Exception: + print(' nats down') + raise SystemExit +print(' server_name', d.get('server_name'), 'cluster', (d.get('cluster') or {}).get('name'), 'routes', len((d.get('cluster') or {}).get('urls') or d.get('connect_urls') or [])) +print(' jetstream', bool(d.get('jetstream')), 'port', d.get('port'), 'host', d.get('host')) +" "$js" 2>/dev/null || echo " nats down" +done +echo "host loopback still: $(ss -lnt | grep '127.0.0.1:4222' && echo up || echo down)" diff --git a/scripts/study-on-ns1.sh b/scripts/study-on-ns1.sh new file mode 100755 index 0000000..4eec5cc --- /dev/null +++ b/scripts/study-on-ns1.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# Full message-speed study. Must run ON NS1.GEORGELAMBERT.ORG (70.88.205.138). +# Orchestration, nats bench (via pct into LXC 510), charts, HTML, and PDF all +# happen on this host. The laptop is not in the measurement path. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +export PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin:$PATH" + +HOST="$(hostname -f 2>/dev/null || hostname)" +case "$HOST" in + NS1.GEORGELAMBERT.ORG|NS1|ns1.georgelambert.org|ns1) ;; + *) + echo "refusing: study-on-ns1.sh must run on NS1.GEORGELAMBERT.ORG (70.88.205.138), got '$HOST'" >&2 + exit 1 + ;; +esac + +# shellcheck disable=SC1091 +. "$ROOT/client.env" +CLIENT_VMID="${CLIENT_VMID:-510}" +STAMP="$(date -u +%Y%m%dT%H%M%SZ)" +OUT="${BENCH_OUT:-$ROOT/results/$STAMP}" +mkdir -p "$OUT" + +dump_env() { + local tag="$1" + local f="$OUT/host-$tag.txt" + { + echo "execution_host=NS1.GEORGELAMBERT.ORG" + echo "execution_ip=70.88.205.138" + echo "hostname=$(hostname)" + echo "utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" + echo "whoami=$(whoami)" + echo "pwd=$(pwd)" + echo "uname=$(uname -a)" + echo "nproc=$(nproc)" + echo "loadavg=$(cat /proc/loadavg)" + echo "client_vmid=$CLIENT_VMID" + echo "nats_url=$NATS_URL" + echo "--- free ---" + free -h + echo "--- pct list ---" + sudo pct list + for v in 510 511 512 513; do + echo "--- pct config $v ---" + sudo pct config "$v" | grep -E '^(hostname|cores|memory|swap|rootfs|mp|net)' || true + done + } >"$f" + python3 - "$OUT" "$tag" <<'PY' +import json, sys, urllib.request +from pathlib import Path +out, tag = Path(sys.argv[1]), sys.argv[2] +nodes = [] +for vmid, name in (("511", "nats-a"), ("512", "nats-b"), ("513", "nats-c")): + raw = "" + try: + import subprocess + raw = subprocess.check_output( + ["sudo", "pct", "exec", vmid, "--", "curl", "-fsS", "--max-time", "3", "http://127.0.0.1:8222/varz"], + text=True, + ) + d = json.loads(raw) + nodes.append({ + "vmid": vmid, + "name": name, + "server_name": d.get("server_name"), + "host": d.get("host"), + "port": d.get("port"), + "connections": d.get("connections"), + "in_msgs": d.get("in_msgs"), + "out_msgs": d.get("out_msgs"), + "in_bytes": d.get("in_bytes"), + "out_bytes": d.get("out_bytes"), + "cpu": d.get("cpu"), + "cores": d.get("cores"), + "mem": d.get("mem"), + "jetstream": bool(d.get("jetstream")), + }) + except Exception as e: + nodes.append({"vmid": vmid, "name": name, "error": str(e)}) +(out / f"varz-{tag}.json").write_text(json.dumps(nodes, indent=2) + "\n", encoding="utf-8") +PY +} + +echo "NS1 study $STAMP out=$OUT" +dump_env before +BENCH_OUT="$OUT" CLIENT_VMID="$CLIENT_VMID" bash "$ROOT/scripts/bench.sh" +dump_env after +python3 "$ROOT/scripts/build-ns1-study-report.py" "$OUT" +echo "NS1 study complete $OUT" +ls -la "$OUT"/nats-cluster-bench-ns1.* "$OUT"/charts 2>/dev/null || ls -la "$OUT" diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..9e02ae8 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# Local syntax check always. Live cluster check when pct is present. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +bash -n "$ROOT/scripts/lib-ct.sh" +bash -n "$ROOT/scripts/create-cluster.sh" +bash -n "$ROOT/scripts/status.sh" +bash -n "$ROOT/scripts/bench.sh" +bash -n "$ROOT/scripts/study-on-ns1.sh" +grep -q 'host: {{IP}}' "$ROOT/conf/nats.conf.tmpl" +grep -qv '0.0.0.0' "$ROOT/conf/nats.conf.tmpl" +if [[ ! -d /etc/pve/nodes ]]; then + echo "OK (syntax; not on Proxmox)" + exit 0 +fi +# shellcheck disable=SC1091 +. "$ROOT/cluster.env" +export PATH="/usr/sbin:/usr/bin:/bin:$PATH" +mapfile -t rows < <(printf '%s\n' "$NODES" | awk 'NF==3 {print}') +ready=0 +for row in "${rows[@]}"; do + # shellcheck disable=SC2086 + set -- $row + vmid=$1 name=$2 ip=$3 + js="$(sudo pct exec "$vmid" -- curl -fsS --max-time 3 http://127.0.0.1:8222/varz 2>/dev/null || true)" + echo "$js" | grep -q '"jetstream"' && ready=$((ready + 1)) || echo "not ready $name" +done +[[ $ready -eq 3 ]] || { echo "cluster not fully up ($ready/3)" >&2; exit 1; } + +# nats CLI on first node +first="$(echo "${rows[0]}" | awk '{print $1}')" +sudo pct exec "$first" -- bash -lc ' +set -e +export DEBIAN_FRONTEND=noninteractive +if [[ ! -x /usr/local/bin/nats ]]; then + apt-get install -y --no-install-recommends unzip >/dev/null + curl -fsSL https://github.com/nats-io/natscli/releases/download/v0.1.6/nats-0.1.6-linux-amd64.zip -o /tmp/natscli.zip + rm -rf /tmp/natscli && mkdir -p /tmp/natscli + unzip -o /tmp/natscli.zip -d /tmp/natscli >/dev/null + BIN=$(find /tmp/natscli /tmp -maxdepth 3 -type f -name nats | head -1) + test -n "$BIN" + install -m 0755 "$BIN" /usr/local/bin/nats +fi +IP=$(hostname -I | awk "{print \$1}") +export NATS_URL=nats://$IP:4222 +export PATH=/usr/local/bin:/usr/bin:/bin +nats stream rm VERAE_PX_TEST --force >/dev/null 2>&1 || true +nats stream add VERAE_PX_TEST --subjects="verae.px.test" --replicas=3 --storage=file --retention=limits --discard=old --max-msgs=-1 --max-bytes=-1 --max-age=1h --dupe-window=2m --defaults +nats pub verae.px.test cluster-ok +nats stream info VERAE_PX_TEST +' +echo "OK live cluster (3/3 + replicas=3 stream)" diff --git a/systemd/nats-server.service b/systemd/nats-server.service new file mode 100644 index 0000000..86e5076 --- /dev/null +++ b/systemd/nats-server.service @@ -0,0 +1,16 @@ +[Unit] +Description=NATS JetStream (Verae cluster node) +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=nats +Group=nats +ExecStart=/usr/local/bin/nats-server -c /etc/nats/nats.conf +LimitNOFILE=65536 +Restart=on-failure +RestartSec=2 + +[Install] +WantedBy=multi-user.target