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. Hilfe, wir syncen!
    DIGITALE LEUTE SUMMIT / 16.11.2021
    LARS HUPEL
    @LARSR_H
    LUCAS DOHMEN
    @MOONBEAMLABS

    View Slide

  2. Moderne Frontend-Architektur
    React SPA B4F
    µService 1
    µService 2
    µService 3
    JSON

    View Slide

  3. View Slide

  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

    View Slide

  5. Of line arbeiten?


    früher™ hat man auch nicht
    ständig Internet gehabt
    lokale Datenspeicherung,
    manuelle Synchronisierung

    View Slide

  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?

    View Slide

  7. View Slide

  8. Hello
    world!
    Hello
    world
    Hello,
    world!

    View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. Lattices


    mathematische Struktur
    abstrakte De inition einer Ordnungsrelation

    View Slide

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

    View Slide

  14. CRDTs
    Con lict-Free Replicated Datatypes

    View Slide

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

    View Slide

  16. Tombstones


    Löschen ist nicht monoton

    Lösung: als „gelöscht“ markieren

    View Slide

  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}

    View Slide

  18. Vector Clocks


    jedes der n Geräte bekommt einen eigenen
    Zeitstempel
    ein Gesamt-Zeitstempel setzt sich aus n
    Geräte-Zeitstempeln zusammen

    View Slide

  19. https://commons.wikimedia.org/w/index.php?title=File:Lamport-Clock-en.svg

    View Slide

  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
    🧑

    View Slide

  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.”

    View Slide

  22. View Slide

  23. View Slide

  24. Automerge



    JavaScript-Bibliothek ür Browser & Node.js
    bietet als Datentyp JSON-Dokumente
    💡JSON-Dokument sind CRDTs

    View Slide

  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

    View Slide

  26. Demo
    Eine Einkaufsliste

    View Slide

  27. View Slide

  28. Weitere Features





    mehr Datentypen:
    Counter
    Text (kollaboratives Editing)
    Table
    P2P-Anwendungen mit Hypermerge

    View Slide

  29. 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

    View Slide