21

LAMP スタックで典型的なサイトを構築するときに、可能な限り最高の読み込み時間を実現するためにサイトを最適化する方法を知りたいです。私は、典型的な DB 主導のサイトを描いています。

これは高レベルの外観であり、おそらく問題になる可能性があるため、スタックの各レイヤーに分解させてください.

L - システム レベル (セットアップとファイル システム) で、速度を向上させるためにできることはありますか? 私が考えることができるのは画像サイズです。ここでの圧縮は何かを最適化するのに役立ちますか?

A - Web サーバーには、サイトの速度に関連する大量の設定が必要です。私の強みではありません。おそらく、同時に実行されているサイトの数に大きく依存します。

M - データベース駆動型サイトの MySQL。DB のパフォーマンスが重要です。リンクテーブルを使用するなど、より良い正規化アプローチはありますか? 多くの場合、Web 開発者は 1NF に似た単純なモノリシック テーブルを作成するだけで、パフォーマンスが低下する可能性があります。

P - キャッシングなどのパフォーマンスを向上させる設定以外に、高レベルでパフォーマンスに影響を与えるためにプログラマーは何ができますか? MVC の設計アプローチが、迅速かつダーティなものではなく、ヒット パフォーマンスにアプローチしているかどうかを知りたいと思います。クッキーよりもセッションが速いなどの他の簡単なヒントは、知っておくと興味深いでしょう.

明らかに、詳細に取り掛かり、どのコードが速度を低下させているかを見つける必要があります。また、多くのサイトにはさまざまなパフォーマンス特性があることも認識していますが、書き込みよりも読み取りの方が多い典型的なサイトを想定してみましょう。

チェックリストを効果的に作成できるように、多くのベスト プラクティスをまとめて、人々が他の質問にリンクすることを完全に期待できるかどうか、ただ考えているだけです。

私の目標は、パフォーマンスの通常の問題に加えて、ベスト プラクティスの要約に沿って、あなたが思いつかないかもしれないいくつかの奇妙な点を確認できるかどうかを確認することです。

私の質問は、ゼロから始めた場合、LAMP サイトが高速であることをどのように確認しますか?

4

8 に答える 8

12

まず、パフォーマンスは反復プロセスであることを認識してください。単一のパスで Web アプリケーションを構築して起動し、二度と作業しないわけではありません。それどころか、小さく始めて、サイトの成長に合わせてパフォーマンスの問題に対処します。

さて、具体的に:

  1. プロフィール。ボトルネックを特定します。これが最も重要なステップです。最善の結果が得られるところに力を注ぐ必要があります。サーバーで何が起こっているかを可視化するために、ある種の監視ソリューション (サボテンやムニンなど) を配置する必要があります。
  2. キャッシュ、キャッシュ、キャッシュ。おそらく、データベース アクセスがバックエンドの最大のボトルネックであることに気付くでしょうが、これは自分で確認する必要があります。幸いなことに、多くのトラフィックが小さなリソース セットに対するものであることに気付くでしょう。これらのリソースを memcached などにキャッシュして、データベース ヒットを節約し、バックエンドのパフォーマンスを向上させることができます。
  3. 他の人が上で述べたように、YDNのパフォーマンスルールを見てください. 付属の本を手に取ることを検討してください。これにより、フロントエンドのパフォーマンスが向上します
  4. PHP APCをインストールし、コンパイル済みのすべての PHP バイトコードを保持するのに十分なメモリで構成されていることを確認します。最近、APC のインストールに十分な RAM がないことがわかりました。CPU 時間を半分に削減し、ディスク アクティビティを 10% 削減して作業するのに十分な
  5. データベース テーブルが適切にインデックス化されていることを確認してください。これは、スロー クエリ ログの監視と密接に関連しています。

上記はあなたを非常に遠くまで連れて行きます。つまり、かなり db の多いサイトでも、上記の手順を実行すれば、わずかな仕様のサーバー 1 台でフロントページを掘り下げても生き残ることができるはずです。

最終的に、デフォルトの apache 構成が常に着信要求に対応できるとは限らないポイントに到達します。この壁にぶつかったとき、やるべきことは2つあります。

  1. 以上、プロフィールです。Apache のアクティビティを監視します。トラフィックの突然のバーストが発生した場合のアクティブな接続の最大数に加えて、任意の時点でアクティブな接続の数を把握する必要があります。
  2. これを念頭に置いてApacheを構成します。これは私が見た apache config の最良のガイドです: Practical mod_perl Chapter 11
  3. できる限り apache の負荷を減らします。静的コンテンツを効率的に提供するには、Apache は負荷が高すぎます。軽量のリバース プロキシ (squid など) または Web サーバー (lighttpd または nginx) を使用して静的コンテンツを提供し、低速のクライアントにスプーン フィード バイトのジョブを引き継ぐ必要があります。これにより、Apache は最も得意とすること、つまりコードを実行します。繰り返しますが、mod_perl の本はこれをうまく説明しています。

ここまで来たら、あとはキャッシュを増やすか、データベースを監視するかです。最終的には、単一のサーバーでは足りなくなります。まず、フロント エンド ボックスをさらに追加し、そのすべてを 1 つのデータベース サーバーでサポートします。次に、おそらくシャーディングによって、データベースの負荷を分散し始める必要があります。この成長プロセスの優れた概要については、この livejournal プレゼンテーションを参照してください。

上記の内容の詳細については、Flickr で有名な Cal​​ Henderson によるBuilding Scalable Web Sitesを参照してください。Google では書籍の一部をプレビューできます

于 2009-03-30T19:07:03.523 に答える
3

私はMysqlサーバーのパフォーマンス分析にMysqlTunerを使用しました。これにより、独自の推奨事項を作成するだけでなく、グーグルのさらなる問題についての優れた洞察が得られました

于 2009-03-30T16:40:17.353 に答える
2

役立つと思われるリソースは、YDNのパフォーマンスルールのセットです

于 2009-03-30T16:50:04.070 に答える
2

ユーザーはサーバーから何千マイルも離れており、単一のページをレンダリングするために数十のファイルをダウンロードするという事実を忘れないでください。その待ち時間と、ブラウザーでページをレンダリングするオーバーヘッドは、情報の収集とページの生成に費やす時間よりも長くなる可能性があります。

Best Practices for Speeding Your Web Siteに関する Yahoo Developer Network のページと、サイトのダウンロードのどの部分に時間がかかっているかを確認するためのYSlow ツールを参照してください。

于 2009-03-30T16:55:40.017 に答える
2

Jet Profiler for MySQLを使用して、不適切なクエリを見つけることをお勧めします。私はいくつかのサイトでそれをうまく使用しました。本当に役に立ち、遅いクエリ ログよりもはるかに簡単に消化できます。

于 2011-12-09T13:37:25.923 に答える
2

ファイルシステムの atime をオフにすることを忘れないでください!

于 2009-03-30T19:05:19.940 に答える