Kahua Release
- Release Note
- Download
- Current Version 1.0.7.3 (2008-05-08)
kahua-web Release
- kahua-webとは
- Release Note
- Download
- Current Version 0.3.1 (2007-06-12)
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に対してリクエストを送ります。
- kahua-spvrはリクエストヘッダのx-kahua-workerフィールドの値から 対象となるアプリケーションを選択し、そのアプリケーションを構成する ワーカプロセスからひとつを選んでリクエストを転送します。 現在は単純にラウンドロビンしています。
- ワーカプロセスは転送されてきたリクエストを処理し、 kahua-spvrにレスポンスを返します。レスポンスにはセッションキーが含まれています。
- kahua-spvrはワーカプロセスから送られたレスポンスをクライアントに 転送します。
- ひとたびセッションが開始されたら...
- クライアントはセッションキーから、どのワーカプロセスが自分のセッションを 担当しているかを知り(つまり、そのワーカプロセスが開いているサーバソケットの 場所を知り)、以降はそのワーカプロセスに対して直接リクエストを送ります。
- ワーカプロセス受け取ったリクエストを処理し、クライアントにレスポンス および更新されたセッションキーを返します。
- セッションが終了した場合(つまり、クライアントの状態を保持する
必要がなくなった場合)は、ワーカプロセスはセッションキーを持たない
リプライを返してもよいことになっています。その場合クライアントは、
次回のリクエストをkahua-spvrに対して送ることになります。
この方式のメリットは、セッション開始後はkahua-spvrをバイパスするので kahua-spvrがボトルネックにならないことです。一方アーキテクチャ的には、 セッションキーとしてワーカプロセスによって使われるopaqueな情報と、 クライアントがワーカプロセス(のサーバソケット)を見付けられるようにするための情報とを 持たせる必要があって、ちょっと複雑になります。