-
Notifications
You must be signed in to change notification settings - Fork 3
Introduction
lamatsujun edited this page Mar 29, 2012
·
8 revisions
Home >
Castoro は、Client, Gateway 及び Castoro-Peer ( 以下、Peer ) の3つのコンポーネントで構成される。
各コンポーネントの役割は次の通り。
- Client はアプリケーションが Castoro を利用するために必要なライブラリ
- Gateway は中間に位置するコンポーネント
- Peer は Castoro ストレージシステムがファイルを保存する主体となるコンポーネント
以下のような Client のユースケースに応じて Castoro システムを利用する。
- Basket 作成
- Basket 参照
- Basket 削除
Basket 作成時のシーケンスを以下に図示する。
- Client から CREATE パケットが UDP 通信により Gateway(master)(※以下 master) に送出される。
この時、Client は Gateway からの応答があるまで、順次他の master に同様に送出する。- Gateway(island)(※以下 island) は事前に受けている Peer からの ALIVE パケットにより各 Peer の状態を把握している。
また、master は island からの ISLAND パケットにより各 island の状態を把握している。
- Gateway(island)(※以下 island) は事前に受けている Peer からの ALIVE パケットにより各 Peer の状態を把握している。
- master は、空き容量の大きい island へ優先的に CREATE パケットを送出する。
island は、Client からの要求を満たす Peer 群を CREATE レスポンスとして返す。 - Client は、island からのレスポンスを受け、TCP 通信により Peer に CREATE リクエストを送る。
Peer は作業ディレクトリを作成し、作業ディレクトリのパスを Client にレスポンスする。 - Client は、Peer から取得したパス情報を元に NFS あるいは HTTP によりファイルを配置する。
- ファイル配置終了の際、Client は、TCP 通信により Peer に FINALIZE リクエストを送る。
Peer はリクエストを受け作業ディレクトリをアーカイブへ移動して Basket 作成を確定する。 - Peer は、 Basket 作成確定後 INSERT リクエストをマルチキャストにより送出する。
island はリクエストを受け、自身の内包するキャッシュを成長させる。 - Peer は、レプリケーションにより他の Peer へ Basket の複製を作る。
レプリケーションを完了した Peer も同様に INSERT リクエストを送出する。
Basket 参照時のシーケンスを以下に図示する。
- Client から GET パケットが UDP 通信により master に送出される。
この時、Client は Gateway からの応答があるまで、順次他の master に同様に送出する。 - master の挙動
- IslandId 付きの GET リクエストの場合
- 該当 island へ GET リクエストをマルチキャストにより送出する。
この時の GET リクエストは、Client から受けた GET リクエストをそのままリレーしている。
- 該当 island へ GET リクエストをマルチキャストにより送出する。
- IslandId なしの GET リクエストの場合
- ブロードキャストにより全ての端末に GET リクエストを送出する。
- IslandId 付きの GET リクエストの場合
- island 以降の挙動
- island のキャッシュに、該当 Basket の情報が在る場合。
- island から GET レスポンスを UDP 通信により Client に送出する。
GET レスポンスには、該当 Basket とそのパス情報を載せる。 - レプリケーションが不完全な場合
- island から Peer に、GET リクエストをマルチキャスト送信する。
この時の GET リクエストは、master から受けた GET リクエストをそのままリレーしている。
- island から Peer に、GET リクエストをマルチキャスト送信する。
- island から GET レスポンスを UDP 通信により Client に送出する。
- island のキャッシュに、該当 Basket の情報が存在しない場合。
- island から Peer に、GET リクエストをマルチキャスト送信する。
この時の GET リクエストは、master から受けた GET リクエストをそのままリレーしている。 - 該当 Basket を有する Peer が GET レスポンスを UDP 通信により Client へ応答する。
- Peer は、GET 応答後 INSERT リクエストをマルチキャストにより送出する。
island はリクエストを受け、自身の内包するキャッシュを成長させる。
- island から Peer に、GET リクエストをマルチキャスト送信する。
- island のキャッシュに、該当 Basket の情報が在る場合。
Basket 削除時のシーケンスを以下に図示する。
- Client は、先の Basket 参照シーケンスに基づき該当 Basket を有している Peer を特定する。
- Client は、特定した Peer へ DELETE リクエストを TCP 通信により送出する。
Peer は、該当 Basket を削除してレスポンスを返す。 - Peer は、 Basket 削除確定後 DROP リクエストをマルチキャストにより送出する。
Gateway はリクエストを受け、自身の内包するキャッシュから該当 Basket 情報を消去する。 - Peer は、レプリケーションにより他の Peer の Basket を削除する。
レプリケーションを完了した Peer も同様に DROP リクエストを送出する。