FrankenPHP
Apache + CGI時代
ApacheとPHPは別プロセス
1リクエストに対してApache 1プロセス + php 1プロセス
課題
リソースを潤沢に使いすぎる
Apache + mod_php時代
ApacheにPHPを統合
1リクエストに対してApache 1プロセス(PHPプロセスの生成・破棄がなくなった)
課題
当時のApacheはpre-fork(1リクエスト1プロセス)でCPUコア数よりプロセス数が多くなると処理待ちだった
nginxはイベント駆動(1リクエストnプロセス)ができた(スケーラビリティ問題の改善)
masterプロセスがプロセスを再利用する
その後Apacheもイベント駆動に対応
非同期処理でスケーラビリティ⬆️
課題
その後、コンテナ技術の普及ど複数コンテナで1アプリが普通の時代に
php-fpm, webの2つのコンテナが必要
水平スケールでコンテナ間の設定の同期が面倒
FrankenPHP
GoのWebサーバーcaddyにPHP実行環境を組み込む PHPのプロセスはCaddyで処理する
FastCGIは使わない
Goのマルチスレッドを使う
Apache + mod_phpのアプローチの現代版
柔軟性を捨てる
cgoを使ってgoからcを呼び出して繋いでいる(フランケンシュタイン)
コンテナが1つでいいので設定が楽。Caddyの恩恵を受けられる