6. Dispatcher

6.1. 概要

Dispatcher は RI に呼び出され、転送先ノードに関する処理を実行する。 特に転送先ノードの選出について、固有のアルゴリズムを持つ。

6.2. ノードリスト

Dispatcher は転送先ノードの候補一覧であるノードリストを保持する。 ノードリストは選出アルゴリズムによって様々な形式が考えられる。 以下に RoundRobin 形式などで簡単に利用できるノードリストの例を示す。

struct node {
    struct node *next;
    uint32_t addr;
};

struct node_info {
    struct node *node_list;
    struct node *last_node;
    uint32_t default_target;
};

上記の例の場合、他の node 構造体ポインタ変数のアドレスをメンバ変数 next へ 格納することで動的なノードリストを構築できる。

なお、RI がマルチスレッドで動作する場合は、ノードリストの操作時にロックを かける必要があるだろう。

6.3. ノードの追加・削除

RI が dtsd からノードの追加・削除の指示を受けた場合、 Dispatcher はノードリストへノードの追加・削除を行う。 このとき、ノード情報の実体を追加・削除するだけでなく、生死状態を表す フラグを切り替えるなどの手法も考えられる。 またノードの追加方法として、RI の起動オプション経由でノードリストの元となる 文字列を渡すなどする方法も可能である。

6.4. ノードの選出

ノードリストからアルゴリズムに従って転送先ノードを選出する。 RI が解析したリクエストから選出に必要な情報(メソッドや User agent など)を 元にノードを選出することも可能である。

Table Of Contents

Previous topic

5. メインスレッド処理概要

This Page