SYSTEM ARCHITECTURE · REVISION 1.2
Separated control, storage, and transport boundaries.
NBS coordinates operating intent without placing bulk object traffic in the interactive management path. Identity, API, persistence, origin, and gateway responsibilities are separated so that regional impairment does not silently expand control-plane authority.
1. Architecture principles
Control is not payload
The browser and Control API carry metadata and requested state, never bulk object payloads.
Private service bindings
Application and origin services bind to loopback addresses and are reached only through the existing gateway path.
Server-side truth
Identity, role, session, CSRF, persistence, and audit outcomes are determined by the server, not client state.
Recoverable release
Deployment is preceded by application and database backup and followed by health, service, port, interface, and firewall verification.
The architecture favors small, inspectable components over an expanded service mesh for the current control-plane scope. Each additional runtime dependency must justify its operational and security cost.
2. Logical components
| Component | Responsibility | Trust boundary | Primary controls |
|---|---|---|---|
| HTTPS gateway | Public transport ownership and forwarding of ordinary HTTPS requests | Public network edge | Existing gateway policy and port ownership |
| Nginx origin | TLS origin, static content, security headers, error mapping, API proxy | Loopback 127.0.0.1:8443 | TLS 1.3, CSP, HSTS, bounded proxy routes |
| Identity gateway | Password, MFA, recovery, session, CSRF, role resolution | Control API process | PBKDF2, rate limits, opaque cookies, constant-time checks |
| Control API | Status, resources, settings, audited operations, structured errors | Loopback 127.0.0.1:8090 | Same-origin checks, schema validation, request IDs |
| Control database | Sessions, audit events, resource requests, settings, recovery cases | Local application data directory | Restricted filesystem ownership, WAL, bounded schema |
| Regional data plane | Storage, replication, pipeline execution, bulk transfer | Independent operating domain | Service identities, regional policy, worker safeguards |
The console presents the current model and accepted requests. It is not the execution engine for regional movement. This prevents a browser session from becoming a bulk-data transport channel.
3. Authenticated request flow
Browser
│ HTTPS request
▼
Public gateway :443
│ ordinary web traffic
▼
Nginx origin 127.0.0.1:8443
├── /assets, /docs, /security ... → static files
└── /api/* → Control API 127.0.0.1:8090
│
├── validate origin and JSON body
├── resolve session and role
├── verify CSRF for mutation
├── persist requested state
└── append audit event + request IDAuthentication
The password endpoint verifies the assigned digest. A privileged identity receives a short-lived MFA challenge. Only after verification does the server issue the opaque session cookie and CSRF secret.
Read path
Static documentation is served directly by Nginx. Authenticated API reads resolve the session, read the bounded control record set, and return JSON with a request identifier. The audit endpoint returns at most the most recent one hundred events per request.
Mutation path
A mutation must pass origin, session, CSRF, role, schema, and domain validation. The operation is persisted before the response is returned. Accepted actions receive a generated resource or request identifier; denied operations do not alter requested state.
4. Persistence model
The control database uses SQLite in write-ahead logging mode. This is appropriate for the current single-node control API because it provides transactional state, durable audit records, consistent backup, and a limited operational footprint without an additional public database service.
| Table | Key data | Write path | Exposure |
|---|---|---|---|
sessions | Token hash, user ID, CSRF secret, timestamps | Authentication and sign-out | Never returned as a list |
audit_events | Actor, action, resource, outcome, request ID, source digest | Authentication and control operations | Authenticated bounded read |
resources | Type, creator, validated JSON data, state, timestamp | Resource request API | Authenticated list |
user_settings | User-scoped control preferences | Settings API | Only current session |
recovery_requests | Case ID, asserted username, timestamp, source digest | Recovery API | Not exposed through public API |
Backups use the SQLite backup interface to produce a consistent database copy before release publication. Application files and origin configuration are preserved in the same versioned recovery package.
5. Deployment topology
The application runs as a dedicated system service under a non-login service account. Static assets are owned by root and served read-only. The database directory is restricted to the application identity. Nginx forwards only the API prefix to the application and serves known public paths from the static release directory.
| Listener | Binding | Owner | Purpose |
|---|---|---|---|
| Public HTTPS transport | TCP 443 | Existing gateway service | Public entry and forwarding |
| Origin HTTPS | 127.0.0.1:8443 | Nginx | Static site and API reverse proxy |
| Control API | 127.0.0.1:8090 | NBS application | Authentication and control operations |
| HTTP redirect | TCP 80 | Nginx | Permanent redirect to HTTPS |
A release must not move the NBS application onto a public port or change ownership of existing gateway transports. Post-release verification checks processes and listeners explicitly.
6. Failure isolation
Control API unavailable
Static documentation and origin health can remain available while authenticated operations return a service error. Regional data movement continues according to previously accepted state; the UI does not claim that a failed submission was accepted.
Database unavailable
Session creation, recovery tracking, resource mutation, and audit reads fail closed. The service does not fall back to browser-only identity or unrecorded change execution.
Regional impairment
A regional storage or transfer condition is represented through health, alerts, incidents, and changes. It does not invalidate the identity boundary or grant direct access to regional payloads.
Origin failure
The gateway cannot complete ordinary HTTPS forwarding when the local origin is unavailable. Recovery uses the pre-release application and origin backup, followed by the same listener and firewall invariants.
Client interruption
Closing or refreshing the browser does not delete an accepted resource request. Persisted resources and user settings are loaded again after session restoration.
7. Dependency registry
The Integrations page is a registry of connector aliases and operating metadata. It is designed to expose enough information for operators to identify a dependency without publishing secret material. Provider documentation links are external technical references.
| Class | Registered purpose | Browser-visible data | Excluded data |
|---|---|---|---|
| Object storage | Archive and object lifecycle workflows | Connector alias, endpoint alias, status | Tenant, namespace, signing secret |
| Database | Control or snapshot workflow integration | Connector alias, region alias, status | Connection string, credentials, wallet |
| Observability | Telemetry collection and error correlation | Collector or project alias, status | Ingest token, private endpoint |
| Event streaming | Operational event transport | Cluster alias and status | Broker credentials and internal addresses |
A registry state is not third-party assurance. Assurance claims and limitations are documented in the Trust Center.
8. Capacity and service objectives
Control-plane views distinguish an objective from a measurement. The published service objective for the interactive control plane is 99.95% monthly availability. Regional storage, replication, and worker objectives are displayed in operating views with their own scopes.
Capacity forecasts use current allocation and observed growth to estimate headroom. Forecasts are planning signals, not guaranteed exhaustion dates. Operators should investigate growth-rate changes, protection overhead, maintenance reserve, and regional imbalance before scheduling capacity work.
| Signal | Use | Not sufficient for |
|---|---|---|
| Request throughput | Traffic trend and anomaly context | Per-tenant billing |
| Ingress rate | Network and storage planning | Logical retention calculation |
| Logical and raw capacity | Protection overhead and headroom | Guaranteed future allocation |
| Replication objective | Backlog and durability response | Proof of object-level completion |
9. Architecture decisions
Keep the Control API on a loopback-only listener and publish it exclusively through the hardened HTTPS origin.
Use server-side opaque sessions and CSRF verification instead of placing authorization state in browser-readable tokens.
Use SQLite WAL for the single-node control record set and the SQLite backup API for consistent release recovery.
Separate interactive control metadata from bulk object transfer and regional worker execution.
Operational