Upload
yusuke-fujisaka
View
1.749
Download
0
Embed Size (px)
Citation preview
資料の前に•↓ソースコードはこちら↓•http://code.google.com/p/fujene/
1
2011年5月30日月曜日
P2P distributed-search engineYusuke FUJISAKA
2011年5月30日月曜日
検索システム•[ここでは]大量の文章から共通の言葉
(→クエリ)を探し出すシステム
•「できるだけたくさん」の中から「できるだけ早く」みつけだす
3
2011年5月30日月曜日
検索システムを作る•データ構造•インデックス・検索のしかた•スケールアウト方法•バックアップ•etc...
4
2011年5月30日月曜日
必要なこと?1.GB(~TB)オーダーのデータを保持する2.高負荷に耐える3.データが絶対に消えないこと4.実用的な速度
5
2011年5月30日月曜日
既存の検索システム•Namazu•Senna•Lucene•Solr•Hyper Estraier• ...
6
2011年5月30日月曜日
いままでの課題点•クリティカルポイント
•管理ノードが死んだら…?
•インデックス作成までのタイムラグ•リアルタイム検索エンジンもあるけど
7
2011年5月30日月曜日
Fujene(仮称)•特徴:
•マスター・スレーブが存在しない• P2Pの考えを用いたノード間連携
•リアルタイムインデックス機能•インデックス構造を定義可能•自己最適化
8
2011年5月30日月曜日
新しい名前?•考えてみた →FARE system
• Fast →高速(・リアルタイム)
• Autonomous →自律
• Retrieval →検索
• Engine →エンジン
• system
9
2011年5月30日月曜日
動作の流れ順に•起動時•レプリケーション•インデックス•検索•終了時•強制終了時
10
2011年5月30日月曜日
起動時•単独動作⇔協調動作をシームレスに行う•ワンタッチでノード追加!
11
2011年5月30日月曜日
起動時•設定ファイルにインデックス構造ほかを書いて起動
Content = TitleContent = BodyAppendix = IDAppendix = URL
Fujene --primary SettingFile
2011年5月30日月曜日
ノード追加•起動しているノードのIPを指定するだけ
•設定とデータがコピーされる
10.0.1.5
Fujene --secondary 10.0.1.52011年5月30日月曜日
起動の流れExisting node
New node ノードリスト取得ノード登録要請
レプリ範囲計算
インデックスコピーインデックス・検索開始
2011年5月30日月曜日
起動
AF
B
E
D
C
2011年5月30日月曜日
起動
AF
B
E
D
C必要なデータ範囲
2011年5月30日月曜日
起動
AF
B
E
D
C必要なデータ範囲
コピー
2011年5月30日月曜日
Replicate chain•Chord chain[1]を応用:
•各ノードがハッシュ値をもつ• Consistent hash[2]の要領でレプリケート
•冗長化でデータの一貫性を保つ
2011年5月30日月曜日
Chord chain
AF
B
C
E
D2011年5月30日月曜日
Chord chain
AF
B
C
E
D
Hash: 0xEF459AB...
2011年5月30日月曜日
Topic: 仮想ノード•1台にたくさんハッシュを割り振る
•物理ノード1台あたりの請負範囲を平準化する
2011年5月30日月曜日
仮想ノードなしの例:
2
3
1Node 1: 56%
Node 3: 24%
Node 2: 20%
2011年5月30日月曜日
仮想ノードなしの例:
2
3
1Node 1: 56%
Node 3: 24%
Node 2: 20%
過大な負荷
2011年5月30日月曜日
仮想ノードあり:
2
31
3
1
1
2
12
31
21
2
Node 1 56% 42%Node 2 20% 32%Node 3 24% 26%
2011年5月30日月曜日
仮想ノードあり:
2
31
3
1
1
2
12
31
21
2
Node 1 56% 42%Node 2 20% 32%Node 3 24% 26%
平準化!
2011年5月30日月曜日
Indexing•文章・単語のハッシュから 受け入れノードを決定する
•インデックス追加時点で検索対象になる•形態素解析は設定(実装も)可能
•既存の形態素解析エンジン: Sen(=MeCab)
•文字ごと分割: Bi-gram, Uni-gram
•いずれ自作形態素解析を!
2011年5月30日月曜日
Indexing•結果的に各ノードは別々のインデックスを持つことになる
•利用不能になったときの話は後述
2011年5月30日月曜日
Indexing
AF
B
C
E
D
ID: 12345Title: ...Body: ...URL: ...
RPC/API(予定)Content
TermTerm
2011年5月30日月曜日
Indexing
AF
B HashE
D
Hash直後のノードに保存
Content
C
2011年5月30日月曜日
Indexing
AF
B
E
D
C
責任範囲(replication=3)
2011年5月30日月曜日
インデックス構造…Skip pointer
…Dictionary
Invert index …
…Skip pointer
Content …Appendix…
ID
2011年5月30日月曜日
インデックス順序…Skip pointer
…Dictionary
Invert index …
…Skip pointer
Content …Appendix
(16)
(14)
(15)
(13) Lookup
(12)
(8) Lookup
(9) Lookup
(11)
(10)
(1)(4)
(7)
(6)(5)
(2) Lookup
(3) Lookup
2011年5月30日月曜日
•トランザクショングループ:
• Contents ... (1)~(7)
• Dictionary ... (8)~(12)
• Invert index ... (13)~(16)
•すべての処理が終わるとはじめて検索結果に反映される
インデックス順序
28
2011年5月30日月曜日
Searching•サーバ役のノードが形態素解析→単語ごとに検索要求を投げる
•サーバ役が検索結果をとりまとめる→本文を各ノードに要求する
•またサーバ役がまとめてクライアントに返す
29
2011年5月30日月曜日
Term
TermTerm
Searching
AF
B
C
Query
E
D
Analyze
2011年5月30日月曜日
Searching
AF
B
C
E
D
ID: 12, 24, 35, 49, ...
ID: 12, 30, 49, 55, ...
Intersection
ID: 7, 12, 30, 49, ...
2011年5月30日月曜日
Searching
AF
B
C
E
D
ID: 12
ID: 49
Output
2011年5月30日月曜日
検索順…Skip pointer
…Dictionary
Invert index …
…Skip pointer
Content …Appendix…
ID
Query
Output Output2011年5月30日月曜日
ノード終了時•終了の仕方は正常・異常に関わらず同じ流れ
•各ノードが消滅ノードを自分で判断して動作する
2011年5月30日月曜日
生存確認
AF
B
C
E
D
beacon
2011年5月30日月曜日
生存確認
AF
B
C
E
D
“live”
2011年5月30日月曜日
生存確認
AF
B
C
E
D
ノード不具合 ×
××
2011年5月30日月曜日
生存確認
AF
B
C
E
D
×
××
残存ノードでレプリケーション
1
2
34
5
6
2011年5月30日月曜日
コピー例A B C D E F4 5 6 1 2 3
5 6 1 2 3 4
6 1 2 3 4 5
3 4 5
レプリケーション数を保持
2011年5月30日月曜日
Future work•まだまだ未実装なところが
•バックアップ機能・リバート•ノード・システム全体の一時停止
• メンテのため一部停止はありうる• Web appをつくる
• インターフェイスを考える•複数システムの協調
40
2011年5月30日月曜日
Topic: システム階層
41
窓口
通信
解析・整理
格納場所
2011年5月30日月曜日
Topic: システム階層
42
Index Server
Node Manager /Search Gather
Store/Lookup, Query Parser
Memory/Disk Blocks
Search Server
2011年5月30日月曜日
Topic: Intersection•結果件数: r1, r2, ..., rnとしてO(∑ r)でできる
•以下の例でちょっと実証
r1 1 4 6 10 12 16 22 29 30 31 37 40 43 47r2 2 4 6 9 12 14 26 30 32 37 43 44 47 50r3 4 5 6 10 11 12 23 27 30 37 39 41 43 47
2011年5月30日月曜日
Topic: Intersection1.比較ポインタをそれぞれの先頭に置く2.比較
2.1.違うなら一番小さい数字のポインタを次に2.2.合っていれば格納、全ポインタを次に進める
r1 1 4 6 10 12 16 22 29 30 31 37 40 43 47r2 2 4 6 9 12 14 26 30 32 37 43 44 47 50r3 4 5 6 10 11 12 23 27 30 37 39 41 43 47
2011年5月30日月曜日
Topic: メモリプール
45
MemoryBlockPool
Skip Pointer Invert Index Content
…
withdraw deposit
2011年5月30日月曜日
Bibliography(1)(1) I. Stoica, et al.; Chord: A Scalable Peer-
to-peer Lookup Service for Internet Applications; SIGCOMM 2001; October 2001
(2) D. Karger, et al.; Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web; STOC ’97; 1997
46
2011年5月30日月曜日
Bibliography(2)(3) C. D. Manning, et al.; An Introduction to
Information Retrieval; Cambridge UP; 2009
(4) T. Luu, et al.; ALVIS Peers: A Scalable Full-text Peer-to-Peer Retrieval Engine; P2PIR ’06; Nov. 2006
47
2011年5月30日月曜日