1 日あたり 250,000 ヒットに対応する PHP/Apache2/MySQL のサーバー構成は?

1 日あたり 250,000 ヒットに対応する PHP/Apache2/MySQL のサーバー構成は?

どなたか設定を推奨していただけますか。あるいは、この Web 設定の完全なケース スタディを教えていただけませんか。

基本的に、1 日あたり約 100,000 ヒットの PHP サイトがあります。この負荷を VPS で処理しようとすると、CPU 容量の限界に達して、接続タイムアウトなどが発生します。1 日あたり約 250,000 ヒットまで拡張できる仕様にしたいと考えています。

現在、サーバーは次の通りです:

  • シングルコア 1Ghz バースト可能 VPS (2.6Ghz デュアルコア Xeon から)
  • 2GB のバースト可能な RAM (繰り返しますが、バースト可能というのは非常に曖昧です)
  • PHPプロセスあたり32MB、式エンジン(私の知る限り)または同様に重いものを実行する
  • 画像を多用したグラフィックページ
  • 一部のページでは、サードパーティのサーバーへの xmlrpc などの裏作業が時々行われます。
  • modphp を使用した単純な Apache (したがって、画像などの静的ファイルにも完全な PHP プロセスが必要です。これは現時点では変更できません)

これまでのところ、CPU が主なボトルネックのようで、一部の Apache プロセスはリクエスト中に約 30% の CPU を使用しています。他の Apache プロセスは CPU を 1% しか使用していないため、かなり良好な状態です。これらは静的ファイルのリクエストであると思われます。

そこで、VPS から離れて、バーストのない (測定可能で保証された) パフォーマンスを備えた専用または仮想専用ボックスに移行したいと考えています。現在のトラフィックを処理でき、将来的には少なくともその 2 倍のトラフィックを処理できる必要があります。

何かお勧めや研究はありますか?

Apache プロセスあたりのメモリ、動的なリクエストの割合、PHP コードが重い CMS のものか軽い hello-world のものかなどのパラメータに基づいて、サーバーの仕様を推定できるツールはありますか?

答え1

パフォーマンスはアプリケーションの複雑さに応じて常に大きく変化するため、この問題に関する有用なケーススタディが存在するとは思えません。適合に近づく唯一の方法は、測定して推定することです。

OS については触れられていませんが、スレッド、CPU 負荷、メモリ統計、ディスクとネットワーク データなどをキャプチャする一連のパフォーマンス モニターを設定することをお勧めします。また、処理するヒット数も必ずキャプチャしてください。これにより、実際の負荷に基づいて、これらすべてのコンポーネントの最小、平均、および最大リソース使用量を判断できます。これらの統計 (mhz/10k-users、mem/10k-users など) を取得したら、必要なパフォーマンスをすばやく推定できるはずです。予想されるピーク負荷時でも、約 20% の追加ヘッドルームを計画してください。

スプレッドシートでかなりの作業が必要になることは承知していますが、これが自信を持てる唯一の方法です。もちろん、「問題に大量のハードウェアを投入する」という方法もありますが、これも機能しますがコストがかかります :)

幸運を祈ります。理解するのに助けが必要な場合は、後でデータを持って戻ってきてください。

答え2

Apache の前にプロキシ モードで nginx を追加し、Apache に触れることなく、本当に静的なデータをサーバーするように設定するだけです。すぐに速度が向上します。

次に、apache2 を 4 ~ 16 個の子を持つ preforked モードに切り替えます。

外部接続などのバックグラウンド作業は非常に面倒なので、これらの作業を非同期にするためにコードを書き直します。

最後に、マスター ノード (すべての VPS を保持するサーバー) の帯域幅が不足している可能性があります。ホスティング会社に、マスター ノードで 1Gbit 接続があるかどうかを問い合わせてください。100Mbit しかない場合は、ホスティングを変更したほうがよいかもしれません。

関連情報