設計上の注意 ------------ マルチスレッド ++++++++++++++ 1つの DTS サーバにつき、1つ以上の RI が動作する。 このとき RI は同一の TCP ソケットからリクエストを受け取る。 処理性能向上のために、RI をマルチスレッドで動作するように設計することを推奨する。 RI の要件 +++++++++ RI には主に機能が求められる。 1. リクエストを受け付ける 2. ハンドオーバーを実行する 3. 候補ノードの追加・削除 4. ハンドオーバー先ノードを選出する 1 の機能は一般的なサーバと同様にクライアントからのリクエストを受け付けるものである。 2 については DTS が提供する API を利用する。 3 の候補ノードの追加・削除は、dtsd の自動構成機能と関連が深い。 DTS クラスタに参加するノードの死生監視は dtsd が行い、 dtsd はこの機能を通じて RI 上のハンドオーバー候補ノードの構成を行う。 4 のハンドオーバー先ノードの選出については、Round Robin方式、乱数利用、ハッシュ値利用など 様々なスケジューリングアルゴリズムが考えられる。 これらのアルゴリズムをサーバの目的に応じて切り替えが可能なようにするために、 スケジューリングアルゴリズムの抽象化を行うと良い。 このチュートリアルではこの抽象層として :ref:`dispatcher` を実装する。 この :ref:`dispatcher` は RI から受けたノードリストの更新と選出のリクエストを処理する。 なお、本チュートリアルでは1つの RI 上では単一の :ref:`dispatcher` が動作するものとする。 本チュートリアルにおける前提条件・仕様 ++++++++++++++++++++++++++++++++++++++ * HTTP リクエストにのみ対応する * 開発言語は C 言語である