Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hilfe, wir syncen!

Lars Hupel
November 16, 2021

Hilfe, wir syncen!

Im Zeitalter der Smartphone-Apps sehen sich viele Entwickler:innen dem immer wieder gleichen Problem ausgesetzt: Wie synchronisiert man Daten zwischen den verschiedenen Clients? Vom Telefon, was zeitweilig offline sein kann, zum Tablet, was überhaupt nur im WLAN hängt, zur Weboberfläche. Auf keinen Fall darf man dem User Konflikte anzeigen, die verwirren nur! “Konfliktfreie verteilte Datentypen” sind die Lösung; eine recht junge Technologie, die verspricht, alle diese Probleme anzugehen.

Lars Hupel

November 16, 2021
Tweet

More Decks by Lars Hupel

Other Decks in Programming

Transcript

  1. Wenn alles in der Cloud ist ... • • •

    ... sind wir abhängig vom Internet ... können wir nur eingeschränkt arbeiten ... schließen wir Menschen aus
  2. Of line arbeiten? • • früher™ hat man auch nicht

    ständig Internet gehabt lokale Datenspeicherung, manuelle Synchronisierung
  3. Of line- irst ist Standard in der Entwicklung • •

    • wir arbeiten gerne of line niemand möchte mehr Subversion benutzen Warum verlangen wir Konnektivität von unseren User:innen?
  4. Beispiel: 2P-Sets {Skyr, Müsli, Grapefruit} {Skyr, Müsli, Grapefruit} {Skyr, Äpfel,

    Müsli, Grapefruit} {Skyr, Müsli, Grapefruit, Tee} {Skyr, Äpfel, Müsli, Grapefruit, Tee}
  5. Vector Clocks • • jedes der n Geräte bekommt einen

    eigenen Zeitstempel ein Gesamt-Zeitstempel setzt sich aus n Geräte-Zeitstempeln zusammen
  6. T₁ = 0 T₂ = 0 Beispiel: MV-Register x =

    0 x = 1 T₁ = 1 T₂ = 0 👩 x = 0 T₁ = 0 T₂ = 0 x = 1 T₁ = 1 T₂ = 0 x = 1 T₁ = 1 T₂ = 0 x = 2 T₁ = 2 T₂ = 0 x = 3 T₁ = 2 T₂ = 1 💣 update sync update update x = 0 🧑
  7. “Any two object replicas of a CvRDT eventually converge, assuming

    the system transmits payload in initely often between pairs of replicas over eventually-reliable point-to-point channels.”
  8. Automerge • • • JavaScript-Bibliothek ür Browser & Node.js bietet

    als Datentyp JSON-Dokumente 💡JSON-Dokument sind CRDTs
  9. Verwendung Requests pro Sekunde doc1 = Automerge.from({ todos: [] })

    doc2 = Automerge.change(doc1, 'Add muesli', doc => { doc.cards.push({ text: 'Müsli', done: false }) }) doc3 = Automerge.change(doc1, 'Add skyr', doc => { doc.cards.push({ text: 'Skyr', done: false }) }) Automerge.merge(doc2, doc3) // enthält Spuren von Müsli & Skyr
  10. Weitere Features • • • • • mehr Datentypen: Counter

    Text (kollaboratives Editing) Table P2P-Anwendungen mit Hypermerge
  11. Q&A Lucas Dohmen [email protected] @moonbeamlabs www.innoq.com innoQ Deutschland GmbH Krischerstr.

    100 40789 Monheim +49 2173 333660 Ohlauer Str. 43 10999 Berlin Ludwigstr. 180E 63067 Offenbach Kreuzstr. 16 80331 München Hermannstr. 13 20095 Hamburg Erftstr. 15-17 50672 Köln Königstorgraben 11 90402 Nürnberg Lars Hupel [email protected] @larsr_h