特集 Windows Server 2003完全ガイド
アーキテクチャを一新した新世代アプリケーション・サーバ

2.IIS 6.0の概要(2)

田口景介
2003/02/07

 それでは、IISを構成する3つのブロックについて、解説していくことにしよう。

■カーネル・モード・ドライバ(HTTP.SYS)
 クライアントからのリクエスト(要求)を受け付け、適切なアプリケーションへと転送するのがHTTP.SYSの仕事だが、このモジュールの特徴は、カーネル・モード・ドライバとして実装されていることだ。もっと簡単に、ドライバとして実装されている、と表現しても良い。これは、従来は1つのサーバ・アプリケーションに過ぎなかったIISが(OSから見ると、単なるユーザー・モードのアプリケーションに過ぎなかった)、IIS 6.0からは部分的にOSと統合されたということを意味している。詳しいことは不明だが、IISとは切り離して、HTTP.SYSの機能だけを単独で利用するインターフェイスが今後公開される可能性も考えられる。

 HTTP.SYSがカーネル・モード・ドライバとして独立して実装された利点の1つは、すでに述べたように、ユーザー・モードで実行されるワーカー・プロセス(アプリケーションを処理するプロセス)と分離することによって、ほかのプロセスから受ける、安定性を損ねるような悪影響を排除できることだ。たとえ1つのワーカー・プロセスが動作不能に陥ったとしても、HTTP.SYSと残りのワーカー・プロセスが正常動作できれば、被害を最小限にとどめることができる。

 またカーネル・モードで動作することによって、ユーザー・モードとの遷移(に伴うオーバーヘッド)を抑え、パフォーマンスを向上させる効果も期待できる。HTTP.SYSはリクエストのキューイングとアプリケーションへのルーティングだけでなく、キャッシュの管理も行うため、キャッシュにヒットしたリクエストは、ユーザー・モードへ遷移することなく、カーネル・モードだけで処理されることになるので、大きな性能向上が期待できる。

HTTP.SYSの機能
クライアントとの通信は、カーネル・モード・ドライバとして実装されたHTTP.SYSが担当する。そのほか、アプリケーションに依存しないキャッシュ管理やログの記録などもHTTP.SYSで処理される。

■ワーカー・プロセス
 たった1つですべてのリクエストとレスポンスの面倒を見るHTTP.SYSに対して、アプリケーション・コードを処理するために、必要に応じて複数生成されるプロセスが「ワーカー・プロセス(worker process)」である。ASP.NETやASP、ISAPIエクステンション、それにISAPIフィルタといったコードは、すべてワーカー・プロセスで処理されるため、システムを不安定にさせる要因を最も作りやすいブロックだ。そこで、ほかのブロックから隔離するだけでなく、ワーカー・プロセスを複数起動することによって、ワーカー・プロセス同士の独立性も確保できる仕組みとなっている。これはIIS 5.0になかった大きな特徴だ。こうしてワーカー・プロセスを複数起動すれば、各アプリケーションを個別のプロセスとして実行できるため、不具合発生時にもそのワーカー・プロセスが終了するだけで済む。悪影響がシステム全体へと波及するのを防げるだけでなく、同一サーバ上で稼働するほかのアプリケーションを巻き添えにして停止することも回避できる。そのほかにも、ワーカー・プロセスを分離しておけば、アプリケーションごとに適したプロセス・パラメータを設定する、特定のアプリケーションだけを停止あるいは再起動するなど、管理面においても数多くのメリットを得ることができる。このIIS 6.0で新規に導入されたアーキテクチャは、「ワーカー・プロセス分離モード」と呼ばれている。

 ワーカー・プロセス分離モードは、以上のように、主にシステムの安定性を目的として利用されるが、逆に1つのアプリケーションに対して、複数のワーカー・プロセスを割り当て、マルチプロセッサ・システムでの運用効率向上に利用することもできる。この構成ならば、非常に限定的な条件でワーカー・プロセスがクラッシュしても、残りのワーカー・プロセスが処理を継続できるため、アプリケーションが完全に停止せずに済むという利点もある。

 このように、ワーカー・プロセスとアプリケーションの割り当てを柔軟にコントロールできるようにしたワーカー・プロセス分離モードは、安定性と可用性、さらにスケーラビリティまでも向上させるアーキテクチャである。

ワーカー・プロセス分離モード
IIS 6.0では、ユーザーの要求に応じて、アプリケーションとワーカー・プロセスの割り当て状態を自由に変更することができる。初期状態では、複数のアプリケーションを同一ワーカー・プロセスで処理するが、安定性を重視するために、各アプリケーションを個別のワーカー・プロセスで処理することもできる。また、マルチプロセッサ・システムを有効に活用するために、1つのアプリケーションを複数のワーカー・プロセスで分担して(複数のプロセッサで分担して)処理することもできる。

 アプリケーションとワーカー・プロセスの割り当て状態は、この図のようにいろいろな組み合わせにすることができる。

  1. 複数のアプリケーションを同一ワーカー・プロセスで処理(初期状態)
      従来のIISに最も近い状態。1つのワーカー・プロセス内で複数のアプリケーションが稼働している。1つのアプリケーションが異常終了すると、同じワーカー・プロセス内に存在するすべてアプリケーションが影響を受ける。

  2. 各アプリケーションを個別のワーカー・プロセスで処理(安定性重視)
      アプリケーションごとに個別のワーカー・プロセスを割り当てた状態。あるアプリケーションが異常終了しても、そのワーカー・プロセスが終了するだけで、ほかのワーカー・プロセスに影響を与えない。また、ワーカー・プロセスごとにパラメータをチューニングしたりできる。

  3. 1つのアプリケーションを複数のワーカー・プロセスで処理(マルチプロセッサ・システムを有効に活用)
      マルチプロセッサ・システムでは、1つのアプリケーションに対して複数のワーカー・プロセスを割り当てることもできる。各ワーカー・プロセスを異なるプロセッサに割り当てることにより、パフォーマンスを向上させることができる。

