操作して学ぶ

CRDT可視化

オフラインでも編集でき、あとで同期すると勝手に整合する—— その裏にあるのがCRDT(Conflict-free Replicated Data Type)。 増減できるカウンタ(PN-Counter)を3つの複製で動かし、バラバラに更新しても同期すれば必ず同じ値に収束する様子を確かめてください。

全レプリカ収束(同じ値)各レプリカを独立に増減 → 同期で必ず一致する
A0

P(増): [A0 B0 C0]

N(減): [A0 B0 C0]

B0

P(増): [A0 B0 C0]

N(減): [A0 B0 C0]

C0

P(増): [A0 B0 C0]

N(減): [A0 B0 C0]

同期(マージ):

各レプリカは自分の枠だけを増やす(AはA枠、BはB枠…)。だから増加が衝突して消えることがない。 マージは枠ごとに大きい方を採る(最大値)だけ。この操作は可換・結合的・冪等なので、どんな順序・回数で同期しても同じ値に収束する。中央の調整役なしで整合するのがCRDTの肝。

なぜ調整なしで整合するのか

  • 各レプリカは自分の枠だけ更新する:他人の枠を書き換えないので、更新が衝突して消えることがない。
  • マージが可換・結合的・冪等:枠ごとに最大値を採るだけ。順序を変えても、同じ同期を二度しても結果は同じ。
  • だから最終的に必ず一致する(強結果整合性):全レプリカが同じ更新集合を見れば、中央のロックや合意なしに同じ状態へ収束する。
  • 用途:共同編集(テキスト・図)、オフライン対応アプリ、分散DBの一部。合意(Paxos/Raft)が要らない代わりに、表現できるデータ型に制約がある。