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

(UA) CRDT (Conflict-free Replicated Data Types) usage as a solution for data synchronization problem in distributed systems (iOS client)

(UA) CRDT (Conflict-free Replicated Data Types) usage as a solution for data synchronization problem in distributed systems (iOS client)

Slides of graduate work of master's degree in V. N. Karazin Kharkiv National University

Bc7040afb8da73d3d081f6fc29fa60a0?s=128

Volodymyr Hryhoriev

September 25, 2021
Tweet

Transcript

  1. Використання CRDT (Conflict-free Replicated Data Types) для рішення проблеми синхронізації

    даних в розподілених системах (iOS клієнті) Виконав студент групи МФ-61 Григор’єв В. В. Міністерство освіти і науки України Харківський національний університет імені В.Н. Каразіна Науковий керівник: Медведюк Д. І. Кваліфікаційна робота магістра
  2. Постановка задачі 1. Ознайомитися з проблемою синхронізації даних 2. Дослідити

    переваги й недоліки CRDT 3. Створити власну реалізацію CRDT 4. Продемонструвати результати практичного застосування CRDT
  3. None
  4. Розподілена система

  5. Синхронізація даних ускладнюється якщо: • Виникають проблеми з мережею (сегментація

    мережі, офлайн режим роботи) • Відбуваються одночасні зміни даних (колоборативний режим роботи)
  6. Синхронізація даних

  7. CAP Теорема

  8. Узгодженість в кінцевому випадку (Eventual Consistency) говорить про те, що

    як тільки всі вузли отримали всі операції, то через деякий час система прийде в узгоджений стан
  9. Сильна узгодженість в кінцевому випадку - система відразу прийде в

    узгоджений стан
  10. Ціль - розробити рішення, що не залежить від: • Бази

    даних • Транспорту (HTTP, WebSockets) • Інфраструктури серверної частини
  11. • Асинхронну реплікацію • Оптимістичний UI А також підтримує:

  12. CRDT - це загальна назва структур даних, що автоматично розв’язують

    конфлікти під час об’ єднання реплік.
  13. CRDT - це напіврешітка • ≤ - операція часткового порядку

    • ⊔ - операція об’єднання ◦ комутативність: A ⊔ B = B ⊔ A ◦ асоціативність: (A⊔B)⊔C=A⊔(B⊔C) ◦ ідемпотентність: A ⊔ A = A • sup(L, K) = M = L ⊔ K
  14. Приклад решітки - впорядкування за включенням

  15. Види CRDT • На основі стану - CvRDT • На

    основі операцій - CmRDT
  16. СvRDT - State-based CRDT

  17. Переваги: • Незалежність від транспорту Недоліки: • Великий обсяг повідомлень

    CvRDT
  18. СmRDT - Op-based CRDT

  19. Переваги: • Маленький розмір повідомлень Недоліки: • Обмеження на транспорт

    (вимагає причинної доставки) CmRDT
  20. Причинна доставка

  21. Базові приклади CRDT • Лічильники: GCounter, PNCounter • Регістри: LWWRegister,

    MVRegister • Множини: LWWSet, GSet, 2PSet, ORSet, AWSet, RWSet • Словники: ORMap, AWMap, RWMap • Прапорці: EWFlag, DWFlag
  22. Специфікація GCounter

  23. Вектор версій

  24. Специфікація GCounter

  25. Специфікація GSet

  26. specialfor/CRDT

  27. Мобільний застосунок як розподілена система

  28. TodoMVC

  29. Діаграма прецедентів

  30. Специфікація моделі

  31. Demo: додавання завдання

  32. Demo: вирішення конфлікту з назвою завдання

  33. Діаграма діяльності: створення конфлікту назви

  34. UI блок-схема: очищення локального сховища

  35. API

  36. Діаграма послідовності: POST /todos

  37. Swagger Documentation

  38. Клієнт: • iOS • Swift • CRDT • UserDefaults (Plist

    ~ XML) Сервер: • Vapor • Swift • CRDT • SQLite • Swagger Технології
  39. Переваги: • Автоматичне розв’ язання конфліктів • CRDT математично доведені

    • Незалежність від транспорту та БД Недоліки: • Великий обсяг повідомлень для CvRDT • Ускладнення прошарку моделі Висновок
  40. specialfor/CRDT

  41. Дякую за увагу!