Servers

English page

Kahua Release

kahua-web Release

Security Advisory

Event Log

Documentation

For developers

Site info

Related Site

kahua-spvr(スーパバイザサーバ)をひとつ起動すると、 同時にいくつかのプロセスが起動します。ここでは、 それぞれのプロセス(プログラム)がどのような役割を 担っているかを説明します。

サイトのプロセス構成

ひとつのkahua-spvr(スーパバイザプロセス)とその支配下にあるプロセス群を 「サイト」と呼んでいます。

各プログラム/プロセスの役割

  • kahua-spvr:
    • 最初に起動し、セッション管理を行うkahua-keyservと、app-serversファイルの 記述に従ってしかるべきアプリケーションをロードしたkahua-serverを起動します。
    • kahua-adminからのリクエストに従って、kahua-serverの起動、終了、アプリケー ションファイルの再ロードなどを行います。
    • Kahuaクライアントとのセッションにおいて、固定エントリへのリクエストを 受けつけ、しかるべきワーカプロセス(kahua-server)にディスパッチします。
  • kahua-keyserv:
    • kahua-spvrから起動される、セッション情報を保持管理するプロセスです。 各ワーカは、クライアントとのセッション情報をkahua-keyservに対して問い 合わせたり、保存したりします。
    • 同一サイト内であれば(つまり同じkahua-keyservと通信しているなら)異なる ワーカやアプリケーション間でセッション情報を共有することができます。
  • kahua-server:
    • kahua-spvrから起動されるKahuaアプリケーションの本体です。アプリケーション コードをロードして起動し、実際のサービスを行います。
    • ひとつのアプリケーションに対して複数のkahua-serverを起動することが できます。各kahua-serverプロセスは、そのアプリケーションのワーカプロセス と呼ばれます。

サイト内のプロセス間通信

  • kahua-spvrは、Kahuaクライアント(kahua-adminやkahua.cgi、kahua-httpdなど) からの接続を受けつけるためのサーバソケット(現在はUNIXドメインソケット)を、 既知の場所にオープンします。このソケットをKahuaソケットと呼びます。
  • kahua-spvrが起動するプロセス群(kahua-server、kahua-keyserv)も、プロセス毎に 固有のサーバソケット(現在はこれもUNIXドメインソケット)をオープンします。 kahua-spvrは各子プロセスを起動後、これらのソケットの場所(UNIXドメインソケット のパス)を子プロセスから受け取り、プロセスとの対応を内部に保持します。
  • kahua-keyservの通信相手は各kahua-serverです。kahua-serverは、起動時に kahua-spvrからkahua-keyservのサーバソケットの場所を受け取ります。そして、 クライアントのセッション情報をkahua-keyservに問い合わせたり、保存したり します。
  • kahua-serverの通信相手はkahua-spvrもしくは各種Kahuaクライアントです。

Kahuaクライアントとの通信

ここでの「Kahuaクライアント」とは、cgiブリッジ(kahua.cgi/kahua.fcg)や HTTPサーバ(kahua-httpd)のことです。サーバ管理プログラム(kahua-admin) やシェル(kahua-shell)は少し事情が違います。

  • クライアントが初めて接続する際 (session initiating request) は、 まず既知のKahuaソケットに接続し、kahua-spvrに対してリクエストを送ります。
    1. kahua-spvrはリクエストヘッダのx-kahua-workerフィールドの値から 対象となるアプリケーションを選択し、そのアプリケーションを構成する ワーカプロセスからひとつを選んでリクエストを転送します。 現在は単純にラウンドロビンしています。
    2. ワーカプロセスは転送されてきたリクエストを処理し、 kahua-spvrにレスポンスを返します。レスポンスにはセッションキーが含まれています。
    3. kahua-spvrはワーカプロセスから送られたレスポンスをクライアントに 転送します。
  • ひとたびセッションが開始されたら...
    1. クライアントはセッションキーから、どのワーカプロセスが自分のセッションを 担当しているかを知り(つまり、そのワーカプロセスが開いているサーバソケットの 場所を知り)、以降はそのワーカプロセスに対して直接リクエストを送ります。
    2. ワーカプロセス受け取ったリクエストを処理し、クライアントにレスポンス および更新されたセッションキーを返します。
    3. セッションが終了した場合(つまり、クライアントの状態を保持する 必要がなくなった場合)は、ワーカプロセスはセッションキーを持たない リプライを返してもよいことになっています。その場合クライアントは、 次回のリクエストをkahua-spvrに対して送ることになります。

この方式のメリットは、セッション開始後はkahua-spvrをバイパスするので kahua-spvrがボトルネックにならないことです。一方アーキテクチャ的には、 セッションキーとしてワーカプロセスによって使われるopaqueな情報と、 クライアントがワーカプロセス(のサーバソケット)を見付けられるようにするための情報とを 持たせる必要があって、ちょっと複雑になります。

Copyright (c) 2003-2007 Kahua Project Contact | About Us