京都 Google Wave
プロトコル勉強会
北村研二
今日の内容
Google Wave で使用するプロトコル
Google Wave の通信
クライアント
Wave サーバ Robot プロキシ
Linky (Link Agent)
Spelly
(Sppeling Agent)
ロボット(GAE)
ロボット(GAE)
ロボット (GAE)
Wave サーバ
Wave サーバ
Federation Protocol
C/S プロトコル
Robot Protocol
?
Google Wave Federation Proto
col
Wave サーバ同士を接続するプロトコル
XMPP をベースにしている。
Federation Protocol のプロトタイプ実装 である FedOne は XMPP サーバの OpenFire の拡張として実装してある。
具体的な内容は次の URL
http://www.waveprotocol.org/draft-protocol -specs/draft-protocol-spec
XMPP とは
Extensible Messaging and Presence Pro tocol
Jabber と言うオープンソースのインスタ ントメッセンジャーのプロトコル、クラ イアント、サーバの総称
Google Talk でも使われている。
http://ja.wikipedia.org/wiki/Jabber
http://ja.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol
C/S プロトコル
Wave サーバと Wave クライアントとの間 の通信プロトコル
まだドラフトも出ていない
Google Wave Robot Wire Protocol
(Robot Protocol)
ウェーブに対し、 HTTP 経由で操作するロ ボット用のプロトコル
ウェーブからロボットへは JSON
ロボットからウェーブへの操作は JSON-R PC
Google Wave Federation Arc
hitecture
Wave プロバイダ
Wave プロバイダとは、 Wave のサービス を提供するサーバである。
Wave プロバイダは、ドメイン名で識別される
。
Wave ユーザは、ユーザ名とそのドメイン名で 識別される。これを Wave アドレスという (ken
Wave アドレスはグループ、ロボット、ゲート ウェイやその他のサービスにも割り当てられ る。
ウェーブとウェーブレット
ウェーブ (wave)
各ウェーブは、グローバルなレベルでユ ニークとなる ID を持ち、これをウェーブ ID と言う。
wavesandbox.com!w+xxLE8vZZA
一つのウェーブに複数のウェーブレット が含まれる。
ウェーブレット (wavelet)
ウェーブレットは、ウェーブ内でユニー クな ID を持つ。
googlewave.com!conv+root
googlewave.com!conv+UmuWGB8kC
ウェーブには、複数のウェーブレットが 存在し、一つの中にドメインが違う
ウェーブレットが存在する場合もある。 その場合はウェーブレット ID を見ると、 どの Wave プロバイダでホスティングされ ているかわかる。
ウェーブレットのドメイン
ルートのウェーブレット
作成したユーザのドメイン
プライベート返信ウェーブレット
作成したユーザのドメイン
( ルートのウェーブレット以外のドメインの ユーザが作成した場合 )
ユーザデータウェーブレット
それぞれのユーザのドメイン
プライベート返信ウェーブレッ
(private reply wavelet) ト
ウェーブ内で、特定のユーザとだけ共有 されるウェーブレット
ユーザデータウェーブレットと同じく、 そのウェーブレットの参加者がいる Wave プロバイダとだけ共有する。
ユーザデータウェーブレット
(user-data wavelet)
既読、未読の情報のようにユーザごとに保存さ れるべきデータはユーザデータウェーブレット に保存される。
ユーザデータウェーブレットの参加者は当然そ のユーザだけなので、他の Wave プロバイダと は共有しない。
Wave プロバイダ Wave プロバイダ ウェーブ
ウェーブレ
ット ウェーブレット
ユーザデー タウェーブ レット
ウェーブレット は Wave プロバ
イダ毎にコピー がある
ユーザデータ はコピーされ
ない
複数の Wave プロバイダが存在
する場合のウェーブ
ウェーブレットには次の 2 種類がある
ローカルウェーブレット
ある Wave プロバイダで、その Wave プロバイダの ユーザが作成したウェーブレット
リモートウェーブレット
他の Wave プロバイダのウェーブレットのコピー
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ ユーザ
1, 作成 2, 閲覧
複数の Wave プロバイダにまた
がるウェーブに対する書き込み
A の Wave プロバイダのウェーブレットに 対し、 B の Wave プロバイダのユーザが操 作する。
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
3,OT 1, オペレーション
2, オペレーションの転送
4,変換、適用されたオペレーシ ョン
5, コピーに適 用
フェデレーションゲートウェイ
フェデレーションプロキシ と
Wave プロバイダ間で送受信する際に使用 するコンポーネント
フェデレーションゲートウェイ
ローカルウェーブレットに関する操作を担当 する。
フェデレーションプロキシ
リモートウェーブレットに関する操作を担当 する。
フェデレーションゲートウェイ
(1)
ローカルウェーブレットに対して行った 操作を、リモート参加者 ( 他の Wave プロ バイダの参加者 ) が所属する Wave プロバ イダにプッシュ ( 通知 ) する。
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
1, オペレーショ ン
2,変更の通知 ( オペレ ーションの伝達 )
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
フェデレーションゲートウェイ
(2)
ローカルウェーブレットに対して適用し たオペレーションの履歴のリクエストに 応える
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
2,オペレーションの 履歴をリクエスト
1,A のローカルウェーブレ ットに新しく参加
3,オペレーションの 履歴
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
フェデレーションゲートウェイ
(3)
ローカルウェーブレットに対する変更操 作の受付
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
2,オペレーション
1, 操作 ( テキスト編集な ど )
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
フェデレーションプロキシ (1)
リモートウェーブレットをホスティング している Wave プロバイダからプッシュさ れたオペレーションを受信
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
1, オペレーショ ン
2,変更の通知 ( オペレ ーションの伝達 )
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
フェデレーションプロキシ (2)
リモートウェーブレットの古いオペレー ションを、ホスティングしている Wave サーバにリクエスト
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
2,オペレーションの 履歴をリクエスト
1,A のローカルウェーブレ ットに新しく参加
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
フェデレーションプロキシ (3)
リモートウェーブレットに対する操作を ホスティングしている Wave プロバイダに 送信
Wave プロバイダ (A) Wave プロバイダ (B) ローカルウェーブレ
ット リモートウェーブレット
ユーザ
2,オペレーション
1, 操作 ( テキスト編集な ど )
この図にはデータ ( ウェーブレット ) とオペレーションの伝達につ いて注目しているため、ゲートウェイとプロキシは描いていません
。
ゲートウェイ、プロキシの通信
Google Wave Federation Architecture 日本語訳 ( 参考資料参照 ) より引 用
Google Wave Federation Protocol
XMPP を用いている。
トランスポート層で暗号化している。
トランスポート層以外で、データ ( オペ レーション ) の検証ができるようになっ ている。
偽装や改変の防止
通信の例 (1)
ウェーブレットの変更
<message type="normal" from="wave.initech-corp.com" id="1-1" to="wave. acmewave.com">
<request xmlns="urn:xmpp:receipts"/>
<event xmlns="http://jabber.org/protocol/pubsub#event"> <items>
<item>
<wavelet-update xmlns="http://waveprotocol.org/protocol/0.2/wa veserver" wavelet-name="acmewave.com/initech-corp.com!a/b">
<applied-delta><![CDATA[CiI...MwE] ]></applied-delta> </wavelet-update>
</item> </items> </event>
</message>
通信の例 (2)
変更の応答
<message id="1-1" from="wave.acmewave.com" to
="wave.initech-corp.com">
<received xmlns="urn:xmpp:receipts"/>
</message>