コア・クライアント: 有限状態機械(FSM) |
Last modified 7:09 PM UTC, June 09 2004
|
コア・クライアントは様々な活動(ファイル転送、計算、
RPCでスケジューリングサーバを呼び出す)を、並行して行う
ことができます。 この並列動作を管理するために、コア・クライアントは、
いくつもの有限状態機械(FSM)訳注1
によって組み立てられています。 たとえば、HTTPでの一回のやりとりは、
以下のような状態を含むFSMで表現されます。
- コネクションの確立を待っている状態
- 要求ヘッダー部の送信[が終わるの]を待っている状態
- 要求ボディ部の送信[が終わるの]を待っている状態
- 応答ヘッダー部の受信を待っている状態
- 応答ボディ部の受信を待っている状態
- 終了
特定のタイプのFSMを[まとめて]管理するのが、FSM コンテナです。
各 FSM コンテナ は 一群のFSMを管理し、poll() 機能を提供する
ことによって、状態遷移の検出と実行を助けます。
これらの機能は、ノンブロッキングです。 つまりこれらの機能は、
もっとも低いレベルでは、selelct() によるアクセスを通じて、
ノンブロック型のネットワークソケットを扱わねばなりません。
コア・クライアントは以下のFSMタイプを使います。
-
NET_XFER (コンテナ名は NET_XFER_SET).
個々のインスタンスは、1つのネットワークコネクションに対応します。
これらのネットワークコネクションと、メモリまたはディスクファイルとの
間で、データがやり取りされます。
poll() 関数は、select() を使って、ブロックすることなしに
FSM を管理します。
-
HTTP_OP (コンテナ名は HTTP_OP_SET).
個々のインスタンスは、1つのHTTP 操作 (GET, PUT または POST)に対応します。
-
FILE_XFER (コンテナ名は FILE_XFER_SET).
個々のインスタンスは、進行中の1つのファイル転送(アップロードまたはダウンロード)
に対応します。
-
PERS_FILE_XFER (コンテナ名は PERS_FILE_XFER_SET).
個々のインスタンスは、1つの「パーシステントファイル転送」に対応します。
パーシステントファイル転送は、サーバ障害やコネクション切断からの
回復を行うものです。 [そのため]、再試行と打ち切りの手順を実装しています。
-
SCHEDULER_OP.
この種類のものは、インスタンスは1つだけです。
このインスタンスは、スケジューリング・サーバとの通信をカプセル化します。
その中には、試行間隔拡大と再試行の手順を含んでいます。
-
ACTIVE_TASK (コンテナ名は ACTIVE_TASK_SET).
個々のインスタンスは、走っている1つのアプリケーションに対応します。
1つのFSM は他のFSMを(複数可)使って実装していることがあります。
たとえば、FILE_XFER は HTTP_OP を使っていますし、HTTP_OPは、
NET_XFER を使って実装されています。
- (訳注1):FSM
- Finite State Machine