Skip to main contentZum Seitenanfang

BLOG-POST MODULE

EchoStream: Zusammenarbeit in Echtzeit unter 45 ms

18.2.2026

7 Min. Lesezeit

212 Aufrufe

EchoStream: Aufbau einer Echtzeit-Zusammenarbeit in weniger als 45 ms für verteilte Teams

Die Zusammenarbeit in Echtzeit ist technisch unkompliziert, bis Sie zwei hinzufügen Anforderungen: globale Verteilung und Sicherheit. Fügen Sie diese Einschränkungen hinzu, und die meisten handelsüblichen Werkzeuge scheitern.

Dies ist die Geschichte von EchoStream, einer Plattform für Unternehmenskollaboration, die wir haben Entwickelt für Organisationen, die Folgendes benötigten:

  • Latenz von unter 100 ms für Teammitglieder auf mehr als 6 Kontinenten
  • End-to-End-Verschlüsselung ohne Kenntnis des Nachrichteninhalts
  • Widerstandsfähigkeit gegenüber Ausfällen der Energieverteilung (Datensouveränität)
  • Unterstützung für mehr als 10.000 gleichzeitige Benutzer ohne Beeinträchtigung

Das Problem: Latenz tötet die Zusammenarbeit

Herkömmliche SaaS-Collaboration-Tools (Slack, Microsoft Teams) zentralisieren Server in 1-3 geografischen Regionen. In 90 % der Anwendungsfälle funktioniert dies einwandfrei. Aber für Unternehmen, die sensible Daten verarbeiten oder über stark verteilte Teams verfügen, Latenz wird lähmend:

Warum <100 ms wichtig sind:

  • Das Tippen fühlt sich natürlich an: Nachrichten erscheinen sofort (die menschliche Wahrnehmungsschwelle liegt bei ~100ms)
  • Bei einer Latenz von mehr als 300 ms: Das Tippen fühlt sich verzögert an (wie bei einer schlechten Telefonverbindung); Verzögerungen bei der Anwesenheitserkennung; Die Zusammenarbeit mit dem Whiteboard wird unbrauchbar
  • Globale Finanzteams (London + Tokio + New York) häufig erfahren 200–400 ms Umlaufzeit

Warum Standardlösungen scheiterten:

  • Slack leitet alle Nachrichten über US-Rechenzentren weiter: 200–500 ms vom asiatisch-pazifischen Raum
  • Microsoft Teams zentralisiert die Verwaltung von Verschlüsselungsschlüsseln (schlägt bei Zero-Knowledge fehl). Erfordernis)
  • Beide verlangten von Compliance-Teams, Cloud-Anbieter auf die Whitelist zu setzen

Ein Kunde beschrieb es wie folgt: „Unser Team in Tokio kann nicht in Echtzeit zusammenarbeiten.“ Kollegen in London. Videoanrufe funktionieren, aber Chat/Whiteboard fühlen sich kaputt an.

Die Kosten: Teamfragmentierung, doppelte Kanäle (einige nutzten Slack, andere interne Systeme) und Fehler bei der Sicherheitsüberprüfung (Unfähigkeit zu garantieren). Verschlüsselung)

Die Lösung: Distributed-First-Microservices-Architektur

Wir haben EchoStream auf drei Grundprinzipien aufgebaut:

1. Geografische Randverteilung

Anstelle zentralisierter Server haben wir Nachrichtenbroker (Redis Streams) bereitgestellt Knoten) in 6 Regionen:

  • Nordamerika (Iowa)
  • Europa (Frankfurt)
  • Asien-Pazifik (Singapur, Tokio)
  • Naher Osten (Dubai)
  • Südamerika (São Paulo)
// Client connects to geographically nearest node
const getNearestNode = async (clientLocation: GeoLocation) => {
  const nodes = await discoverAvailableNodes();
  // Calculate latency to each region
  const latencies = await Promise.race(
    nodes.map(async (node) => ({
      node,
      latency: await pingNode(node),
    })),
  );
  return latencies.sort((a, b) => a.latency - b.latency)[0].node;
};

2. Redis-Streams für Nachrichtenbestellung und Zustellungsgarantien

Redis Streams lieferte genau das, was wir brauchten:

  • Globale FIFO-Reihenfolge: Auch über Regionen hinweg ist die Nachrichtenreihenfolge garantiert (entscheidend für die gemeinsame Bearbeitung)
  • Persistentes Nachrichtenprotokoll: Wenn ein Client offline geht, verbindet er sich erneut und verpasste Nachrichten erneut abspielen
  • Verbrauchergruppen: Verschiedene Clienttypen (Web, Mobil, API) können Nachrichtenverlauf unabhängig wiedergeben
