Skip to content
lamatsujun edited this page Mar 29, 2012 · 8 revisions

Introduction

Home >

ページ目次

構成

Castoro は、Client, Gateway 及び Castoro-Peer ( 以下、Peer ) の3つのコンポーネントで構成される。
各コンポーネントの役割は次の通り。

  • Client はアプリケーションが Castoro を利用するために必要なライブラリ
  • Gateway は中間に位置するコンポーネント
  • Peer は Castoro ストレージシステムがファイルを保存する主体となるコンポーネント

ユースケース

以下のような Client のユースケースに応じて Castoro システムを利用する。

  • Basket 作成
  • Basket 参照
  • Basket 削除

ユースケース別シーケンス

Basket 作成

Basket 作成時のシーケンスを以下に図示する。

  1. Client から CREATE パケットが UDP 通信により Gateway(master)(※以下 master) に送出される。
    この時、Client は Gateway からの応答があるまで、順次他の master に同様に送出する。
    • Gateway(island)(※以下 island) は事前に受けている Peer からの ALIVE パケットにより各 Peer の状態を把握している。
      また、master は island からの ISLAND パケットにより各 island の状態を把握している。
  2. master は、空き容量の大きい island へ優先的に CREATE パケットを送出する。
    island は、Client からの要求を満たす Peer 群を CREATE レスポンスとして返す。
  3. Client は、island からのレスポンスを受け、TCP 通信により Peer に CREATE リクエストを送る。
    Peer は作業ディレクトリを作成し、作業ディレクトリのパスを Client にレスポンスする。
  4. Client は、Peer から取得したパス情報を元に NFS あるいは HTTP によりファイルを配置する。
  5. ファイル配置終了の際、Client は、TCP 通信により Peer に FINALIZE リクエストを送る。
    Peer はリクエストを受け作業ディレクトリをアーカイブへ移動して Basket 作成を確定する。
  6. Peer は、 Basket 作成確定後 INSERT リクエストをマルチキャストにより送出する。
    island はリクエストを受け、自身の内包するキャッシュを成長させる。
  7. Peer は、レプリケーションにより他の Peer へ Basket の複製を作る。
    レプリケーションを完了した Peer も同様に INSERT リクエストを送出する。

Basket 参照

Basket 参照時のシーケンスを以下に図示する。

  1. Client から GET パケットが UDP 通信により master に送出される。
    この時、Client は Gateway からの応答があるまで、順次他の master に同様に送出する。
  2. master の挙動
    1. IslandId 付きの GET リクエストの場合
      • 該当 island へ GET リクエストをマルチキャストにより送出する。
        この時の GET リクエストは、Client から受けた GET リクエストをそのままリレーしている。
    2. IslandId なしの GET リクエストの場合
      • ブロードキャストにより全ての端末に GET リクエストを送出する。
  3. island 以降の挙動
    1. island のキャッシュに、該当 Basket の情報が在る場合。
      1. island から GET レスポンスを UDP 通信により Client に送出する。
        GET レスポンスには、該当 Basket とそのパス情報を載せる。
      2. レプリケーションが不完全な場合
        • island から Peer に、GET リクエストをマルチキャスト送信する。
          この時の GET リクエストは、master から受けた GET リクエストをそのままリレーしている。
    2. island のキャッシュに、該当 Basket の情報が存在しない場合。
      1. island から Peer に、GET リクエストをマルチキャスト送信する。
        この時の GET リクエストは、master から受けた GET リクエストをそのままリレーしている。
      2. 該当 Basket を有する Peer が GET レスポンスを UDP 通信により Client へ応答する。
      3. Peer は、GET 応答後 INSERT リクエストをマルチキャストにより送出する。
        island はリクエストを受け、自身の内包するキャッシュを成長させる。

Basket 削除

Basket 削除時のシーケンスを以下に図示する。

  1. Client は、先の Basket 参照シーケンスに基づき該当 Basket を有している Peer を特定する。
  2. Client は、特定した Peer へ DELETE リクエストを TCP 通信により送出する。
    Peer は、該当 Basket を削除してレスポンスを返す。
  3. Peer は、 Basket 削除確定後 DROP リクエストをマルチキャストにより送出する。
    Gateway はリクエストを受け、自身の内包するキャッシュから該当 Basket 情報を消去する。
  4. Peer は、レプリケーションにより他の Peer の Basket を削除する。
    レプリケーションを完了した Peer も同様に DROP リクエストを送出する。

ページTOPへ