パフォーマンスとセキュリティのために、Antiwebは一群のunixプロセスである。本稿は異なるプロセスの役割と責任を述べる。
下図はプロセスと実行中のAntiwebシステムの責任を図示したものである。

ハブ(Hub)プロセス
ハブプロセスは通常、Antiwebシステムにおいてもっとも忙しいプロセスである。その責務は以下のとおり。
- unixソケットを通じて新しい接続を受け付ける。その接続はワーカープロセスにつなげられるか、あるいはスーパーバイザ接続につなげられるかする。
- インターネットからHTTP接続を受け付ける。リクエストされた仮想ホスト(vhost)に基づいて接続を適用すべきワーカーを決定し、接続から読み込んだデータをunixソケット越しにワーカーに流す。このプロセスで、ハブプロセス中のソケットを閉じるので、そのソケットはワーカーにおいてのみ開かれていることになる。
- ワーカープロセスからのすべてのログメッセージを受け取り、それをロガープロセスに転送する。
- プロセス間メッセージをルーティングする(たとえばスーパーバイザ接続)。
他にハブについて注記すること:
- ハブプロセスは、ハブ設定ファイルにおいて指定されたユーザないしUIDにおいて動作する。
- そのプロセスが権限を持たない空ディレクトリに対してchroot()される。
ロガー(Logger)プロセス
ロガープロセスはハブプロセスとunixソケットで接続している。その唯一の仕事はハブプロセスからログメッセージを受け取って、それらをディスクに書き込むことである。ワーカーがログプロセスを作ると、それがハブを通じてロガープロセスにルーティングされる。
- ハブ設定ファイルにおいて指定されたユーザないしUIDにおいて動作する。
- 書き込み権限を持つaw_logディレクトリにchroot()される。
- ロガープロセスはログファイルをchmod()するので、ログファイルは全体に読み書き可となることはけっしてない。
ワーカー(Worker)プロセス
ワーカープロセスはHTTPリクエスト処理の重量挙げを行なう。
- worker confに指定されたユーザないしUIDにおいて動作する。
- オプションとして chroot()される。
- クライアントソケットと接続して転送されるので、ワーカープロセスは後続のHTTPリクエストをこれらのソケットにおいて処理する。それらはハブを経由しない。
Antiweb Tip
なぜ複数のワーカーを動作させたいか?
- 権限を分けたvhosts
- SMP/マルチコア
- ディスクレイテンシの縮小
ハブによってそのワーカープロセスが関心を持つべきvhostsを登録すると、そのワーカープロセスはハブ接続を「ロック」して追加のvhostsを登録できないようにする。vhostsを後で追加するには、その接続は手動でスーパーバイザプロセスからアンロックしなければならない(これは、ワーカー設定を-reloadするときに舞台裏で起きることだ --- これと関係する unlikely attack の可能性を見よ)。正しくないワーカー設定を-reloadさせようとすると、Antiwebは新しい設定をインストールせず、もとの設定を使い続ける。ワーカー設定を-reloadしてそれが正しくコンパイルされたが、HTTPリクエストの処理中に何かエラーが生じた場合、Antiwebはワーカーを殺してその理由をsyslogに記録する。