// Publish message to global stream with causality tracking
await redis.xadd(
  `stream:${conversationId}`,
  "*", // Auto-generate timestamp ID
  "sender",
  userId,
  "content",
  encryptedMessage,
  "vectorClock",
  JSON.stringify(currentVectorClock),
  "timestamp",
  Date.now(),
);

3. Ende-zu-Ende-Verschlüsselung ohne Wissen

Wir haben das Signalprotokoll (dieselbe Kryptowährung, die auch von WhatsApp verwendet wird) mit Sitzung implementiert Management:

// Message encrypted client-side BEFORE leaving the browser
const encryptedMessage = await encryptionSession.encrypt({
  plaintext: userMessage,
  recipients: conversationParticipants,
  deviceIds: activeDevices,
});

// Server receives encrypted blob, has ZERO ability to read content
await redis.xadd(
  `stream:${conversationId}`,
  "*",
  "encrypted_payload",
  base64(encryptedMessage), // Server can't decrypt
  "metadata",
  publicMetadata, // Only non-sensitive info
);

Diese Architektur bedeutete:

  • Der Server sieht den Nachrichteninhalt nie (Compliance-Teams haben ihn sofort genehmigt)
  • Entschlüsselungsschlüssel werden nur auf Benutzergeräten gespeichert (nicht im Cloud-Tresor)
  • Durch die Kompromittierung des Geräts wird der Chatverlauf nicht angezeigt (nur aktuelle Sitzung).

4. Optimistische Updates + Konfliktlösung

Für kollaborative Funktionen (gemeinsame Whiteboards, Dokumentenbearbeitung) bieten wir umgesetzte operative Transformation:

// Client sends edit BEFORE server confirmation
const optimisticEdit = {
  id: generateUUID(),
  operation: insertText(position, "new text"),
  vectorClock: increment(localClock),
};
applyLocally(optimisticEdit); // Update UI immediately

// When server confirms (or earlier edit arrives), transform:
// If both edits at position 100, server's "insert 20 chars"
// shifts my operation to position 120
const transformedOp = transform(optimisticEdit, serverEdit);

Dadurch fühlte sich die Zusammenarbeit am Whiteboard reibungslos an – es gab keine Rückgängig-/Wiederholen-Schleifen bei Bearbeitungen Konflikt.

Die Ergebnisse: Transformation der Unternehmenszusammenarbeit

Latenzleistung (durchschnittlich 45 ms)

  • Pre-EchoStream: Globale Teams erlebten eine durchschnittliche Latenz von 200–400 ms (zentralisiertes US-Routing)
  • Post-EchoStream: Durchschnittlich 45 ms zur nächsten Region, 120 ms interkontinental
  • Benutzererfahrung: Das Eintreffen der Nachricht fühlte sich augenblicklich an; Das Tippen fühlte sich heimisch an
  • Bonus: Dies war für Benutzer im asiatisch-pazifischen Raum 2-3x schneller als Slack

Gleichzeitige Benutzerkapazität (mehr als 10.000 pro Cluster)

  • Ein einzelner Redis-Cluster hielt 10.000 gleichzeitige Verbindungen mit <50 ms p99 aufrecht Latenz
  • Horizontale Skalierung: Durch das Hinzufügen einer 7. Region wurde die Kapazität ohne vorhandene Benutzer erhöht Ausfallzeiten bemerken
  • Kosteneffizienz: WebSocket-Verbindungen verbrauchen 100x weniger Bandbreite als HTTP Umfrage

Sicherheits-Compliance (Null Verstöße)

  • 100 % Nachrichtenverschlüsselung: Jede Nachricht wird verschlüsselt, bevor sie den Client verlässt
  • Keine serverseitige Entschlüsselung: Kein Schlüsselmaterial wird serverseitig gespeichert
  • Prüfpfad: SOC 2 Typ II-, DSGVO- und HIPAA-Audits bestanden
  • Reaktion auf Vorfälle: Keine erfolgreichen Kompromittierungen (nur Phishing-Vorfälle, keine Plattformverstöße)

Zuverlässigkeit (99,95 % Betriebszeit, auch bei regionalen Ausfällen)

