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

Hilfe, wir syncen!

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.

A1216674d5c9747bcdcc716872439137?s=128

Lars Hupel

November 16, 2021
Tweet

Transcript

  1. Hilfe, wir syncen! DIGITALE LEUTE SUMMIT / 16.11.2021 LARS HUPEL

    @LARSR_H LUCAS DOHMEN @MOONBEAMLABS
  2. Moderne Frontend-Architektur React SPA B4F µService 1 µService 2 µService

    3 JSON
  3. None
  4. Wenn alles in der Cloud ist ... • • •

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

    ständig Internet gehabt lokale Datenspeicherung, manuelle Synchronisierung
  6. 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?
  7. None
  8. Hello world! Hello world Hello, world!

  9. None
  10. None
  11. None
  12. Lattices • • mathematische Struktur abstrakte De inition einer Ordnungsrelation

  13. https://commons.wikimedia.org/wiki/File:Lattice_of_the_divisibility_of_60.svg

  14. CRDTs Con lict-Free Replicated Datatypes

  15. Beispiel: G-Sets {} {Skyr} {Müsli} {Skyr, Grapefruit} {Skyr, Müsli, Grapefruit}

  16. Tombstones • • Löschen ist nicht monoton ☹ Lösung: als

    „gelöscht“ markieren
  17. 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}
  18. Vector Clocks • • jedes der n Geräte bekommt einen

    eigenen Zeitstempel ein Gesamt-Zeitstempel setzt sich aus n Geräte-Zeitstempeln zusammen
  19. https://commons.wikimedia.org/w/index.php?title=File:Lamport-Clock-en.svg

  20. 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 🧑
  21. “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.”
  22. None
  23. None
  24. Automerge • • • JavaScript-Bibliothek ür Browser & Node.js bietet

    als Datentyp JSON-Dokumente 💡JSON-Dokument sind CRDTs
  25. 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
  26. Demo Eine Einkaufsliste

  27. None
  28. Weitere Features • • • • • mehr Datentypen: Counter

    Text (kollaboratives Editing) Table P2P-Anwendungen mit Hypermerge
  29. Q&A Lucas Dohmen lucas.dohmen@innoq.com @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 lars.hupel@innoq.com @larsr_h