Protocol (Nim)
Fodpr
Federated Data Protocol
About
Fodpr(Federated Data Protocol)は、Nim言語で書かれた分散型データ同期のためのプロトコル実装 だにゃん。 CRDT(Conflict-free Replicated Data Type)ベースのコンフリクトフリーなデータ構造で、 P2Pネットワーク上でのリアルタイム同期を実現するにゃ! MITライセンスで公開中にゃ。 GitHub でコードを確認できるにゃ。
Features
CRDT-based Sync
LWW-Register、OR-Set、RGA、YATAなど複数のCRDTタイプをサポート。競合なしマージ。
P2P Transport
WebRTC、WebSocket、libp2p対応。NAT越え・リレー機能内蔵で直結通信を実現。
Offline-first
ローカル優先アーキテクチャ。オフライン編集を完全サポート、オンライン復帰時に自動同期。
Schema Evolution
スキーマバージョニング、マイグレーション、後方互換性を保証するデータ進化機構。
Access Control
能力ベース認証、読み書き権限の細粒度制御、暗号化データ同期に対応。
Installation
nimble install https://github.com/LunaYoineko/Fodpr
.nimbleのdependenciesに requires "fodpr" を追加してにゃ。
Quick Start
import fodpr
# ノードを作成
let node = fodpr.newNode(
identity: await generateIdentity(),
transport: new WebRTCTransport()
)
# CRDTマップを作成
let doc = fodpr.newCRDTMap("shared-doc")
doc.set("title", "Hello Fodpr!")
doc.set("content", "分散同期のテストにゃん")
# ルームに参加して同期開始
await node.join("room-example")
await fodpr.sync(node, doc)
# 別ピアでも同じドキュメントがリアルタイム同期されるにゃ! CRDT Types
LWW-Register
Last-Writer-Winsレジスタ。単一値の最終書き込み勝利でシンプルな同期。
OR-Set
Observed-Remove Set。要素の追加・削除を競合なくマージ。タグベースで管理。
RGA / YATA
シーケンスCRDT。テキストエディタ、リストの並び順同期に最適。挿入順序保証。
PN-Counter
Positive-Negative Counter。インクリメント/デクリメントを独立に管理し合算。
Network Topology
┌─────────┐ │ Peer A │◄──┐ │ (Alice) │ │ └────┬────┘ │ │ │ WebRTC ┌──────┼──────┐ │ ▼ ▼ ▼ ▼ ┌────────┐ ┌──────┐ ┌────────┐ │ Peer B │ │Peer C│ │ Peer D │ │ (Bob) │ │(Carol)││ (Dave) │ └────┬───┘ └──┬───┘ └────┬───┘ │ │ │ └────────┴────────┘ │ ┌─────▼─────┐ │ Relay │ │ (Signaling)│ └───────────┘
Dependencies
nim >= 2.0.0libp2p (via FFI)WebRTCCRDT