Der Fehler einer Region wurde nicht kaskadiert:

  • Clients in ausgefallenen Regionen stellen automatisch wieder eine Verbindung zum nächsten fehlerfreien Knoten her
  • Der Nachrichtenstrom wird fortgesetzt (Rückstand in Redis gespeichert)
  • Kein menschliches Eingreifen erforderlich
  • Erholung typischerweise <2 Minuten

Tiefer Einblick in die technische Architektur

Nachrichtenfluss

User A (London) → Encrypt locally → Send to Europe node
                                  ↓
                            Redis Streams (Frankfurt)
                            Pub/Sub broadcast to all subscribers
                                  ↓
      User B (Tokyo) ← Receive encrypted blob ← Asia node (Singapore)
      User B (Tokyo) ← Decrypt locally (only they have key)

Konsistenzmodell

Wir haben uns für eventuelle Konsistenz mit Kausalität entschieden:

  • Nachrichten kommen in einer Konversation in der richtigen Reihenfolge an (Kausalität bleibt erhalten)
  • Bei unterschiedlichen Gesprächen kann es zu leichten Abweichungen kommen (akzeptabler Kompromiss).
  • Vektoruhren werden pro Benutzer verfolgt und bei erneuter Verbindung zusammengeführt

Dies besiegte klassische Konflikte:

  • „Nachricht B kam vor A an, obwohl A zuerst gesendet wurde“ → Verhindert durch Vektoruhren
  • „Meine Nachricht ist verschwunden“ → Verhindert durch anhaltende Redis-Streams + Wiedergabe eingeschaltet wieder verbinden

Umgang mit Offline-Benutzern

Wenn ein Benutzer offline geht (Flug, Tunnel, WLAN-Ausfall):

  1. Der Client speichert lokale Kopien gesendeter Nachrichten (in IndexedDB).
  2. Beim erneuten Herstellen der Verbindung fragt der Client verpasste Nachrichten vom Server ab
  3. Der Client gibt lokale Änderungen zusätzlich zum Serverstatus wieder
  4. Wenn Konflikte bestehen, legen Sie sie dem Benutzer zur Lösung vor

Dies bedeutete, dass das Satelliteninternet (150 ms Latenz, häufige Aussetzer) funktionierte akzeptabel.

Was wir anders machen würden

1. Geografisches Failover früher getestet

Wir gingen davon aus, dass die Failover-Logik einwandfrei funktionieren würde. Das war nicht der Fall. Erste Produktion Der Failover-Test ergab Fehler. Lektion: Chaos Engineering ab Woche 1 – simulieren Regionsfehler, Wiederherstellung überprüfen.

2. Rotation des Verschlüsselungsschlüssels

Die Implementierung der Schlüsselrotation nach dem Start war mühsam. Wir hätten es einbacken sollen das Protokoll vom ersten Tag an.

3. Nachrichtendeduplizierung

Erste Versionen könnten dieselbe Nachricht zweimal übermitteln (seltene Rennbedingung). A Ein clientseitiges Deduplizierungsfenster hätte dies verhindert.

Wer braucht diese Architektur?

Systeme im EchoStream-Stil sind erforderlich für:

  • Finanzdienstleistungen: Globale Handelsteams, die eine Latenzzeit von <50 ms benötigen regulatorische Verschlüsselung
  • Gesundheitswesen: Verteilte Krankenhäuser/Kliniken, die HIPAA-konform sein müssen Kommunikation
  • Intel/Verteidigung: Organisationen, die wissensfreie Verschlüsselung und Daten benötigen Souveränität
  • Internationale NGOs: Unzuverlässige Teams auf mehr als 5 Kontinenten Konnektivität
  • Remote-First-Unternehmen: Die einen Wettbewerbsvorteil in weniger als 100 ms anstreben Zusammenarbeit UX

Erste Schritte mit WebSocket-Microservices im großen Maßstab

Wenn Sie bauen:

  • Echtzeit-Kollaborationsplattformen
  • Globale Nachrichtensysteme
  • Live-Multiplayer-Erlebnisse
  • Skalierbare Publish/Subscribe-Architekturen

Die Architektur von EchoStream ist kampferprobt. Wir haben sie für Folgendes entwickelt:

  • Mehr als 10.000 gleichzeitige Benutzer pro Region
  • <45 ms Latenz auf allen Kontinenten
  • Wissensfreie Verschlüsselung
  • Geografischer Failover ohne Datenverlust

Erfahren Sie mehr

None

Verwandte Artikel

None

Aufbau globaler Echtzeitsysteme? Beratung vereinbaren um Ihre Architektur zu besprechen, oder Updates abonnieren auf Muster verteilter Systeme.

Newsletter-Synchronisierung