CGI/SAPI/FastCGI
PHPを動かす方法。
http://fuzzytolerance.info/code/cgi-vs-sapi-vs-fastcgi/
このページを部分的に和訳してみた。
2006年の記事だからもしかしたら少し情報が古いかもしれない。
CGI(Common Gateway Interface)
CGIはウェブサーバから外部のアプリケーションを使うための標準規格。
原則はこう
メリット
- 安定性
- phpが実行エラーを起こしても単にそのプログラム自体が終了するだけ。
デメリット
- パフォーマンス
- リクエストを受ける度にプロセスを起動するから
SAPI(Server Application Programming Interface)
IISの場合は(ISAPI)と呼ぶ。
Webサーバのダイレクトモジュールインタフェースの総称。
PHPプログラムはWebサーバのプロセス内で動く。
たとえば
ISAPIでPHPを使う == PHPはIISのプロセスの中で動く
デメリット
- 移植性
- WebサーバによりSAPIの仕様が異なるため。
- 不安定
- Webサーバを巻き込んで落ちるということが起こり得る。
- スケーラビリティ
- セキュリティ
- Webサーバと同じ権限で走るため。
FastCGI
CGIの良い点はそのままにパフォーマンスを改善しよう、というもの。
基本的にはCGIのラッパー。
WebサーバはFastCGIモジュールとやりとりし、FastCGIはTCP越しにphp-cgi.exeとやりとりする。(ので分散もできる)
FastCGIはWebサーバを起動するときに特定数のCGIプロセスを起動する。
リクエストが増えるとともにCGIプロセスの数を増やしていったり、ということもできる。
メリット
- パフォーマンス
- CGIでネックになっていたプロセス起動というオーバーヘッドがない
- 安定性
- セキュリティ
- Webサーバプロセスの外で動くため、にも対処している。
- スケーラビリティ
- プロセスを違うマシンに分けることもできるのでスケールしやすい。