「PHP が最適なプログラミング言語かどうか」については、当面は議論しないことにします。この記事では、PHP プログラムのバックエンド周辺リソースとフロントエンド周辺リソースをそれぞれ分析します。 、そして PHP Web アプリケーションのエクスペリエンス全体に対するその影響は、多くの場合、言語自体よりもはるかに大きくなります。
前の記事では、バックエンド周辺リソースの IO 操作とミドルウェア サービスが PHP Web アプリケーション エクスペリエンス全体に与える影響を分析しました。今日は、アプリケーション全体のパフォーマンスに対するデータベースの影響を分析します。
まず、2 つのグラフを直感的に見てください。1 つは、OneAPM バックグラウンドからの Web トランザクション スループット グラフです。つまり、トリガーされた Web トランザクションの数とデータベース トランザクションの数です。図に示すように、1 分ごとにトリガーされます。
上記のとおり、Web トランザクションは 1 分間に 150 ~ 200 回程度変動しており、それに対応するデータ操作もそれに応じた量に達しています。
上記は直感的にデータベースへの総リクエスト数の割合であり、データベースの利用率が非常に高いことが分かります。重い。誰もが知っているように、この平均的な分析は間違っています。なぜなら、トラフィックのピークを計算するとき、時間の 30% のみをピーク時間として計算し、同時に主要なリクエストの 20% のパフォーマンスの問題のみに焦点を当てることができるからです。したがって、特定のページ (通常の Web アプリケーション ページ) に注目して、そのページにおけるデータベース使用率を調べます。
上記の XHProf レポートからわかるように、このページには合計 89 のデータベース リクエストがあり、合計ページ時間の 44.5% を消費しています。これは依然として通常のページおよび通常のリクエストです。これほど多数のリクエストがある場合、リモート データベースやネットワークの速度が遅く、各リクエストに費やされる平均時間が 3 ~ 5 ミリ秒に達すると、ページ全体の速度が 208 ミリ秒の遅延から 208 ミリ秒に近づくことは容易に想像できます。 500ミリ秒。
PHP 言語自体の最適化は重要ですが、常に制御可能であり、制御できない外部リソースではパフォーマンスのボトルネックが発生することがよくあります。たとえば、毎年恒例のクラッシュ 12306 は、言語自体のパフォーマンスによって引き起こされるクラッシュではなく、外部リソースの不足とアーキテクチャ上の問題によって引き起こされる問題です。もちろん、言語間の大きな違いがリソースの節約につながっていることは否定できません。たとえば、滴滴出行のバックエンド サービスは PHP から Go に切り替わっており、これは PHP 自体のリソース消費量が Go の数倍であることを意味します。
この記事では、PHP の周辺リソースのパフォーマンス分析として、いくつかの実験シナリオを設計し、IO、ミドルウェア、データベース リソースなどの外部リソースがプログラムのパフォーマンスに与える影響を確認しました。このようなシナリオでボトルネックを解消し、最適化するにはどうすればよいでしょうか?これは実際には大きなトピックですが、この記事では詳しく説明しませんが、外部リソースの最適化の一般原則についても紹介します。下の図は、データベース最適化のルールを非常にわかりやすく包括的にまとめたもので、図に示すように、他の外部リソースの最適化にも適用できます。
この図からいくつかの点がわかります。
1. 外部リソースの使用についての最大の最適化は、リソースの使用量を削減することです。ビジネス ロジックの最適化とキャッシュに関しては、これら 2 つによってもたらされるパフォーマンスの向上は、多くの場合桁違いの改善です
2. すべての最適化は包括的なプロジェクトであり、単一の点から開始して一度だけで完了するものではありません。上の図では、ディスク、ネットワーク、CPU、メモリの最適化が考慮されています。
3. リソースの追加、つまりハードウェア構成の増加が、最適化の最終的な解決策です。可能な場合は、ソフトウェアの最適化を最大限に使用してください。それによってもたらされるパフォーマンスの向上は、ハードウェアによる向上よりも安価で効率的です。
PHP プログラムのパフォーマンスに影響を与えるバックエンド周辺リソースについては以上です。次の記事では、フロントエンド、またはフロントエンドとフロントエンドの組み合わせの影響を分析します。ページの遅延。
OneAPM for PHP は、すべての PHP アプリケーションに深く入り込んで、アプリケーションのパフォーマンス管理を完了できます。これには、コードレベルのパフォーマンスの問題の可視化や迅速な識別など、アプリケーションのパフォーマンス管理と監視が含まれます。パフォーマンスのボトルネックの追跡、実際のユーザー エクスペリエンスの監視、サーバーの監視、エンドツーエンドのアプリケーション パフォーマンス管理。