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.

DBX control plane above three isolated tenant engines HTTP port 8000 and RESP port 6380 sit on a shared control plane. Tenant A, Tenant B, and Tenant N sit below as separate boxes, each containing KV, HNSW SQ8 mmap, WAL, and snapshots. CONTROL PLANE HTTP :8000 · tenant lifecycle, scoped credentials, routing RESP ingress :6380 · AUTH tenant:key_id secret, then route TENANT A KV + TTL HNSW (SQ8, mmap) Own WAL Own snapshots TENANT B KV + TTL HNSW (SQ8, mmap) Own WAL Own snapshots TENANT N KV + TTL HNSW (SQ8, mmap) Own WAL Own snapshots

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.

1 · client

AUTH acme:key_id secret on :6380

2 · ingress

Verify hash, re-resolve on every command

3 · acme only

WAL append, ack locally, apply KV / HNSW

4 · replica

Optional async stream. No extra write RTT.

  1. 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.

  2. 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.

  3. 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.

WAL v2

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.

.rdb

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.

SQ8 mmap

Vector payload. 8-bit scalar-quantized rows, generation tombstones, metadata, and a rebuildable checksummed HNSW cache live as files in the tenant directory.

HNSW

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.

Backup

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.

Numbers, with hardware attached.