Почему распределенные данные это сложно и как начать использовать последние разработки в поддержании консистентности данных в браузерах и мобильных клиентах, используя JS.
11. DCS Triangle
Decentralized - означает децентрализованость и
server-free
Consistent - консистентность означает что все ноды
видять одни и те же данные в одно и то же время
Scale - означает что у сети есть достаточно
производительности, чтобы работать в масштабах
планеты
/ 43
13. Strong Consistency
“strong consistency” все изменения применяются
последовательно (т.е. sequential with no operations
overlap) в глобальном порядке
Узкое горлышко : маленькая пропускная способность
и большие задержки (из-за консенсуса):
RAFT/PAXOS/Zab
можновы брать либо availability, либо partition-tolerance
3 / 43
15. Eventual Consistency
∀i, j : f ∈ ci ⇒ f ∈ cj, Convergence and Termination
properties
RIAK, MONGO, Cassandra, Couch
5 / 43
16. Strong Eventual Consistency
... То же что и Eventual Consistency
and ∀i, j : ci = cj ⇒ Si ≡ Sj: Correct replicas that have
delivered the same updates have equivalent state
CALM: consistency as logical monotonicity
6 / 43
17. Подходи сходу
Локинг
Один активный участник
Транзакции
Tentative Транзакции
Версионирование/тэггирование
Выполнение в обратном порядке (reversible execution)
7 / 43
22. Conflict-free replicated data types (CRDT)
– типы данных без конфликтов
Свойства полурешентки (⊔ or LUB – Least Upper Bound,
наименьшая верхняя грань):
коммутативность – ∀x, y : x y = y ⊔ x
ассоциативность – x ⊔ (y ⊔ z) = (x ⊔ y) ⊔ z
идемпотентность – x ⊔ x = x
22 / 43
39. CRDT: Типы
Register: LWW или Multi-Value (как Dynamo или
Couchdb)
Counter только растущий
G-Set – множество с возможностю исключительно
добавления
2P-Set – множество, где один уникальный элемент
можно удалять только один раз (G-Set + Tombstones
set)
LWW-Element-Set – LWW на базе vector clocks
OR-Set – тэгированные элементы, тэги помещаются в
множество Tombstones
WOOT, LOGOOT, Treedoc, RGA, LSEQ для
упорядоченных списков
39 / 43
40. Инструменты
Roshi by Soundcloud
Riak 2.0: Counters, Flags, Sets, Registers, Maps
Redis Labs CRDT
Y-js – framework for offline-first p2p shared editing on
structured data
Swarm (and forever-in-pre-alpha tool)
replikativ.io – p2p distributed system framework
GUN framework: p2p distributed framework
40 / 43
41. Свой CRDT тип
+ Относительно мало кода
+ Хорошо расширяется
+ Работает очень предсказуемо в рамках своей
модели
+ Консистентно даже при плохой сети (с задержкой)
+ Работа оффлайн
- Распределенная модель тяжело заходит
- Сложно заниматься GC
- Дополнительный гемор в оптимизации (δ-mutation)
4 / 43