前からほそぼそとP2P掲示板を開発していて、いろいろな実装上の問題があったので難儀していたけれど、解決法を見付けたので記録する。
要約
- 従来の分散型掲示板では、書き込みの内容の同期が困難であるという問題があった
- Gitをはじめとする分散バージョン管理システムは、分散しながらコミットの順序を保持できる
- 分散型掲示板の書き込みログの順序保持にGitを利用することで、書き込みの順序がバラバラになる問題を解決できる
P2P掲示板
いわゆる2ちゃんねる型の掲示板をP2P分散掲示板として再構築する場合、ただ内容をDHTなどで分散するというアプローチを採ると、書き込みの内容の同期が取れずレスアンカーにずれが出るなどの問題が発生する。表示される書き込みの順序も受信した順になるので安定しない。
Git
似たような問題はバージョン管理システムにも存在していた。分散バージョン管理システムでは、一度プッシュ先から変更をプルし、それをマージして先方にプルしてもらうというアプローチをとる。変更にコンフリクトがある場合は、プル要求を拒否する。つまりプッシュ先レポジトリさえ分かれば、安全にレポジトリに変更を加えることができる。
P2P掲示板へのGitの応用
この分散型バージョン管理のアプローチは掲示板に適用することができる。書き込みを示すデータ(ファイルの追加でもテキストファイルへの追記でもよい)を追加してこれをコミット、基幹となる上位レポジトリにプルしてもらう。書式等のチェックを行い、問題無ければプルリクエストを受け入れる。これでスレッドが分岐する心配が無くなった。