The product is the join
Customers submit outcomes: budget, deadline, workload signals, continuity mode. They do not pick a machine SKU, a cloud catalog row, or a recovery plan. Nodus derives provider, route, reservation, execution, and portable progress from that brief.
That derivation is not one clever service. It is five boundaries with hard contracts between them:
- Market: continuous normalized capacity book (quant inventory, not a static catalog).
- Routing: pure optimizer over snapshots (dispatch graph, not a provider SDK call).
- Bidding: auditable capacity commitment (campaign budget / auction, not hope).
- Execution: desired vs observed generations (controller, not “VM created”).
- Checkpointing: verified portable progress (GKE-style durability, not local disk).
Anyone can bolt five subsystems onto a slide. The engineering is making reclaim re-enter the same path without inventing a sixth one.
Happy path, then the loop
Authority, on purpose
Three durable systems, intentionally separate:
- PostgreSQL: business truth: workload, route, lease, generation fence, latest-manifest CAS, ledger.
- Temporal: orchestration progress: timers, retries, waits, recovery saga. Never customer-visible state.
- Kafka: published facts / transport. Never assumed atomic with DB or provider side effects.
Every customer-visible transition writes Postgres state and an outbox row in one transaction. Consumers are idempotent and at-least-once. Generation fencing and latest-manifest compare-and-set live in Postgres (plus generation-scoped storage credentials), never Redis locks, never a separate lock service.
Control-plane services are Go on EKS. Customer SDKs are Python and Go. Object storage holds checkpoints and artifacts. Redis is for ephemeral limits only.
Invariants that force the join
- Router is pure. Reads immutable snapshots; returns a plan. Never calls providers. Reservation is a separate, auditable side effect.
- Cost means completion cost. Routing and bidding optimize expected cost to finish (run plus expected recovery), not minimum hourly price.
- Completed means durable. Never report
completeduntil the final artifact manifest is verified and the CAS pointer advances (when the continuity mode requires it). - At most one writer. Fence before replace. Old runners lose CAS authority immediately.
What this series covers
Each following note opens one boundary: what we took from an existing architecture, what we changed for GPU reclaim, and what we are still building.
- 002 · Market: the capacity book
- 003 · Routing: pure scoring and fallback graphs
- 004 · Bidding: ceilings, leases, financial truth
- 005 · Execution: reconciler and runner
- 006 · Checkpointing: manifests and CAS
Next after the five: fencing and the reclaim saga, then multi-stage DAGs with manifest-only handoffs.
What we are not claiming yet
Design and pilot are not the same maturity. External wholesale adapters, parallel hedging, and fully automatic signed reclaim are phase-gated. We publish the contracts now so every shipping decision is made under the assumption that reclaim, settlement, and replay will exist later. You cannot retrofit those boundaries. You can only plan for them.