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

Links