Control plane and data plane
Isolated engines. One orchestrator.
The orchestrator owns tenant lifecycle. Each tenant owns its data. There is no shared keyspace underneath the labels.
The machine
HTTP control plane on :8000 — tenant lifecycle, scoped credentials, routing, backups. Authenticated RESP ingress on :6380. Below that, one engine per customer.
They do not share a pool. Air gap is the point.
How a request flows
Watch the hop. AUTH binds the connection to one engine. The others never see the command.
AUTH acme:key_id secret on :6380
Verify hash, re-resolve on every command
WAL append, ack locally, apply KV / HNSW
Optional async stream. No extra write RTT.
-
RESP ingress :6380
Require
AUTH tenantID:keyID secret. Verify the persistent scoped credential. Route to that tenant’s loopback listener. Re-resolve the key on every command so revocation is immediate. -
Tenant server (loopback)
Enforce role and every affected-key pattern. Append one WAL v2 state-image transaction and ack locally. Apply to the KV engine or the vector engine. Return a RESP response.
-
Replicas, if provisioned
Optional async WAL replicas receive frames on a side channel. No extra write RTT. The primary acks locally; replica lag is possible. Data-plane Raft and cluster mode fail closed.
WAL, mmap, HNSW
Two-layer persistence. Vectors are not smuggled into the KV snapshot.
Durability for mutations. Length-framed, sequenced, CRC-protected state-image transactions are appended before apply. always fsyncs before acknowledgement; everysec defines a one-second loss window.
KV checkpoint only. A sequence-bearing KV snapshot is atomically installed before covered WAL segments are removed. Vector entries are skipped — they do not live in the RDB.
Vector payload. 8-bit scalar-quantized rows, generation tombstones, metadata, and a rebuildable checksummed HNSW cache live as files in the tenant directory.
ANN for a working set. Sized for per-tenant corpora (certified at 100k vectors/tenant), not a billion-vector shared index. Asymmetric distance at query time.
One customer, one archive. A maintenance lock produces a manifest with SHA-256 checksums for both KV and vector surfaces. Restore validates into a sibling directory and swaps with rollback. Export/import are the same artifact. Hibernate stops the process and keeps the directory.
Do not read “backup archive” as “atomic KV+vector point-in-time snapshot.” The archive is a consistent cut of the tenant directory under a lock. The periodic .rdb is still KV only.