6.1 KiB
6.1 KiB
Software Defined Laboratory (SDL)
| Attribute | Value |
|---|---|
| Author | John Haverlack |
| Copyright | 2026 John Haverlack |
| License | MIT |
| Version | 0.3.2 |
| Date | 2026-01-31 |
Overview
The Software Defined Laboratory (SDL) project provides a generalized distributed computing platform for managing parallel computational workflows across a cluster of distributed nodes. SDL is a minimalistic High Performance Compute (HPC) platform focused on extreme minimizaton of technical debt associated configuration, deployability, and maintenance of the cluster.
Roadmap
Status
- sdl-mgr MQTT Broker
- sdl-mgr UDP Beacon
- sdl-mgr Web UI MQTT WebSocket Pub/Sub
- sdl-wkr UDP Listener
Prioritized Tasks
MVP - Minimum Viable Product Task List
- SDL_ID Node ID
- Version Updater Script
- Deploy sld-mgr to $SDL_HOME/sdl-mgr
- Create SDL Worker Dist Build Process
- Create SDL Worker Install to $SDL_HOME
- SDL Install Script
- Create SDL Worker Auto Update Process
- Create Worker Join Process
- Create Worker Telementry Process
- Data Storage Organizational Structure
- MinIO S3 Storage Server
- Worker Telemetry Hardware Inventory (CPU, RAM, GPU, etc)
- Worker Telementry Load Status (CPU, RAM, GPU, Disk IO, etc)
Design
Design Goals
- Cross Platform (lnx, mac, win, bsd, rpi) Linux First, support for others later.
- Node.JS based Manager and Worker code bases
- Extreme Minimal OS Dependancies. sdl-mgr self hosts all the necessary code to deploy and coordinate a cluster. Including distrubution of Node binaries.
- Automate Update Workflows
- Zero Technical Debt (ideal)
- Sane handling of sdl-workers comming and going, being added or removed.
- Zero sdl-wkr Configuration (ideal) - Install > Run > Listen to UDP Bcast > Auto Join MQTT for cluster command and control.
Security
- Security considerations TLS, Auth, etc. are future scopes of work. At this stage we are focused on getting the manager and workers up and running as a Minimum Viable Product (MVP) for a cluster of SDL workers. But we are also thinking forward about security and cross platform support so those features will be easy to implement later without a major code refactor.
- The current assumption is that SDL runs in a segmented subnet with restricted access. And that we do not have malicious actors trying to compromise the network or poison the open MQTT broker.
Architecture
Software Defined Laboratry (SDL)
Directory Structure
SDL Source Code Structure
../sdl
├── docs
├── sdl-mgr
│ ├── app
│ │ └── modules
│ │ ├── mqtt
│ │ ├── nwa-lib
│ │ ├── sdl-mgr
│ │ ├── template
│ │ └── web
│ ├── conf
│ │ └── modules
│ ├── html
│ │ ├── conf
│ │ ├── css
│ │ ├── img
│ │ ├── js
│ │ └── md
│ └── scripts
├── sdl-wkr
│ ├── app
│ │ └── modules
│ │ ├── nwa-lib
│ │ ├── sdl-wkr
│ │ └── template
│ ├── conf
│ │ └── modules
│ └── scripts
└── tools
SDL Installation Structure
~/.sdl/
├── conf
├── data
│ ├── jobs
│ └── proj
├── dist
├── logs
├── nodejs
│ └── current -> /home/jehaverlack/.sdl/nodejs/node-v22.22.0-linux-x64
├── sdl-mgr
│ ├── current -> /home/jehaverlack/.sdl/sdl-mgr/sdl-mgr_0.2.7
│ └── sdl-mgr_0.2.7
│ ├── app
│ │ └── modules
│ │ ├── mqtt
│ │ ├── nwa-lib
│ │ ├── sdl-mgr
│ │ ├── template
│ │ └── web
│ ├── conf
│ │ └── modules
│ ├── html
│ │ ├── conf
│ │ ├── css
│ │ ├── img
│ │ ├── js
│ │ └── md
│ └── scripts
└── sdl-wkr
SDL Worker Install Script
- Curl
SDL Worker Auto Update Process
- TBD
SDL Dist Build Process
dist
├── sdl-mgr
├── sdl-wkr
├── nodejs-bin
└── installers
Worker Join
- UDP Bcast
- MQTT Join
Worker Heartbeat
- MQTT Heartbeat
SDL Storage
- MinIO S3 Storage Server
- this is a non node.js codebase
Project
└── Experiment
├── L0 Raw Results
└── L1 Analysis Results
sdl/
└── projects/
└── <project_id>/
└── experiments/
└── <experiment_id>/
└── runs/
└── <run_id>/
├── l0/
└── l1/
Projects
- Need to define structure to manage projects.
- Projects will be managed with JSON files
- We web UI management Edit interface is nice but will come later. Just need to get things working first.
Experiments
- Within each Project Scope experiments can be conducted (run) as a specific configuration or permuation of variable to test.
- Each experiment represents a set of parrallized jobs for the cluster to execute on.
- L0 Raw Results will be collected and stored in a run S3 Bucket.
- L1 Analysis Results will be collected and stored in a run S3 Bucket
- L1 Analysis represents an other set of parrallized jobs for the cluster to execute on.
Run Engine (RE)
- Run Engines (RE): May be a Python, Rust, C++, etc. executable/script that is forked by the sdl-wkr Node.JS process.
- RE get input configuration from the local sdl-wkr process.
- RE communicate only with the sdl-wkr process.
- But RE processes may read and write direclty to S3
- the sdl-wkr process communicates with the SDL Manager (sdl-mgr) process to notify on status of jobs.
PENDING
→ ASSIGNED
→ RUNNING
→ DONE | FAILED | CANCELLED