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上で履歴管理されていたり…(ス パイウェア?)
© Copyright 2024 ExpyDoc