完全なソフトウェア システムは、たとえ同じサーバー上にあるとしても、ほとんどの場合、連携して動作する複数のプロセスで構成されます。したがって、プロセス間の効率的な通信が重要です。
PHP はスクリプト言語として、C/Java のようにプロセスに常駐しないため、短い接続を使用してバックエンド サービスに接続します。
ナレーション: 友人が、拡張機能は C で記述できると言いました。 (推奨される学習: PHP ビデオ チュートリアル )
上の図は典型的なシナリオです。サイト PHP はマシン A にデプロイされ、キャッシュ memcacheはマシン A にデプロイされており、B では短い接続を通じて通信します。プロセスは次のとおりです:
(1) PHP は tcp の短い接続を確立します;
(2) memcache に従ってデータを送信しますプロトコル;
( 3) memcache から返されたデータを受信します;
(4) PHP は tcp ショート接続を閉じます;
トラフィックが少ない場合は問題ありませんウェブサイトのトラフィックが非常に多い場合、短い接続がパフォーマンスのボトルネックになる可能性がありますが、最適化する方法はありますか?
ナレーション: 接続の確立と切断には時間がかかります。
話は変わりますが、UNIX ドメインソケットとは何ですか?
UNIX ドメイン ソケットは IPC メカニズムです。ネットワーク プロトコル スタック、パッケージ化とアンパック、チェックサムの計算、シーケンス番号と応答の維持などを通過する必要はありません。アプリケーションを転送するだけです。プロセスのレイヤー データが別のプロセスにコピーされます。
ボイスオーバー: IPC、プロセス間通信、プロセス間通信。
これは、同じホスト上の 2 つの無関係なプロセスに使用でき、全二重であり、信頼性の高いメッセージ配信のための IPC メカニズムを提供します (メッセージが失われたり、繰り返されたり、混乱したりすることはありません)。
ナレーション: 親族関係とは、父と息子の関係や兄弟の関係など、「特別な」過程の関係を指します。
UNIX ドメイン ソケットの効率は TCP ショート接続よりもはるかに高いことがわかりますが、同じホストと PHP アプリケーションおよびバックエンド サービス間のプロセス通信にのみ使用できます。多くの場合、異なるマシン上にデプロイされますが、現時点での最適化に使用できますか?
最適化された単純なアーキテクチャ図は上記のとおりです。
(1) PHP アプリケーション サーバーにローカル プロキシをデプロイします。
(2) UNIX ドメイン ソケットは php とローカル プロキシ間の通信に使用されます;
(3) ローカル プロキシとバックエンド サービス間の TCP 長時間接続通信;
これにより、通信効率が大幅に向上し、リクエストごとに TCP 短い接続を確立および終了するオーバーヘッドが排除されます。
以上がPHPプロセスの接続は長いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。