HTTPをカーネル・モードで動作

表1●IIS 6.0の主な変更点

 強化されたのはセキュリティだけではない。信頼性/可用性やパフォーマンスも向上している。IISのプロセス・モデルを大幅に改良したことが大きく寄与している(表1[拡大表示])。

 IIS 6.0では,IIS 5.0のコア・プロセスであるINETINFO.EXEを3つのプロセスに分離している(図4[拡大表示])。HTTPの処理をする「HTTP.SYS」,Webアプリケーションの実行環境となる「W3Core」,Webアプリケーションの制御・監視を行う「WAS(Web Administration Service)」である。この中で最も大きな変更点は,HTTP.SYSをカーネル・モードで動作するモジュールとして分離したことだ。

 IIS 5.0では,HTTPの送受信を実行するとき,TCP/IPモジュールからデータを受け取るたびに,カーネル・モードからユーザー・モードへのモード切り替えが発生していた。一般にモード切り替えはオーバーヘッドが大きいため,速度向上のボトルネックになる。IIS 6.0ではHTTPの送受信処理をカーネル・モードに移したほか,処理したWebページをキャッシュする機能を搭載した。キャッシュにヒットした場合はそのデータをHTTP.SYS内で処理して返信する。ユーザー・モードのアプリケーションとのやり取りは発生しないため,ユーザー・モードへの切り替えが発生しない。これによりWebページの実行が高速化された。

 IIS 6.0は,ASPの最新バージョンであるASP.NETをサポートするため,Webアプリケーションの処理速度も向上する。ASPはインタープリタで実行していたが,ASP.NETではコンパイル処理で実行するからだ。また,従来はWebアプリケーションのロジック処理のコードと画面のデザインを表すHTMLのコードが混在していたが,ASP.NETではこれらが分離され開発しやすくなり生産性が向上する。

図4●改良されたIIS 6.0の実行モデル
IIS 6.0では,IIS 5.0のコア・プロセスであるINETINFO.EXEを,(1)HTTPの処理をする「HTTP.SYS」,(2)Webアプリケーションの実行環境「W3Core」,(3)Webアプリケーションの制御・監視を行う「WAS(Web Administration Service)の3つに分離した。最大の特徴は,HTTP処理部分をカーネル・モードで動作するモジュールとして分離したことだ。処理したWebページをキャッシュする機能を搭載しており,キャッシュ内で処理が完了した場合はユーザー・モードへの切り替えが発生しない。
 
図5●アプリケーション同士を完全に隔離する「ワーカー・プロセス分離モード」
IIS 5.0ではアプリケーションの一部を別のプロセス(DLLHOST.EXE)に分離することは可能だがWebアプリケーション同士を完全に隔離することはできなかった。IIS 6.0は個別のワーカー・プロセスを起動してアプリケーション同士を完全に隔離できる。ワーカー・プロセス分離モードでは,複数のワーカー・プロセスを持つ「Webガーデン」も利用できる。

アプリケーション同士を完全に隔離

 アプリケーションやISAPIフィルタ*ISAPIエクステンション* の実行環境となるW3Coreの特徴となる機能は,ワーカー・プロセス分離モードだ(図5[拡大表示])。ワーカー・プロセス分離モードは,ユーザー・コードとIISのコア・プロセスを完全に分離し,信頼性/可用性を高めるための技術だ。

図6●複数のワーカー・プロセスを持つ「Webガーデン」の設定
最大何個のワーカー・プロセスを持てるかを指定できる。マルチプロセッサ・マシンの場合,各CPUごとに特定のワーカー・プロセスを割り当てることもできる。

 IIS 5.0ではアプリケーションの一部を別プロセスに分離することは可能だが,Webアプリケーション同士を完全に隔離することはできなかった。これに対して,IIS 6.0では,ワーカー・プロセスと呼ばれる,各アプリケーションの実行プロセスを起動し,アプリケーション同士を完全に隔離できる。各アプリケーションは別のプロセスで実行されるため,他のアプリケーションによる影響を受けない。

 ワーカー・プロセス分離モードでは,複数のワーカー・プロセスを持つ「Webガーデン」も利用できる(図6[拡大表示])。あるワーカー・プロセスがフリーズして応答しなくなったとしても,他のワーカー・プロセスがHTTP.SYSにあるキューからリクエストを取り出してサービスを引き続き提供できる。

 あるワーカー・プロセスが応答しなかったり,メモリー・リークが発生していたりする場合,そのワーカー・プロセスを適時再起動することも可能だ。分ごとや要求回数ごとに設定できるほか,時刻も指定できる(図7[拡大表示])。

 さらにワーカー・プロセス分離モードには,ラピッド・フェイル保護と呼ばれる機能がある(図8[拡大表示])。これは,特定のアプリケーションが立て続けにクラッシュした場合,自動的にそのアプリケーションを停止させるものだ。デフォルトでは,5分間にプロセス・エラーが5回発生すると,そのアプリケーションは停止される。

 ワーカー・プロセス分離モードのほかに,既存のアプリケーションとの互換性を持つ「IIS 5.0分離モード」も用意されている。IIS 5.0と同様に,インプロセス*のアプリケーションはINETINFO.EXE内で動作し,アウトプロセス*のアプリケーションはDLLHOST.EXE内で実行される。ただし,このモードを使っても,カーネル・モードで動作するHTTP.SYSやキャッシュ機能によるパフォーマンス向上の恩恵は受けられる。

図7●ワーカー・プロセスのリサイクルの設定
ワーカー・プロセスのリサイクルは,分ごとや要求回数ごとに設定できるほか,時刻も指定できる。
 
図8●ラピッド・フェイル保護の設定
特定のアプリケーションが立て続けにクラッシュした場合,自動的にそのアプリケーションを停止する。デフォルトでは,5分間にプロセス・エラーが5回発生すると,停止される。

(小野 亮=akono@nikkeibp.co.jp)