System architecture
Components and ownership
| Component |
Owns |
Does not own |
| MongoDB |
Strategy and market-data deployments, versioned configuration, and provenance |
Live process state or market data |
dyson-market-data |
Loading one feed bundle and supervising its publisher processes |
Venue parsing or strategy decisions |
| Imported venue publishers |
Venue connections, native feed handling, archival output, and optional live NATS publication |
Strategy lifecycle |
| NATS |
Live market data, strategy commands, status, and runtime events |
Durable strategy configuration or analytics |
| Strategy binary |
Concrete strategy bootstrap, subjects, Kuru connection, and post-trade wiring |
Shared lifecycle machinery |
dyson-runtime |
Lifecycle, serialized dispatch, NATS transport, health, metrics, and shutdown |
Strategy policy or venue protocol details |
| Algo-trading submodule |
Signals, actors, strategy engine, canonical actions, and feed primitives |
Dyson process lifecycle or Kubernetes state |
| Venue adapters |
Packet normalization and venue execution (Kuru orderbook or vault, Lighter API/WS) |
Strategy policy |
| InfluxDB |
Structured strategy, order, fill, and health projections |
Runtime commands or configuration |
| Control panel |
One-deployment monitoring and the Start action |
Runtime truth or general lifecycle administration |
| Strategy API |
Liveness, MongoDB-backed readiness, and OpenAPI |
Strategy CRUD or lifecycle control at this revision |
dyson-deployment |
Kubernetes and platform desired state |
Application behavior or image builds |
Market-data flow
flowchart TD
CFG["MongoDB<br/>feed deployment + version"]
SUP["dyson-market-data supervisor"]
PUB["Imported venue publisher processes<br/>one per venue"]
ARC["Local archive"]
NATS["NATS live publication<br/>(optional)"]
CFG --> SUP --> PUB
PUB --> ARC
PUB --> NATS
classDef store fill:#2e7d32,stroke:#1b5e20,color:#fff
class CFG,ARC,NATS store
A feed bundle may contain multiple publishers, with one publisher per venue and
multiple markets inside that publisher's native configuration. If one child
publisher exits, the supervisor stops the bundle rather than leaving a partial
feed set running.
Strategy flow
flowchart TD
CFG["MongoDB<br/>strategy deployment + version"]
BIN["Strategy binary"]
RT["dyson-runtime<br/>serialized dispatch"]
IN["NATS<br/>market data + commands"]
ENG["Algo-trading engine<br/>or custom strategy backend"]
ADP["Venue adapters"]
VEN["Venues"]
OUT["NATS<br/>status and events"]
INF["InfluxDB<br/>strategy projections"]
CFG --> BIN --> RT
IN --> RT
RT --> ENG --> ADP --> VEN
RT --> OUT
ENG --> INF
classDef store fill:#2e7d32,stroke:#1b5e20,color:#fff
class CFG,IN,OUT,INF store
Each strategy is a separate process. The runtime reconciles desired state,
processes one input at a time, and keeps venue-specific translation outside the
shared lifecycle core. A multi-venue strategy fans the adapter stage out across
legs — see Multi-venue strategy.
Operator flow
flowchart LR
BR["Browser"] --> CP["Control-panel server"]
CP --> NATS["NATS"]
CP --> INF["InfluxDB"]
CP --> KWS["Kuru public WebSocket"]
API["Strategy API"] --> MDB["MongoDB<br/>readiness check"]
classDef store fill:#2e7d32,stroke:#1b5e20,color:#fff
class NATS,INF,KWS,MDB store
The control panel does not call the Strategy API. The two are separate operator
surfaces with different current responsibilities.
Current boundaries
- Live execution covers Kuru and, for the multi-venue strategy, Lighter;
market-data publishers cover additional venues.
- The control panel publishes Start only, even though the runtime supports a
wider lifecycle command set.
- NATS is the live bus, not a replacement for MongoDB configuration or InfluxDB
projections.
- Application behavior changes in
dyson; release and cluster state change in
dyson-deployment.