7 Punkte von GN⁺ 2023-10-19 | 1 Kommentare | Auf WhatsApp teilen
  • Reflect ist ein neues Framework zum Erstellen von Multiplayer-Webanwendungen, ähnlich wie Figma, Notion und Google Sheets.
  • Es ist eine Weiterentwicklung von Replicache, einem clientseitigen Synchronisierungs-Framework, und ergänzt dieses um einen vollständig verwalteten Server, um die Entwicklung von Multiplayer-Apps zu erleichtern.
  • Reflect ist jetzt erstmals öffentlich verfügbar.
  • Das Framework befasst sich mit dem Problem der Konfliktauflösung bei kollaborativer Bearbeitung und sorgt dafür, dass alle Nutzer denselben Inhalt sehen und Konflikte auf natürliche Weise aufgelöst werden.
  • Anders als beliebte Werkzeuge des Web-Ökosystems wie CRDTs (Conflict-Free Replicated Data Types) verwendet Reflect die in der Videospielbranche verbreitete Technik der Transactional Conflict Resolution.
  • Die besonderen Vorteile und Unterschiede von Reflect ergeben sich aus dieser grundlegenden Entscheidung im Kern der Synchronisierungs-Engine.
  • Reflect verwendet JavaScript-Funktionen namens Mutators, um Änderungen umzusetzen, und erzeugt Mutation Records, die den Aufruf eines Mutators festhalten.
  • Mutations werden lokal angewendet und an den Server gestreamt; der Server linearisiert sie anhand ihrer Ankunftszeit, um den nächsten autoritativen Zustand zu erzeugen.
  • Reflect kann schnelllebige Anwendungen verarbeiten und weitere Mutations hinzufügen, während noch auf die Bestätigung vorheriger gewartet wird.
  • Das Framework benötigt einen schnellen Datenspeicher, der Zurückspulen, Forks und Branch-Erstellung unterstützt, sowie einen schnellen serverseitigen Speicher, der mit eingehenden Mutations Schritt halten kann.
  • Der Ansatz von Reflect lässt sich gut verallgemeinern und eignet sich für unterschiedliche Aufgaben wie arithmetische Operationen, Listenoperationen und die Durchsetzung höherstufiger Invarianten.
  • Der Server von Reflect ist autoritativ, berechnet die Ergebnisse von Mutations selbst erneut und stellt sicher, dass alle Clients diese Ergebnisse sehen können.
  • Diese Server-Autorität ermöglicht fein abgestufte Authentifizierung und die Ausführung weiteren Codes auf dem Server.
  • Reflect bietet außerdem Vorteile wie Schema-Validierung und Migrationen.
  • Die Synchronisierungsstrategie von Reflect, Transactional Conflict Resolution, ist einfach, flexibel und leistungsfähig und damit eine gute Wahl für den Bau von Multiplayer-Anwendungen.

1 Kommentare

 
GN⁺ 2023-10-19
Hacker-News-Kommentare
  • Dieser Artikel diskutiert Reflect, ein Framework für Multiplayer-Web-Apps mit spielartiger Synchronisierung.
  • Die Reflect-Demo auf der Homepage ist interaktiv und wirkt sehr interessant, da Nutzer dort offenbar Begeisterung über abgeschlossene Aufgaben zeigen.
  • Reflect ist nicht Open Source, was die Einführung in Unternehmen einschränken könnte, die für ihre Kerninfrastruktur Open-Source-Software bevorzugen.
  • Reflect war früher unter dem Namen Replicache bekannt und umfasst nun einen schnellen Synchronisierungsserver.
  • Das Framework erlaubt es Nutzern zu entscheiden, wie Konflikte mit einfachem, sequentiellem Code behandelt werden sollen, was als Vorteil gegenüber CRDTs angesehen wird.
  • Das Datenmodell und das Codierungsmodell von Reflect werden wegen ihrer Einfachheit gelobt.
  • Es gibt eine Diskussion über die Herausforderungen bei der Implementierung von Listenoperationen in Reflect, insbesondere in Szenarien mit gleichzeitigen Updates durch mehrere Nutzer.
  • Ein Nutzer weist auf die verwirrende Terminologie in Reflect hin und schlägt für Nicht-Spielesoftware statt „multiplayer“ den Begriff „Mehrbenutzer-“ vor.
  • Es gibt eine Frage dazu, wie Reflect Authentifizierung handhabt, da CRDT-Bibliotheken oft keine zentrale Instanz zur Validierung von Änderungen haben.
  • Der Ansatz von Reflect wird mit „deterministischer Synchronisierung“ verglichen, wie sie in der Spieleentwicklung zur Synchronisierung des Zustands vieler Entitäten verwendet wird.
  • Es werden Fragen aufgeworfen, wie Reflect Upgrades für Mutators behandelt und wie mit potenziellen Inkonsistenzen zwischen Client- und Server-Operationen umgegangen wird.
  • Ein Nutzer äußert, dass für die Verarbeitung hochfrequenter Nachrichten in Multiplayer-Engines ein UDP-Protokoll im Browser nötig sei, und kritisiert den Overhead von TCP und WebSockets.