10

PHPで新しいWebアプリケーションを作成していますが、時間の経過とともに拡張できる方法で作成したいと考えています。

私は何をすべきか、すべきではありませんか?キャッシュする必要があることはわかっていますが、何をどのようにキャッシュする必要がありますか?ウェブサイトの読み込みを高速化するために他に何ができますか?

4

3 に答える 3

28

注:これは私が書いたものではなく、YCニュースのSnorkelが書いたものです。

短いリストは次のとおりです。

  1. エッジで出力をキャッシュしVarnishます。または他のリバースプロキシキャッシュを使用します。
  2. バイトコードのキャッシュAPCまたはXCachePHPオペコードキャッシュを使用します。
  3. データベースI/Oのキャッシュと最小化:、、ファイルキャッシュ、およびアプリケーションレベルのキャッシュ(グローバル変数など)を使用してデータベースへのアクセスを削減memcachedredisます
  4. データベースではなく、ローカルファイルにイベントログを記録します。すべての書き込み操作を可能な限りシンプルかつ高速にします。リアルタイムで不要なデータは、プレーンな古いファイルに書き込んで後で処理できます。
  5. 特に静的アセットの配信にはCDNを使用します
  6. サーバーの調整Apache、、MySQLおよびLinuxパフォーマンスに影響を与える多くの設定があります。特に、タイムアウト設定は下げる必要があります。
  7. ボトルネックの特定:システムレベルで、、、、、、クエリログなどのツールをstrace使用してtop、どのレイヤーが最も時間とリソースを使用しているかを確認しますiostatvmstat
  8. 負荷テスト:自分でDoSします。スタックのストレステストを行ってボトルネックを見つけ、それらを調整します
  9. 未使用のモジュールを削除する:スタック内のコンポーネントごとに、サービスの提供に必要のないデフォルトのモジュールをアンロードします。
  10. ORMやその他のダミーの抽象化を使用しないでください。補助輪を外して、独自のクエリを作成してください。
  11. エントリページを高速、シンプル、キャッシュ可能にします。あなたのフロントページの下隅にあるそのばかげたニュースフィードを誰も読んでおらず、それがあなたのデータベースを殺しているので、それを取り出してください。

ほとんどの場合、PHPは、低速ディスク、過負荷のデータベース、ハングしたmemcachedプロセス、サードパーティサービスへの低速REST API呼び出しなど、他のレイヤーからのI / Oを待機するために各PHPプロセスがブロックされるため、速度が低下します。 。多くの場合、ライブPHPプロセスをstraceするだけで、待機しているものが表示されます...要するに、I/Oをブロックするとすべてが遅くなります。より速く進むための鍵は次のとおりです。

- 単純にする

-ローカルメモリに可能な限りキャッシュする

-リクエストごとに可能な限り少ないブロッキングI/O操作を実行します

于 2012-06-05T19:15:17.347 に答える
1

複数のフロントエンドにスケーリングするには、Web サイトのルートとその動的コンテンツを複製する必要もあります。

GlusterFS は素晴らしい追加機能ですが、スケールアップがどれだけうまくいくかはわかりません。別の代替手段は Lsyncd です。他の代替手段には、コードの GIT と動的コンテンツの CDN が含まれる場合があります。

于 2012-06-05T20:10:12.120 に答える
0

追加する必要があります: gzip で出力を圧縮します。

于 2012-06-05T19:45:41.923 に答える