master-zapier-plan-draft/packages/overview/03-nats-cluster.md
George Lambert 1b199ca4d4
Some checks are pending
offline / test (push) Waiting to run
Separate Zapier, web, API, and leaf access planes with NATS authz
Zapier is one ingress. Direct web, customer API, and S2S leaf nodes are their own services. Every hop to an internal subject must pass verae.access.authz.check (default deny by plane).
2026-09-11 16:05:05 -04:00

2.2 KiB
Raw Permalink Blame History

3. Central Verae NATS.IO 3-server cluster

All durable messaging for this product is NATS JetStream, not Zapier queues and not a public TCP API.

Cluster

Three nats-server -js nodes form the Verae cluster (routes between them, JetStream replication). Clients (middleware, poller, aggregator, WORM, tree nodes, account-balance, zappier-edge billing, CS/sales/accounting, and any new process cloned from verae-nats-process) connect with a cluster URL list, for example:

nats://127.0.0.1:4222,nats://127.0.0.1:4223,nats://127.0.0.1:4224

On a given machine the listener stays on loopback (or a private interface). Operators reach it with scripts/nats-tunnel.sh / ssh -L 14222:127.0.0.1:4222. Do not bind 4222 on 0.0.0.0 without auth.

Todays NS1 box (NS1.GEORGELAMBERT.ORG, 70.88.205.138) already runs JetStream on 127.0.0.1:4222. The target is three clustered nodes so losing one server does not lose the stream. Fleet SSH hosts (ns1, later lan-134) run workers, not extra public NATS listeners.

NATS cluster

Who may connect

Allowed Forbidden
access-authz, access-leaf (after token), middleware, fleet workers, WORM, tree, account-balance, access planes, CS/sales Zapier cloud, customer browsers (HTTPS to access-web / access-api / access-zapier only)

Address families already in use

Address Kind Notes
verae.zapier.jobs.watch work queue poller
verae.zapier.jobs.events events wait + webhooks
verae.zapier.webhooks.deliver work queue HTTPS to Zapier REST Hook
verae.zapier.usage optional metering
verae.billing.statement.get request-reply portal, CS, sales, admin
verae.billing.balance.adjust request-reply CS credits, portal reload
verae.billing.usage.recorded pub zappier-edge meter
verae.archive.put JetStream splitter / merkle builder
verae.archive.query broadcast (no queue group) every WORM and tree node
verae.archive.reply.<correlationId> replies only on bloom hit

New functions get new verae.<area>.<resource>.<action> addresses — see 06-address-routing.md.