FPMってなんの略
たぶん初学者がPHPでなにか開発したい、そうだdockerだとなったときにまず出てくるこの言葉。いったいなんなのでしょうか。よくわからずに使ってる人も多いとは思いますが、最初にこのFPMとはなんの略でしょうか。
FastCGI Process Manager
そこで疑問が、FastCGIって何?
そもそもCGIって何?
Common Gateway Interface
HTMLはあくまで文書です。ですので動的に画面上の数字を変えたり表示される画像を変更したりはHTML単体ではできません。HTML単体ではできることはだいぶ限られてきます。
やっぱり動的にやりたいじゃないですか。商品をカートに追加するとか、購入ボタンぽちーって押したら購入完了になるとか。
そこで登場するのがCGI
込み入った話はともかくとして、WEBサーバ側から何かしらのプログラムを呼び出して実行した結果を返す仕組みのことをCGIといいます。
ただCGIには問題があって・・・
- リクエストごとにCGIプロセスを立ち上げる必要がある
- つまり毎回CPUリソースを消費するんです
- プロセス立ち上げるのは思ってる以上にCPUリソースが必要なのです
- アクセス数が多いサイトだと、CPU負荷が上がって死ねる
- apacheモジュールだと、apacheの再起動するときに気をつけないといけない
この問題を解決したのがFastCGIです
FastCGIでは
- FastCGIサーバがCGIプロセスを管理する
- プロセスを毎回立ち上げない
- 一度上げたプロセスはしばらくおいておく
- プロセス立ち上げの負荷が抑えられる
- WEBサーバと分離してるのでアプリケーションサーバだけ立ち上げ直すということが可能
WEBサーバとは別のFastCGIサーバ(アプリケーションサーバ)がこの管理をするのでWEBサーバはユーザからのアクセス処理に専念できるというわけです。
FPMはFastCGIのPHP実装ということです
つまるところFPMはphpをFastCGIとして実行するためのアプリケーションサーバということです。
phpはスレッドではなくてプロセスで処理されるためにCGIの仕組みそのものと言っても過言ではないですが、このphp-fpmを利用することでまるでマルチスレッドで動いているかのような振る舞いができます。
終わりに
FPMは高負荷時で普通にやったら遅くなるPHPを効率よく実行するための仕組みです。