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.
Sendet an eine begrenzte Gruppe eindeutiger lokaler Worker und erhält Teilerfolge. Der geprüfte Kern ist lokale Orchestrierung. Remote-Ausführung, Authentifizierung, Wiederholungen und Heartbeats benötigen einen Netzwerkadapter.
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.registerNode / unregisterNodeVerwaltet eine begrenzte Registry eindeutiger Endpunkte.Manager.broadcastSammelt Erfolge und Fehler je Endpunkt.Worker.executeFührt einen lokalen typisierten Handler aus.05 · Selbst bauen
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 solltest du testen?
- 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.
Selbst ausprobieren
Formuliere die erste Prüfaussage als fehlschlagenden Test, implementiere die kleinste Korrektur und ergänze einen Grenzfall.
Ein Broadcast erreicht genau den Snapshot der beim Start verbundenen Worker.
Ansatz vergleichen
Dein Test sollte beim gezielten Verletzen der Invariante fehlschlagen und nach der Korrektur wieder bestehen. Halte den Aufbau deterministisch und prüfe ein beobachtbares Ergebnis.
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.
Der geprüfte Kern ist lokale Orchestrierung. Remote-Ausführung, Authentifizierung, Wiederholungen und Heartbeats benötigen einen Netzwerkadapter.
08 · Weiterdenken
Quellcode und verwandte Ideen
yarn tsx packages/swarm/examples/basic.ts