【IIS7】 Tech・Ed 2008 セッション振り返り(08)

管理系は終わりまして、今回から構築支援系、メディア系、その他といきます。
まずは、PHP の環境を構築する上で非常に便利で安定化をもたらす新しい FastCGI モジュールです。

アイテム №7
「FastCGI Extension for IIS6.0」

(アイコンなし)

説明

FastCGIをサポートするポピュラーなアプリケーションフレームワークを IIS6.0 で良いパフォーマンスで安定して動作させることができる拡張

特徴

●FastCGI プロセスを通じたノン スレッドセーフアプリケーション環境の安定実行(例:PHP)
●FastCGI 拡張、FastCGI プロセスに関しての構成設定
●IIS6.0の安定

ベネフィット

Linux を想定しているアプリケーション フレームワークがマルチプロセスを同時実行性のアプローチとして採用している中、それらをマルチスレッドを採用している Windows で安定、高速動作させることができる

利用可能 OS

Windows Server 2003 SP2 (IIS 6.0)
Windows Server 2003 x64 edition (IIS6.0) 

Windows Vista SP1とWindows Server 2008ではビルトイン

その他前提条件

IIS6.0 がインストールされていること

入手先

https://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&DisplayLang=en

https://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/
で記載されているように、もう既にVista用、2008用にはUpdateがあります。

開発ステージ

製品版(RTW)

ドキュメンテーション

Running PHP Applications
https://learn.iis.net/page.aspx/24/running-php-applications/


セッションより

PHPを例にあげると、今までもWindows+IIS環境でPHP利用環境を構築する手順はインターネットを探すと見つかりました。専らそれらはISAPIエクステンションとしてPHP.NETで提供されているDLLを設定して構築する手順です。

ここで事前知識が必要なんですが、ISAPIのDLLが好まれた理由はWindowsのアプリケーション実行環境とLinuxのアプリケーション実行環境の違いを知っておく必要があります。UNIX系のOSでは専らプロセス単位でアプリケーションは実行されるモデルなんですが、Windowsではプロセスの中で複数のスレッドと呼ばれる単位で動作する設計になっています。このことからUNIX系では想定の必要の無い、スレッド間での同期処理やスレッド間での競合を解決する必要がWindowsのプログラミングの難度の高いものでは必要になります。.NETを使用した開発では.NETのフレームワークがこういう煩わしいところをカバーしてくれるため、実はみんなあまり意識していないのですが、中ではそういうことが行われているわけです。

このことからUNIX系の生い立ちを持った言語たちはWindows環境に適用するセカンドステップが必要になり、PHPも例外ではなく、ISAPI拡張を提供してきたわけです。ちなみに ASP.NET も aspnet_isapi.dll とISAPI拡張で動作してきましたのである意味、構造的には同じです。結局、どんどんPHPの拡張機能としてのライブラリが開発されていっていますが、Windows環境においてはマルチスレッド対応(スレッドセーフ)が必要であり、すべてのライブラリがその対応ができているとは断言できないため、ISAPI設定でPHP環境をWindowsで構築して不安定なため、Give Upした人も結構いらっしゃるのではないでしょうか。

一方で、ISAPIのほかにCGIというモデルがあります。しかし、CGIモデルには致命的なプロセスをリクエスト毎に起動するという重大なオーバーヘッドを抱えています。このため、やはり性能面ではCGIよりはISAPIを採用したくなってしまうレベルのものでした。ただ、CGIの場合にはプロセスをリクエスト毎に起動するため、前述のマルチスレッド対応をしなくても原理的に安定して動作します。

こういう状況の中、UNIXの世界でも注目されてきたプロセスをプールして再利用するという発想、FastCGIが登場しました。IISの開発チームはZend社と協業する中で、このFastCGIのモデルで構築できるコンポーネントを開発しました。これにより、安定してパフォーマンス面でも心配の無い新しいIISでのPHP(FastCGIで動作する言語であればどれでも)利用環境を構築できます。

前置きが長かったですが、このFastCGI Extension for IIS6.0はその流れの中で開発されたものです。IIS6.0、つまり Windows Server 2003ではこのモジュールを適用するわけですが、Windows Vista 製品版用には別のモジュール、Windows Server 2008/Windows Vista SP1については標準装備なのでOSからCGIを選択してインストールするとFastCGIも一緒にインストールされます。

感想

IIS6.0用とIIS7.0用では設定方法に違いがあります。これはIIS7.0がモジュール構造に進化しているからで設定がより簡単に、且つ柔軟になっています。IIS7.0であればIISの出力キャッシュを使ってかなりのパフォーマンスが出せますのでスーパー厳密なトランザクション処理が必要な場合以外では今後、試していただくに足る環境に成長していると思います。このキャッシュについては下記の投稿をご覧ください。

【IIS7】 MSC2008 セッションより (おまけ)

余談

私はPHPの達人ではありません。なので、PHPに熟達された方々に色々なご意見をお聞きするように努力を続けています。PHP on IISのサイトでご紹介するセミナーや技術記事をこの領域の情報収集が必要な方にはお薦めしておきます。「IIS7.0を極める」シリーズも引き続き、若干今スローなペースですが、確実に数を増やしていきます。(私が。。。)

PHP on IIS あなたの可能性を広げる、Windows環境へ