01 · Problem
Wofür braucht man das?
Mehrere verteilte Worker benötigen Identität, Transport, Lebenszyklus und definierte Regeln für Broadcast, Fehler sowie Teilantworten.
02 · Denkmodell
Das mentale Modell
Der Manager kennt aktive Knoten und delegiert Bytes über einen Transport. Ein Protokoll beschreibt Handshake, Anfrage-ID, Antwort und Timeout.
ManagerParams ist leer, Manager hält lediglich eine Node-Liste und broadcast ist ohne Verhalten. Worker, Root-Index und das als handshacke benannte Protokoll sind leer; ein nutzbarer Vertrag existiert noch nicht.
03 · Kontrollfluss
Was passiert in welcher Reihenfolge?
- Worker über einen Transport verbinden und per Handshake identifizieren.
- Nachrichten mit Version, Anfrage-ID und Deadline serialisieren.
- Broadcast parallel an einen stabilen Snapshot aktiver Worker senden.
- Ergebnisse, Timeouts und Transportfehler pro Worker getrennt zurückgeben.
04 · Bauteile
Die entscheidenden Verträge
Manager
Unvollständige Hülle für Worker-Liste und Broadcast.
ManagerParams
Noch leere Konfiguration des Managers.
Worker / Handshake
Platzhalter ohne implementiertes Protokoll.
05 · Build it yourself
Selbst implementieren
Definiere zuerst einen transportneutralen Vertrag; Netzwerk- oder Worker-Adapter kommen danach.
- Knoten mit stabiler ID und send-Methode modellieren.
- Beim Broadcast die aktuelle Map kopieren, damit Verbindungen parallel wechseln dürfen.
- Promise.allSettled verwenden und Teilerfolge sichtbar zurückgeben.
type Node = { id: string; send(message: Uint8Array): Promise<Uint8Array> };
class Swarm {
private nodes = new Map<string, Node>();
connect(node: Node) { this.nodes.set(node.id, node); }
disconnect(id: string) { this.nodes.delete(id); }
broadcast(message: Uint8Array) {
return Promise.allSettled(
[...this.nodes.values()].map((node) => node.send(message)),
);
}
}06 · Verifizieren
Was du testen solltest
- Ein Broadcast erreicht genau den Snapshot der beim Start verbundenen Worker.
- Ein fehlerhafter Worker verwirft erfolgreiche Antworten anderer Worker nicht.
- Doppelte IDs, Timeout und Disconnect während einer Anfrage sind definiert.
07 · Grenzen
Kompromisse und Stolperfallen
- Broadcast ist einfach, vervielfacht aber Last und Datenverkehr linear.
- Teilergebnisse erhöhen Verfügbarkeit, zwingen Aufrufer jedoch zu Fehlerpolitik.
- Transportneutralität erleichtert Tests und braucht dafür ein explizites Wire-Protokoll.
Authentifizierung, Backpressure, Heartbeats und Protokollversionierung sind Kernanforderungen, keine späteren Details.
08 · Weiterdenken