Skip to content

Deployment topologies

DioscHub runs in one of two shapes. A single instance is the default and covers most deployments. A cluster of identical instances is for high availability and horizontal scale, and is an Enterprise capability. This page describes both, what each requires, and where DioscHub sits relative to its dependencies.

One DioscHub container and one Postgres database. Nothing else is required — no Redis, no coordination layer, no second service. This is the baseline, and it is what you get unless you explicitly turn cluster mode on.

Single-instance DioscHub deployment: one app instance serving on port 80, linked to PostgreSQL (all durable state) and a file store (local volume or object storage), with outbound connections to the LLM provider and MCP servers. No Redis required.

Durable state lives in Postgres and in the file store. If you use the local file store, its directory is a volume you must keep across restarts (see Install & run). A single instance handles conversation state, approvals, and history entirely through Postgres, so a restart loses nothing that was committed.

The System → Cluster tab: a live topology showing the hub instance (with uptime and heartbeat, marked as serving this request), the Redis backplane, and the shared PostgreSQL.

The System → Cluster tab renders this topology live — every instance heartbeats every 15 seconds, and the shared Redis and Postgres show their connection state.

Reach for a cluster when you need high availability (no single instance whose loss takes DioscHub offline) or more throughput than one instance provides. Running two or more instances is supported only in cluster mode — starting a second instance without it would give each its own private coordination state, and users bound to one instance would not be reachable from another.

Cluster mode is an Enterprise capability, gated on the multiInstanceFederation license. Without that license, turning cluster mode on is a boot-time failure — the instance refuses to start rather than run half-coordinated.

A cluster is N identical instances behind your load balancer, sharing one Redis and one Postgres:

Enterprise cluster deployment: a load balancer routes to N identical DioscHub instances (each on port 80). All instances share one PostgreSQL (source of truth) and one Redis (coordination), and a shared object store (S3/GCS/Azure — required); each instance's outbound calls go to the LLM provider and MCP servers. Local storage is not allowed and every instance shares the same six secrets.
  • Postgres holds the truth — every durable record, including conversation state and approvals.
  • Redis holds coordination only — user-to-instance bindings, cross-instance delivery, rate-limit counters, and cache-invalidation signals. It carries no durable state; losing it costs coordination, not data.

There is no primary or master instance and no requirement for sticky sessions. Any instance can serve any request; the instances stay consistent by sharing Redis and Postgres, not by electing a leader. When an admin changes configuration on one instance — a Toolset, an Assistant, a system setting — the change propagates to every instance so they all serve the same configuration.

Every one of these is checked at boot. If any is missing, the instance refuses to start.

What works single-instance, and what needs a cluster

Section titled “What works single-instance, and what needs a cluster”
ConcernSingle instanceCluster
Conversation state, history, approvalsPostgres — already multi-instance safeSame, shared across instances
File storageLocal volume is fineMust be shared object storage (S3/GCS/Azure)
Cross-instance message deliveryNot neededRedis backplane
Configuration change propagationLocalMirrored to every instance over Redis
Scheduled jobsRun locallyRun once cluster-wide via a distributed lock
Rate-limit countersIn-processShared in Redis (see below)

In a single instance, per-user and per-IP rate limits are counted in process. In a cluster, those counters move to Redis, so a user’s limit holds no matter which instance serves each request. This is another reason multi-instance is supported only in cluster mode: without the shared counter, each extra instance would multiply a user’s effective allowance.

  • Multi-region. A cluster is one region, one Redis, one Postgres. There is no geo-distribution or cross-region federation despite the license flag’s name.
  • In-flight turn recovery after a crash. A turn survives connection loss on a live instance — the user reconnects and resumes. A full instance crash mid-turn loses that turn’s output, and the user re-asks. DioscHub does not migrate an in-progress turn to another instance.
  • Database and Redis high availability themselves. Bring managed, highly-available Postgres and Redis. DioscHub coordinates across its own instances; it does not make your datastores redundant.

Every instance talks to Postgres (always) and Redis (cluster only). Beyond those, its outbound calls go to the destinations you configure — your LLM provider, your MCP servers, and your object store if you use one. DioscHub does not browse the web or open arbitrary outbound connections on its own. Keeping outbound access narrow at the network layer is part of the production hardening you own.