■WSA
 最後に残ったブロックが、IIS全体の管理と監視を担う「WSA(WWW Service Administration and Monitoring Component)」である。このブロックは、β3の段階では単に「WWW Service Administration」と呼ばれていたが、現在は後ろに「and Monitoring Component」が追加された名称で呼ばれている。その後は特に略名が決められていないようだが、ここでは便宜上WSAと呼ぶことにする。

 WSAの主な役割は、IISの管理インターフェイスを提供することだが、注目すべきはヘルス・モニタリング(動作状態を定期的にチェックする機能)やラピッド・フェイル保護(ヘルス・モニタリングの結果によるプロセスの再起動がひんぱんに起こる場合は、回復の見込みなしとして、再起動をそれ以上行わないようにする機能)といった、IIS自身によるステータス監視システムである。ワーカー・プロセスが長時間ブロックしてしまったとき、大量のメモリ・リークを発生させているとき、CPU時間を過剰に消費しているとき、こうしたパフォーマンスを低下させるような症状が発生すると、WSAがそれを検出し、ワーカー・プロセスを自動的に再起動することができる。さらに、特に不具合が検出されなくても、起動してから一定時間経過したとき、あるいは一定数のリクエストを処理したとき、ワーカー・プロセスを再起動することも可能だ(リサイクル機能)。指定したしきい値を超えるほどではないメモリ・リークなどは、ヘルス・モニタリングに検出されることはないが、必要ならこのリサイクル機能によって解消できる。

IIS 5.0プロセス分離モード

 以上のように、基本的アーキテクチャから抜本的に再設計されたIIS 6.0は、IIS 5.0と比較すると相当量のコードが書き直されていることは間違いない。だが、そうなると心配されるのは、IIS 5.0との互換性だ。ASPやASP.NETの互換性は比較的保たれているようだが、いずれも機能拡張が行われているため、移行を検討しているのであれば、十分な動作検証は欠かせないだろう。またコード・レベルでは問題がなくても、管理面での仕様変更が影響を及ぼす可能性もある。例えばIIS 5.0+ASP.NETの環境では、コードはaspnetアカウントの権限で動作していたが、IIS 6.0ではより制限されたNetworkServiceアカウントで処理されるようになっている(アカウントの変更は可能)。このため、場合によってはリソースへのアクセス時に問題が発生する可能性がある。また、MIMEマップに登録されていない拡張子のファイルが配信できなくなったことなど、細かな修正が既存コードに影響する可能性もあろう。

 こうした互換性の問題を解決するため、IIS 6.0には「IIS 5.0プロセス分離モード」と呼ばれる互換モードが用意されている。

IIS 5.0プロセス分離モード
IIS 5.0との互換性を重視したモード。ワーカー・プロセスやアプリケーション、FTP/SMTPサービスなどはすべて1つのInetinfo.exeの中に含まれている。IIS 6.0で提供される多くの機能は利用できなくなるが、IIS 5.0用アプリケーションはすべて動作するとされる。ただしIIS 5.0プロセス分離モードは、ワーカー・プロセス分離モードと同時に併用することはできない。

 このモードでもHTTP.SYSがカーネル・モード・ドライバとして機能する点ではワーカー・プロセス分離モードと同じだが、すべてのアプリケーションはIIS 5.xと同じく、同一のプロセス空間で実行される。また、WSAによるヘルス・モニタリングなどの監視サービスはすべて無効化される。

 IIS 5.0プロセス分離モードを利用すれば、IIS 6.0で追加されたさまざまなサービスは利用できないものの、IIS 5.0との高い互換性を手に入れることができる。なお、モードを切り替えることはいつでも可能だが、共存させることはできない。

 大部分のユーザーにとって、今回のバージョンアップは、予想以上の規模に感じられるのではないだろうか。IIS 6.0の堅牢性やスケーラビリティなどは魅力的だが、移行を計画するのであれば、IIS 6.0を構造から理解し、そのメリットとデメリットをよく把握しておく必要があるだろう。また、IIS 6.0への移行はWindows Server 2003への移行をも意味するため、IIS 6.0自身の互換性だけでなく、Windows NTやWindows 2000とWindows Server 2003の互換性も考慮しなければならないことはいうまでもない。

 次回は、今回述べたようなIIS 6.0の各種の新機能について、より詳細に見ていくことにする。End of Article


 INDEX
  [特集]Windows Server 2003完全ガイド
  新世代アプリケーション・サーバ:IIS 6.0
     1.IIS 6.0の概要(1)
   2.IIS 6.0の概要(2)
 
目次ページへ  Windows Server 2003完全ガイド


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間