ローエンドボックス(1GB RAM)で実行されているWebアプリケーションがあり、静的ページと動的(php)ページが混在しています。これらのPHPページは、頻繁に変更されないMYSQLデータベースをクエリしています-週に1回?。
私はすべてを素晴らしくスピーディーに保つためにかなりの量のキャッシュを行うことを探しています。 phpですが、情報がほとんど変更されないページがあります(数か月に1回変更される可能性のあるアイテムのリストを取得しますか?)。数ページに最大400件のレコードがリストされている場合があります。
Varnish、nginx、PHP-FPM、APC、MYSQLがインストールされています。私はすべてが正しく設定されていると思います。ページが提供されており、ワニスにヒットが表示されています...ブリル!ただし、ウェブサイトの性質上、最適化されているかどうかはわかりません。
最近の検索では、私のphpページに役立つ可能性のあるいくつかのことが示唆されています。
例:新しいPHPページ、かなりの数(200+)のレコードがリストされています:2秒更新後1.5(ish)秒編集:期待するのは非現実的ですかこのページは、行のどこかにキャッシュされ、アクセスされた後、はるかに迅速に提供されますか?
私の最善の選択肢は何でしょうか?上記の1つまたはすべて?
正直なところ、できる限りすべてを調整した場合は、ハードウェアのアップグレードを検討します。時間があれば、HipHop( https://github.com/facebook/hiphop-php/wiki )のようなFacebookの調査を調べてください。彼らは、高速読み込みの動的ページを作成するためのいくつかの驚くべき研究開発を行いました。
頑張ってください!
MySQLのクエリキャッシュには注意してください。グローバルロックを使用するため、アクティビティが多すぎると、定期的にデッドロックが発生します。クエリキャッシュは、まったく同じのクエリにのみ役立ちます。クエリが多数ある場合は、アプリケーションレベルでは実行しません。キャッシュ権。
パフォーマンスに取り組むための最初のステップは、常にプロファイルを作成することです。直感ベースの最適化は、時間を無駄にするための本当に良い方法です。
職場では、データストアとして Graphite を使用し、プライマリデータとして StatsD および pipe-to-graphite の修正バージョンを使用しています-送信メソッド。これらのツールはどちらもデータの送信を非常に簡単にし、Graphiteには多数の分析ツールがあります。
たとえば、 パイプからグラファイトへのワニススクリプト を使用して、varnishstats
からすべての統計を取得します。これにより、次のように、Graphiteでヒット/ミスグラフを簡単に作成できます。
Memcachedでも同じことができ、独自のアプリケーションにフックを追加して記録することができます...まあ、何でもすべてです!
xhprof や YSlow などの単一ページの分析ツールも便利です。
指標を取得したら、何に取り組むべきかがわかるだけでなく、完了したら改善を測定できるようになります。誰もが検証が好きです!
ワニスの特別な機能が必要ない場合は、それを削除して nginxのfastcgi_cache を使用できます。ただし、proxy_cacheとは逆に、セットアップ全体で持つことができるcache_zoneは1つだけであることに注意してください。
多分あなたのセットアップは少し過度に最適化されています...私はnginxかニスだけを使うことを考えます。
memcacheに関しては、1秒あたりのリクエスト数によっては、memcが実際に向上する可能性がありますが、場合によっては必要ない場合もあります。優れたフロントサイドキャッシュがある場合は、memcacheを有効にする必要はありませんが、YMMVを有効にする必要があります。私が理解していること:あなたは頻繁に変更されたページを配信しますよね?
私は常に次の方法で最適化しようとします: