KiZUNA: P2Pネットワークを用いた
マイクロブログサービスの実現
大阪市立大学 創造都市研究科
播磨 裕太 安倍 広多
石橋 勇人 松浦 敏雄
研究背景


マイクロブログサービスの普及
◦ Twitter, Weibo, Yammer, etc…



Twitter
◦ 月間アクティブユーザ: 2億4千万人超
◦ 日間ツイート数: 5億ツイート



既存のマイクロブログサービスは
サーバクライアントモデルで実現

2
研究背景 | 問題点(1)


サーバクライアントモデル
アクセスが
サーバに集中
サーバがダウンすると
サービスが停止する
(単一故障点の存在)
...
バルス!

バルス!

バルス! バルス!

3
研究背景 | 問題点(2)


高い運用コスト
◦ 大量のサーバなどが必要



Twitter Inc.
◦ 2013年第4四半期(10月-12月): 517億円の赤字

4
研究目的


Pure P2Pでマイクロブログサービスを実現
◦ 全ユーザの端末でTwitterのサブセットを実現

◦ サーバ不要
◦ 名称: KiZUNA


メリット
◦ 耐故障性(単一故障点の排除)
◦ 高いスケーラビリティ
◦ 低い運用コスト
5
KiZUNAで実現するTwitterの機能
Twitter | ツイート

140文字以内の短文
(ツイート)を投稿できる
7
Twitter | フォロー(購読)
フォローしてい
るユーザらのツ
イート

8
Twitter | ハッシュタグ
”#”から始まる文字列

9
Twitter | ハッシュタグ
「#IPSJ」に
言及している
ツイート

10
Twitter | 全文検索
「ソチ」を
含むツイート

11
Twitter | 検索ストリーム
「ソチ」を
含むツイート

Push型

12
Twitter | ログイン

ユーザの認証

13
Twitter | メッセージアーカイブ機能
ユーザの過去の
メッセージを取得

14
本研究の意義
関連研究


本研究

ツイートをフォロワーに
P2Pベースのマイクロブログサービス
配送する機能に該当 西尾らの 戸部らの
Megap
Cuckoo
hone
手法
手法
KiZUNAだけがサポート!
Hybrid ハッシュタグや Pure
Pure
Hybrid
P2Pの種類
購読者に
検索ストリームに該当
○
○
○
○
配送する機能

KiZUNA

Pure
○

内容に応じた配送

×

×

×

×

○

全文検索

×

×

×

×

○

メッセージの
アーカイブ管理

○

○

不明

不明

○

16
本研究の意義


高機能なマイクロブログサービスを
Pure P2Pで実現する方法を明らかにする
◦ マイクロブログサービス = Pub/Subパラダイムに
よってモデル化
 購読者にメッセージを配送
→トピックベースPub/Sub
 内容に応じたメッセージ配送
→コンテンツベースPub/Sub

同時に実現

 アーカイブ機能
→アーカイブ機能付きPub/Sub
17
KiZUNAの設計について
KiZUNA | 構造


後で説明

4つのSkip Graphベースの
構造化P2Pネットワークから構成
メッセージ配送用

検索ストリーム用

全文検索用

DHT用

すべてをSkip Graphベースで
実現することで実装コストを下げる

19
KiZUNA | ユーザの識別(1)

Twitterではスクリーンネーム
(ユーザが任意に設定可能で重複しない)
KiZUNAでも使うが…
重複しないことを保証したいが
サーバがないため難しい 20
KiZUNA | ユーザの識別(2)
重複しないIDが必要

乱数で生成した長いビット列を
IDとする(これをUIDと呼ぶ)
UIDの例: 582cd103-ee87-4b14-b57f-848a248de58c

UIDとスクリーンネームを併用
21
メッセージ配送の実現法
メッセージ配送 | 概要(1)
バルス!

A

Aのフォロワー

B C

...

X

フォロワー全員に配送しなければならない

一人一人に送るのは効率が悪い
Twitterで最もフォローされている
ユーザのフォロワー数は5000万人超

23
メッセージ配送 | 概要(2)
一人一人に送るのは効率が悪い

まとめて送信する
P2Pネットワーク(Skip Graph)上で
ALM(Application Level Multicast)により配送
24
メッセージ配送 | Skip Graphの構造
Level 3

Level 2

10

20

30

40

50

60

30
20

70
40

10

70

80

20 30

50

80

60
50

70

キー(昇順に並ぶ)
同一のコンピュータ(ノード)
10
40
60
80
Level 1
Level 0

10

20 30 40 50 60 70 80

000

100

110

010

101

001

111

011

25
メッセージ配送 | Skip GraphのALM
Level 3

10

20

[50, 80]へ
送信

Level 2

Level 1

Level 0

30
30

40

50

60

①

ホップ数: O (log n )
20
50

40

10

60

70

80

70
80
②

n : ネットワーク内の総ノード数
20 30

10

50

40

②

70

60

③

80

10

20 30 40 50 60 70 80

000

100

110

010

101

001

111

011

26
メッセージ配送 | 詳細(1)
購読者をある範囲に集めておけば
ALMでメッセージを配送できる

ユーザXがユーザYを購読する場合
XはYのUIDをキーとしてSkip Graphに挿入する

27
メッセージ配送 | 具体例
Aのフォロワー

Bのフォロワー

Cのフォロワー

C

B
A 分自身のキーは
自
UID:初めから挿入
10
UID: 20

UID: 30

フォロー関係を表したSkip Graph(Level 0部分)
キーを挿入しているユーザ

10

20

30

A

B

C

28
メッセージ配送 | 具体例
Aのフォロワー

Bのフォロワー

Cのフォロワー

Aを購読

B

A

C

B

UID: 10

UID: 20

UID: 30

BがAのUID(10)を挿入
フォロー関係を表したSkip Graph(Level 0部分)

10

10

20

30

A

B

B

C

29
メッセージ配送 | 具体例
Aのフォロワー

B

A

Bのフォロワー Cを購読
Cのフォロワー

C

B

UID: 10

UID: 20

A

UID: 30

AがCのUID(30)を挿入
フォロー関係を表したSkip Graph(Level 0部分)

10

10

20

30 30

A

B

B

C

A

30
メッセージ配送 | 具体例
Aのフォロワー

Bのフォロワー

B C

A
UID: 10

A C

B

Cのフォロワー

C

A

UID: 30

UID: 20

フォロー関係を表したSkip Graph(Level 0部分)
Aのフォロワー
Bのフォロワー Cのフォロワー

10

10

10

20 20 20 30 30

A

B

C

B

C

A

C

A

31
メッセージ配送 | 具体例
バルス!

Aのフォロワー

B C

A
UID: 10

Bのフォロワー

A C

B

Cのフォロワー

C

A

UID: 30

UID: 20

Bはこの範囲にALMする

フォロー関係を表したSkip Graph(Level 0部分)

10

10

10

20 20 20 30 30

A

B

C

B

C

A

C

A

32
メッセージ配送 | まとめ


購読
◦ 購読したいユーザのUIDを
キーとしてSkip Graphに挿入



配送
◦ 自身のUIDをキーの範囲としてALM



フォロワーが多くても効率が良い
◦ ホップ数は対数オーダー



配送時に購読していないノードを経由しない

※ハッシュタグに関する配送については割愛

33
メッセージアーカイブの実現法
メッセージアーカイブ | 背景(1)
過去のメッセージをいつでも取得したい

発信者自身が
過去のメッセージ
を保持
これだけでは発信者自身が
オフラインの場合は取得できない
35
メッセージアーカイブ | 背景(2)
発信者自身がオフラインの場合は取得できない

他のノード上に
メッセージの複製を持つ必要がある
DHTに複製を配置する?

コストがかかる
36
メッセージアーカイブ | 提案方式(1)
複製のためにコストをかけたくない

(オンラインの)フォロワーには
メッセージが配送されている
配送されたメッセージを複製
として保持しておけば良い

全員オフラインの場合に問題

37
メッセージアーカイブ | 提案方式(2)
発信者もそのフォロワーもすべて
オフラインだった場合はどうする?

オンラインのフォロワー数を一定以上に保つ

オンラインのフォロワー数が一定以下に
なったら誰かに強制的に購読させる
38
メッセージアーカイブ | 具体例
Aのフォロワー

A

B C

Bのフォロワー

B

Cのフォロワー

A C

C

A

UID: 30
UID: 10 Cのオンラインの
UID: 20
フォロワーが少ないGraph(Level 0部分)
フォロー関係を表したSkip
Cのフォロワー

無作為にオンラインの
10 10 10 20 20 20
ユーザを選ぶ

30 30 30

A B C B C A
Cを強制的に購読させる

C

A

X

39
メッセージアーカイブ | まとめ


フォロワーがメッセージの複製を保持する
◦ 余計なコストがかからない



常に一定数以上のフォロワー数を保つ
◦ 少なくなると強制的に購読させる

◦ フォロワーの右端のノードが
フォロワー数の判定と強制購読を担当

40
全文検索と検索ストリームの実現法
全文検索 | 概要


過去のメッセージを検索
KiZUNAではサーバがないためメッセージを
ユーザが分散して保持している
分散しているメッセージを
効率よく探す必要がある

BF Skip Graphを用いる
42
全文検索 | BF Skip Graphの概要


P2Pネットワーク上で全文検索を行うしくみ
◦ 各ノードは保持しているドキュメントを
Bloom Filterに登録
◦ 各ノードのBloom Filterを階層的に集約

IOT研究会なう
形態素解析

IOT

研究

会

なう
登録

Bloom Filter

43
全文検索 | BF Skip Graphの構造
Level 3

Level 2

Level 1

Level 0

10

20

30

40

50

60

30
20

10

70
40

20 30
10
10

70

80

50

60
50

40

80
70

60

80

20 30 40 50 60 70 80

44
全文検索 | BF Skip Graphの構造
Level 3

Level 2

Level 1

Level 0

10

「バルス」を検索 60
20
40
80
30
50
70

30
20

10

70
40

20 30
10
10

50

80

60
50

40

70
60

80

20 30 40 50 60 70 80
バルス

バルス

バルス

45
全文検索 | KiZUNAでは…


全文検索用の新たなSkip Graphを構成する



発信者自身がオフラインでも検索したい
◦ 複製を保持しているノードも参加
◦ フォロワーが一部だけが参加(で十分)

46
検索ストリーム | 概要


Push型検索
◦ 検索キーワードを登録しておく



検索ストリーム専用のBF Skip Graphを構成
◦ 検索キーワードをBloom Filterに登録する

◦ メッセージ配送時にマッチするかを調べ配送する

47
検索ストリーム | 具体例
Level 3

Level 2

Level 1

Level 0

10

「IOT研究会なう」をツイート
20
40
60
80
30
50
70

30
20

70
40

10
20 30
10
10

50

80

60
50

40

70
60

80

20 30 40 50 60 70 80
IOT

IA

IPSJ

なう

SITE

研究

加賀

48
発信者認証について
発信者認証 | 概要(1)
サーバなしで
ユーザを認証する必要がある

メッセージにデジタル署名を付与する

改ざん・詐称を
チェックできる

ユーザの公開鍵は
DHTに保存
50
発信者認証 | 概要(2)
通常のDHTは誰
でもデータを
書き換え可能

公開鍵が
改ざんされる
DHTにデジタル署名を付与
署名が付いているデータの書き換えは
署名付きのリクエストが必要

51
メッセージ配送のまとめ
メッセージ配送のまとめ
Aのフォロワーへ配送

A

IOT研究会
なう #IPSJ

ハッシュタグを抽出し配送
形態素解析しマッチする
BFを持つユーザへ配送

メッセージ配送用

Aのメッセージを受信した
全文検索用
ユーザがAの公開鍵で検証

検索ストリーム用

DHT用
53
実装について
KiZUNA | 実装


P2P基盤ソフトウェアPIAX上に実装中
◦ 実装済み
 Skip Graph
 BF Skip Graph
 メッセージ配送機能
 発信者認証機能

55
まとめ


Pure P2Pでマイクロブログサービスを実現する
方法を示した
◦ メッセージ配送にはSkip Graph上のALMを使用
◦ アーカイブ機能(複製機能)
◦ 全文検索・検索ストリームにはBF Skip Graphを使用



これにより…
◦ 耐故障性(単一故障点の排除)
◦ 高いスケーラビリティ

今後評価予定

◦ 低い運用コスト
56

KiZUNA: P2Pネットワークを用いた分散型マイクロブログサービスの実現