P2Pとsubversion連携による 開発支援システムの開発

P2Pとsubversion連携による
開発支援システムの開発
(コードネーム:AirFolder)
井上誠一郎
アリエル・ネットワーク株式会社
目次
•
•
•
•
•
はじめに(用語の説明など)
AirFolderのユースケース+α
デモ
アーキテクチャ
まとめと今後
はじめに(用語の定義など)
• P2Pとは
• ソースコード管理、subversionとは
P2Pとは
• 対等な関係のノード(ピア)同士が作るネットワーク。
およびその上で動くアプリケーションのカテゴリ。
– 良く分からない場合、家のPCが他の家のPCと直接つな
がるイメージで良いです。
• 特徴
– スケーラビリティ to {ユーザ数|ファイル数|ノード数|コミュ
ニティ数|etc.}
– アドホック性 to {PC on/off|ファイルやプレゼンスの伝播
速度|サービス配置|etc.}
– フォルトトレランス to {PCダウン|ネットワーク障害|etc.}
ソースコード管理、subversionとは
• 複数人でソフトウェアを開発する時、誰がどん
な変更を行ったか等の記録を残したり、複数
系列の同時開発を支援するシステム。
• Subversion
– CVSのアーキテクチャを踏襲したクライアント・
サーバ型のソースコード管理システム(better
CVS)
– ローカル(クライアント)にコピーを持つ
(copy&merge戦略)
AirFolderのユースケース+α
• Commit前のファイル共有
• コードレビュー、commitのワークフロー
• 未来
– サーバ不要のソースコード管理?
– なんでも履歴管理
Commit前のファイル共有
subversionサーバ
update(download)
BUSY
+ sourceforgeは重い(ことがある) => 履歴管理とファイル交換の分離
(負荷分散)
+ Hさんはなかなかソースをcommitしない => コンパイルが通らない
コードでも進捗を見られる
コードレビュー、commitのワークフロー
subversionサーバ
commit
コードレビューよろしく
commit権限無し
サーバ不要のソースコード管理(+α)
commit
update(download)
どこからダウンロードしようと、どこにcommitしようと、位置透過だと格好いい
で、嬉しいの?
+ 数人で気楽にソースコード管理を始められるのは嬉しいかも
なんでも履歴管理(+α)
• あらゆるファイルが履歴管理できると嬉しい
(いつでもアンドゥ)
暗号化
暗号化
ローカルで作ったファイルがいつの間にかどこかで履歴管理。
インターネットアーカイブを、個人レベルで、信頼できる人の間で行うようなもの
人生はやり直せなくても、PC上の行いはやり直せるかもしれない…
消したい過去も消せないかもしれない…
デモ
アーキテクチャ
•
•
•
•
ネットワークモデル
データモデル
セキュリティ
モジュール構成
ネットワークモデル(1/4)
• flooding + small world + QRP + overlay
– ユーザコミュニティ数、ファイル更新頻度に対する
スケーラビリティ
– コミュニケーションに対するアドホック性の高さ
– 単一障害点が無いのでフォルトトレランスが高い
ネットワークモデル(2/4)
• 招待プロセス
•
LAN外ノードを探す時のパブリックノード
メール
(接続に必要な設定ファ
イルを添付)
• LAN内は自動で発見
• 論理ネットワーク
netid-a(128bit)
UDPブロードキャスト(マルチキャ
スト)で発見後、TCPで接続
netid-b(128bit)
コマンドパケット(on netid-b)
ネットワークモデル(3/4)
• QRP(Query Routing Protocol)
• コマンド伝播
Lookup
Lookup
Lookup
TCP(unicast)上の
overlayネットワーク
• lookup-hitとadvertisement
Lookup
Hit
Lookup
Hit
Bloom filter
あらかじめ、関心のあるリストを提示
コマンド伝播をブロック
x
• small worldモデル
ほとんどの伝播コマンドに
発信ユーザIDが載る
@see 通信セッションの暗号化
TCPセッション
Advt
Advt
新しい接続
ネットワークモデル(4/4)
• NAT越え[1]
NAT box
get
data
• NAT越え[3]、FW越え(HTTPカプ
セル化)
lookup
lookup
UPnP
NAT traversal
hit hit
gwreq
gwreq
• NAT越え[2]
lookup
中継ノード
Hit
pushreq
data
data
get
get
data
get
データモデル(1/4)
• 3 types, 2 classes,共通履歴スキーマ
所有ファイルの一覧
ファイル本体
#!/bin/sh
[file-id,last-rev]
[file-id,last-rev]
[file-id,last-rev]
スループット重視の拡散
(lookupドリブン)
レスポンス重視の拡散
(advtドリブン)
暗号化ストレージ
履歴管理(userid+time[us])
Size
Comment-1
ファイルメタ
Comment-2
Comment-n
データモデル(2/4)
• Conflict (almost) free merge
所有ファイルの一覧
[file-id,last-rev]
[file-id,last-rev]
[file-id,last-rev]
[id-a,rev1]
[id-b,rev1]
基本
+ 追加のみで動作(充分な時間が経過後にパージ)
+ アイテムはユニークIDを持つ
+ 履歴[マイクロ秒]の新しい方が勝つ
+ 削除はサイズ0で履歴を上げる
マージ
Aさん
[id-a,rev2]
[id-c,rev1]
Aさん
[id-a,rev2]
[id-b,rev1]
[id-c,rev1]
id-aに対応するファイルのrev1
の扱いはAさんの自由
データモデル(3/4)
• 依存解決による一括ダウンロード
Bさん
lookup (Bさんの所有リソース一覧)
Aさん
hit
[id-a,rev-x]
[id-b,rev-y]
[id-c,rev-z]
Semantic
filter
[id-a,rev-x]
[id-b,rev-y]
[id-c,rev-z]
id-a meta
id-b meta
id-c meta
id-a file
id-c file
データモデル(4/4)
• データフロー(AさんのPC)
所有者一覧
Aさんの所有一覧
[id-a,rev2,u-A,u-B]
[id-b,rev2,u-A]
[id-c,rev2,u-A]
[id-e,rev1,u-B]
[id-f,rev3,u-B]
[id-a,rev1]
[id-b,rev2]
[id-c,rev2]
ローカル
ファイルシステム
交換リソース
ビューキャッシュ
Bさんの所有一覧
リモート
[id-a,meta]
[id-b,meta]
[id-c,meta]
[id-e,meta]
[id-f,meta]
[id-a,rev2]
[id-e,rev1]
[id-f,rev3]
暗号化
ストレージ
同一スキーマの履歴管理
ローカルキャッシュ
UI
セキュリティ(1/3)
• CA(認証局)とユーザ認証
CA
X.509
DN:[email protected],dc=ariel-networks,dc=com
RSA鍵ペア生成
(@see rfc2377)
ディレクトリ
+ certでログイン時認証(ローカル)
+ CAは証明書期限を制御(CRL無しモデル)
+ X.509で属性証明書(AC)を代行
+ 証明書(公開鍵)の配布はディレクトリとP2P上のadvt
セキュリティ(2/3)
• データ暗号化と署名
復号化
復号化
復号化
ルーム(ユーザグループ)
[user-A,暗号化room key]
[user-B,暗号化room key]
[user-C,暗号化room key]
暗号化、署名
#!/bin/sh
暗号化
ストレージ
セキュリティ(3/3)
• 通信セッション暗号化
cert(pub-key)
Encrypted by fixed-key
session-key
Encrypted by pub-key
Encrypted by session key
session key d
session key a
session key c
session key b
モジュール図
AirFolder
wxWidgets(UI)
Ariel Framework(P2P)
Libapr(portability)
Windows
Expat(XML parser)
Openssl(security)
GNU/Linux
まとめと今後
• adhocにソースコードの履歴管理を始められる
• ASP(sourceforgeなど)で履歴管理する場合でも、負荷軽減
のためにファイル交換部分を分離できる
• 普及させないと意味が無い
–
–
–
–
普通のsubversionクライアントソフトとしてフリーで配布(予定)
知らずに、ファイルのダウンロードは隣のPCから行っていたり…
Subversionサーバが落ちていても誰も気づかなかったり…
実は初めからsubversionサーバなんて無かったり…
– どんなファイルも知らないうちにP2P上で履歴管理されていたり…(ス
パイウェア?)