GitHub
Skizzepackages/swarm/src

Swarm

@ralphschuler/swarm

Skizziert einen Manager, der Nachrichten an mehrere Worker verteilt und deren Antworten koordiniert.

workersbroadcastcoordination

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.

Im Repository

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?

  1. Worker über einen Transport verbinden und per Handshake identifizieren.
  2. Nachrichten mit Version, Anfrage-ID und Deadline serialisieren.
  3. Broadcast parallel an einen stabilen Snapshot aktiver Worker senden.
  4. 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.

  1. Knoten mit stabiler ID und send-Methode modellieren.
  2. Beim Broadcast die aktuelle Map kopieren, damit Verbindungen parallel wechseln dürfen.
  3. Promise.allSettled verwenden und Teilerfolge sichtbar zurückgeben.
minimal.ts · unabhängig vom Package
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.
Wichtig

Authentifizierung, Backpressure, Heartbeats und Protokollversionierung sind Kernanforderungen, keine späteren Details.

08 · Weiterdenken

Quellcode und Nachbarn

Originalcode auf GitHub ansehen