C拡張PhalconでPHPを限界まで高速化するする方法
通常、PHPフレームワークは同じシナリオに従います。HTTPリクエストごとに、インープリタは数十のファイルを読み込み、パースし、バイトコードにコンパイルして実行します。OPcacheが有効な場合でも、クラスの初期化、ルーティング、依存コンテナのアセンブリに関するシステムオーバーヘッドは解消されません。
2011年、開発者たちは反対側からアプローチすることを決定しました。フレームワーク全体を直接PHP用のC拡張にコンパイルしたらどうでしょうか?こうしてPhalconが誕生しました。フレームワークコードをディスクから常に読み込む代わりに、PhalconはPHPプロセス自体の一部としてRAMに存在します。
Phalconとは
Phalconは、Cモジュールにコンパイルされたフル機能のPHP用MVCフレームワークです。コードでは、馴染みのあるクラスと名前空間のセットのように見えます:Phalcon\Http\Request、Phalcon\Mvc\Model、またはPhalcon\Di。通常のPHPコードを書き、フレームワークメソッドを呼び出すと、C速度で処理が行われます。
開発アーキテクチャは丁寧に設計されています。純粋なCでPHPの拡張機能を書くことは難しく、メモリのデバッグも困難です。メンテナーたちの生活を楽にするために、作者たちはZephirというコンパイル可能な言語を作成しました。その構文は、型ヒント付きのPHPとC#のブレンドに似ています。開発者はZephirでコードを書き、翻訳者がCコードを生成してバイナリモジュールにコンパイルします .so または .dll。
従来のフレームワークとの違い
主な違いは、インフラストラクチャコードの処理方法にあります。LaravelやSymfonyのような一般的なフレームワークは、各イベントごとにComposerを通じてファイルをオートロードする時間を費やします。Phalconは一度だけロードします—PHP-FPM起動時に。
このアプローチが実際に提供するもの:
- メモリはアプリケーションのデータのみに使用され、フレームワーク自体はコンパイルされた形式でRAMに保持されます
- 基本的なHTTPリクエスト処理速度が最小限に抑えられます
- ルーティング、ヘッダ解析、データフィルタリングがネイティブCコードレベルで実行されます
このツールには、すべての馴染みのあるバックエンドコンポーネントが含まれています:
- 依存性注入(DI)コンテナ
- PHQLクエリ言語を使用したカスタムORM
- Voltテンプレートエンジン
- セッション、キャッシュ、バリデーション用のコンポーネント
最新プロジェクトへのPhalconのインストール方法
以前、Phalconのビルドにはソースからの手動コンパイルまたはPECLでの作業が必要で、新規参入者を遠ざけていました。今では状況がシンプルになりました。
PHP開発者たちはPIE(PHP Extension Installer)という新しい拡張機能マネージャーを推進しています。Phalconは箱から出してすぐにサポートしています:
pie install phalcon/cphalcon
古い環境のサーバーで作業している場合は、PECLを使用できますが、この方法は徐々に廃れつつあります:
pecl install phalcon
インストール後、php.iniファイルにモジュールを追加する必要があります:
extension=phalcon.so
PHP-FPMを再起動すれば、フレームワークの準備完了です。
Phalconが真価を発揮する場面
このツールはアーキテクチャの問題に対する万能な解決策と見なすべきではありません。それでも、その設計が実証可能な結果をもたらすタスクは存在します。
最初のユースケースはマイクロサービスと高負荷REST APIです。サービスが毎秒数千のリクエストを処理する場合、リクエストごとに10ミリ秒と5メガバイトのメモリを節約することが、サーバーでの実際のコスト削減につながります。
2番目のユースケースは、脆弱なVPSまたはIoTデバイスでの実行です。RAMへの要求が控えめなので、Phalconは512MBのRAMを持つサーバーでもトラフィックを処理できますが、解釈されたフレームワークではメモリ不足でクラッシュします。
3番目のユースケースはCLIスクリプトとバックグラウンドワーカーで、データの処理が環境初期化のために一時停止せずに実行される必要があります。
潜在的な課題と落とし穴
C拡張の概念には、事前に考慮する必要がある特有の問題があります。
環境要件。rootアクセスなしの標準的な共有ホスティングでPhalconを実行することはできません。VPS、専用サーバー、またはDockerコンテナが必要です。
デバッグの詳細。IDEでは、Ctrlを押しながらフレームワークのソースコードに飛び込んで特定のメソッドのロジックを確認することはできません。開発者はスタブにのみアクセスできます。内部を研究するには、プロジェクトのリポジトリにアクセスしてZephirコードを読む必要があります。
サードパーティパッケージ。PhalconのコミュニティはトップのPHPフレームワークよりも小規模です。珍しいサードパーティサービスとの統合は、より頻繁に手動で書く必要があります。
自分のスタックに追加する価値はあるか
Phalconは、フレームワークが言語拡張に変換された珍しいエンジニアリングの大胆さの例です。PHP 8.xサポートとPIEへの移行が証明しているように、プロジェクトは進化を続けています。
高速なAPIが必要な場合、既存のハードウェアから最大限のパフォーマンスを引き出したい場合、またはPHP開発の珍しい一角を探求的好奇心があるなら、Phalconでテストアプリケーションを構築することは確かに価値があります。
関連プロジェクト