Slide 1

Slide 1 text

CRDTで始めるコンフリクトしないデー タ同期 s1290035 しんぶんぶん

Slide 2

Slide 2 text

コンフリクトしないデータ同期を目指して ● 複数ノードのデータを同期したい! ○ 同時に同じリソースを編集しても整合性が取れるようにしたい ○ ネットワークの遅延とかがあっても不整合なく同期したい ● CRDT(Conflict-free Replicated Data Types)を使えばこれらの問題が解決できる ● FigmaとかはCRDTを独自に改造したものを使っている

Slide 3

Slide 3 text

Strong Eventual Consistency(SEC) ● Eventual delivery ○ ある正しいレプリカに配信されたアップデートは、最終的にすべての正しいレ ○ プリカに配信される ● Strong Convergence ○ 配信した正しいレプリカは同等の状態を持つ ● Termination ○ すべてのメソッドの実行が終了する

Slide 4

Slide 4 text

Eventual Consistency(EC)との違い ● ECはコンフリクトすることがあるため、なんらかの方法で解決しないといけない ● SECはそもそもコンフリクトしない

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

CvRDTとCmRDT ● State-based なConvergent Replicated Data Type(CvRDT) ○ レプリカ自体を共有して merge していくタイプのCRDT ● Operation-basedなCommutative Replicated Data Type(CmRDT) ○ レプリカ間で操作を共有していくタイプの CRDT

Slide 7

Slide 7 text

CvRDT ● レプリカ自体を共有してmerge していくタイプのCRDT ● レプリカのマージは可換かつ冪等 ● 可換: どの順番でmergeしても同じ結果になる ● 冪等: 何回mergeの操作を適用しても同じ結果になる ● つまり: メッセージが失われたり、順番が違ったり、複数回受信されたりしても、最終 的に同じ結果に収束する ● レプリカ全体を同期させるのでデータが大きくなると結構びみょい

Slide 8

Slide 8 text

CmRDT ● レプリカ間で操作を共有していくタイプのCRDT ● 操作は可換 ● つまり、どの順番で操作を適用しても同じ結果に収束する ● 冪等ではないので、CvRDTよりは通信の信頼性が求められる

Slide 9

Slide 9 text

CRDTの具体例

Slide 10

Slide 10 text

Grow-Only Set(G-Set) ● AddとLookUp操作のみをサポートしたSet ● Setへの追加は可換なのでCmRDTとして成立する ● merge(S, T) = S ∪ Tとすると、これは可換かつ冪等なのでCvRDTとしても成立す る

Slide 11

Slide 11 text

今までのLTネタ

Slide 12

Slide 12 text

ただ技術の解説しただけで終わりですか? 今回は何も実装してないんですか???

Slide 13

Slide 13 text

もちろんそんなことはないです

Slide 14

Slide 14 text

TreeDocをRustで実装してみた話 s1290035 しんぶんぶん

Slide 15

Slide 15 text

TreeDocとは ● テキスト共同編集のためのCRDT(CmRDT) ● binary treeにテキストを保存していく構造 ● atomと呼ばれる要素がNodeになる ● 各atomはPosIDという一意の位置識別子を持つ ○ PosIDにはRootからNodeへのPathが使われる ○ 右図の場合、たとえば dのPosIDは10 ● 同じ位置に異なるatomを同時に挿入する可能性を考え、binary treeのNodeに binary treeを持たせるような構造になっている ● Deleteは、削除したNodeにtombstoneを持たせる仕組み 引用: Nuno Preguiça, Joan Manuel Marquès, Marc Shapiro, Mihai Leția “A commutative replicated data type for cooperative editing”

Slide 16

Slide 16 text

今回実装したもの ● TreeDocの機能の一部をRustで実装 ● Ropeデータ構造を独自に拡張した仕組みを使って、TreeDocを実際に使えるよう にした ● tombstoneを使った削除やbinary treeのミニノードは今回未実装のため、実は CRDTと呼べるところまでは実装できてない ● フロントエンドで動かしたかったので、wasmに変換してJSから呼び出した

Slide 17

Slide 17 text

デモ

Slide 18

Slide 18 text

参考文献 ● Marc Shapiro, Nuno Preguiça, Carlos Baquero, and Marek Zawirski. Conflict-free replicated data types. In 13th International Conference on Stabilization, Safety, and Security of Distributed Systems, SSS 2011, pages 386--400. Springer LNCS volume 6976, October 2011. ● Marc Shapiro, Nuno Preguiça, Carlos Baquero, and Marek Zawirski. A comprehensive study of convergent and commutative replicated data types. Research Report 7506, INRIA, January 2011. ● Nuno Preguiça, Joan Manuel Marquès, Marc Shapiro, Mihai Leția. A commutative replicated data type for cooperative editing. 29th IEEE International Conference on Distributed Computing Systems (ICDCS 2009), Jun 2009, Montreal, Québec, Canada. pp.395-403, ff10.1109/ICDCS.2009.20ff. ffinria00445975f

Slide 19

Slide 19 text

以上!