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ではこれらが分離され開発しやすくなり生産性が向上する。
アプリケーション同士を完全に隔離
アプリケーションや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やキャッシュ機能によるパフォーマンス向上の恩恵は受けられる。
|
|