Servers
The server lens answers "where does this physically run?" Kraite's seven-box Hetzner topology is deliberately split: one stateful core for database and Redis, one ingestion brain that also serves the public web vhosts, four interchangeable trading workers split by Binance per-IP weight, and one isolated worker for indicator throttling. Each box has a well-defined role; any one can be lost without dragging down the rest of the system.
Architecture overview
The full six-box topology. Topology diagram, role split, failure semantics for each box, and the cross-references into per-server chapters.
Hyperion (database + Redis)
The stateful core. MySQL 8.4.8 plus Redis 8.0.5 on a dedicated AMD-EPYC box. Tuned for the write-heavy step-dispatcher workload — 10 G buffer pool, 5000 IO capacity, non-blocking backups.
Athena (ingestion + web)
The brain and the web edge in one box. Scheduler, dispatch daemon, both WebSocket daemons, the user-data Horizon supervisor, plus nginx vhosts for admin / kraite.com / syntax.
Eos + Iris + Nyx + Hemera (workers)
Four interchangeable trading workers — Horizon consumers competing on the same positions / orders / priority queues. No per-account-to-box binding by design. Four distinct public IPs spread Binance API call load naturally across workers as dispatched jobs distribute.
Tyche (indicators + cronjobs)
Isolated worker. Runs the 10-process indicator pool plus 3-process cronjobs pool. Kept off the trading boxes so TAAPI rate-limit waits never starve real-time position / order processing.
Cross-lens entry points
- Subsystems — what runs on each box (the daemon on athena, the workers on eos / iris / nyx).
- Business domains — what each box manipulates (positions, orders, indicators).
- Lifecycles — how a flow traverses the topology end-to-end.