- Braidは、相互運用可能な状態同期のためのアルゴリズム、アプリケーション、ツール、および標準を作るオープンなワーキンググループ。
- 目標は、ネットワークコンピューティングシステム全体で分散状態をローカル変数のように簡単に読み書きできるようにすること。
- 2週間ごとのオープンミーティングを通じて、アプリケーションおよびシステム要件を議論し、共通点を特定し、共有プロトコルについての合意を探っている。
Braid-HTTP: HTTPのための同期
- Braid-HTTPは、HTTPを状態転送から状態同期プロトコルへと一般化する拡張。
- HTTPに次の機能を追加する:
- HTTPリソースのバージョン管理
- GETリクエストに対するサブスクリプション(Subscription)
- Rangeリクエストに対するPATCH
- OTまたはCRDTの動作を指定するMerge-Type
- これらの機能により、Webリソースは複数のクライアント、サーバー、プロキシ間で自動的に同期され、複数の作成者が任意のネットワーク遅延や分断下でも一貫性を保ちながら同時編集できる。
- WebアプリケーションはBraid拡張を使って、共同編集、サーバーレスのオフラインモード、P2Pネットワーキングを提供できる。
- 標準ライブラリを使えば、既存のWebアプリケーションやブラウザにこれらの機能を簡単に追加できる。
- 詳細はIETF Internet-Draftで確認できる。
Braidプロトコルを使う
- Braidは現在のWebと互換性があり、現在のブラウザで動作し、既存のWebアプリケーションに簡単に追加できる。
- さまざまな言語向けのライブラリがある:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: Paul Kulchenkoが開発中
- ChromeではBraid-Chrome拡張を使ってBraid機能を利用できる。
Braid同期モデル
- プロトコル実装:
- braid-http
- braid-protocol
- wai-braid
- ブラウザ拡張:
- 状態抽象化ライブラリ:
- Braid-Text(テキスト向け)
- Redwood
- Statebus
- Statecraft
- アルゴリズム:
- Diamond Types: 世界最速のテキストCRDT
- Antimatter: 世界初の履歴プルーニング型テキストCRDT
- Sync9: テキストとJSONのためのCRDT+OT
- SyncX: Sync9
- Shelf: とてもシンプルで実用的なJSON CRDT
- Diffsync: 再帰的3-way mergeを使うCRDT+OT
- Tiny-Merge: 実用的なCRDTのよく設計されたライブラリ
- CR-SQLite: SQLiteを非常に有用なCRDTに変換
- Portals: あらゆるOTまたはCRDTのためのコピー、移動、ラップ操作
- Simpleton: あらゆるCRDT向けの非常にシンプルで高速な軽量クライアント
- 互換性:
- Automerge互換
- ShareDBおよびSync9互換
アプリケーション
- このWebサイト自体
- Peery View: BraidベースのP2P評判システム
- Quiet: torDTを使ったP2Pチャット
- Wiki
一緒に取り組む
- オープングループ。
- 2週間ごとにZoomリンクで一般会議を開催。
- 新しい進捗のデモ、標準の議論、分散Web構築のアプローチについて話し合う。
- 特別なトピックに関する中間会議も定期的に予定へ追加される。
標準の作り方
- IETFで公開作業している。
- BraidおよびHTTPメーリングリストで仕様を議論する。
- GithubでBraid仕様を編集できる。
- 問題があればGithubにissueを提出できる。
- アイデアがあれば仕様に書いてPull Requestを出せる。
- ラフコンセンサスに達するとPull Requestが受け入れられる。
- 標準議論の最新情報を得るには、メーリングリストを購読し、Githubを確認できる。
- 助けが必要ならMichael Toomimにメールすれば支援を受けられる。
Braidプロトコル
- Braidプロトコルは、複数の同期アルゴリズムが共通のネットワークプロトコルを通じて相互運用できるようにする。
- 今日の同期装置はそれぞれ異なるプロトコルを使っているが、そのネットワークメッセージは時間のバージョン、空間内の位置、時間範囲にまたがる空間パッチを伝達する。
- パッチ集合の構成は、数学的構造であるブレイドを形成する。
- Braidプロトコルは、すべての同期装置が時間の変化を表現し、一貫した状態へ解決できる標準メッセージ形式。
- データモデルを探索できるインタラクティブデモ:
- HTTP経由の同期に関心があるなら、プロトコル仕様を確認し、メーリングリストで意見を提供できる。
プロトコルロードマップ
- 現在のBraid仕様は、HTTPを2つの同期次元へ拡張している:
- レベル0: 今日のHTTP
- レベル1: プッシュ更新付きサブスクリプション
- レベル2: P2P一貫性(パッチ、バージョン、マージ)
- さらに次のP2P機能をプロトタイピング中だが、まだ標準化されていない:
- レベル3: P2Pセマンティクス(メソッド、検証、確認)
- レベル4: P2Pトランスポート(URL、命名、暗号化、ルーティング)
- 説明はmeeting-2でのMikeの発表を参照できる。
- 4つすべての領域で協力を歓迎する。
Braidが同期装置を相互運用可能にする
- Rafie WalkerはBraidプロトコルを使ってOTシステムとCRDTを同期している。
- WebSocket上にバベルフィッシュがあり、ShareDBのネットワークメッセージをBraidメッセージへ変換し、その逆も可能。
- ShareDBとSync9間のバベルフィッシュ:
- ライブで試せる。
- ShareDBプロトコルへの洞察を提供したSeph Gentleに感謝。
- このバベルフィッシュはほぼ完成しているが、2つの同期装置が異なるソート順で競合を解決する場合には対応していない。
- そのためには同じMerge-Typeを実装する必要がある(プロトコル仕様を参照)。
- Automerge、CRDTシステム向けのバベルフィッシュ設計も始まっている。
- 同期装置があるなら、Braid互換レイヤーの開発に向けて一緒に作業できる。
なぜ「Braid」なのか?
- Braidは、ビデオゲームBraidのようにWebへ歴史的なタイムトラベルを加える。
- World Wide Webの各ストランドを編み込み、Webをより厚く、強力で、堅牢にする。
- Web標準における同期および分散技術への複数の視点を一緒に織り込む。
- ブレイドは、同期装置に必要な情報を含む数学的構造であり、コンピュータデータ構造でもある。
- 編集をブレイドのパッチとして表現することで、複数の同期装置が相互運用できるようになる。
GN⁺の意見
- Braidプロトコルは、さまざまな同期アルゴリズムを統合できる強力なツールであり、分散システムで一貫性を維持するのに大いに役立つ可能性がある。
- CRDTとOTの両方をサポートする点は、共同編集アプリケーション開発者にとって非常に有用。
- Braid-HTTPの拡張は既存のWebアプリケーションへ容易に統合できるため、開発者が新技術を導入する際の大きな障壁になりにくい。
- Braidのオープンミーティングはコミュニティ参加を促進し、多様な意見を取り入れてより良い標準を作る機会を提供する。
- 多様な言語サポートにより、開発者は自分の好みの言語でBraidを使えるため、より多くの開発者が参加できる環境を整えられる.
1件のコメント
Hacker Newsの意見
Hacker Newsコメントまとめ
新しい braid-text ライブラリが近日公開予定
simpletonマージタイプを使用し、クライアント側の履歴オーバーヘッドがない。URL にバージョン番号を含めない
HTTP 拡張より既存標準を使いたい
partial PUTよりPATCHを使うほうが適切かもしれない。分散インフラに有利
より一般的なイベントストリーミングの目標の可能性
WebDAV との比較
用途に関する質問
関連リンク
リアルタイム専用かどうか
HTTP の特性