1

使用頻度の高い Web サイトのキャッシュ戦略を設計中です。このサイトは、動的コンテンツと静的コンテンツの混合で構成されています。フロントエンドは PHP、中間層は Tomcat、背面は mysql です。

認証情報を保護するために、ユーザー ログイン画面のみが HTTPS 経由で実行されます。その後、すべてのコンテンツはプレーン HTTP 経由で提供されます。一部の画面は顧客固有のもの (最後の注文など) ですが、他の画面はすべての人に共通のもの (最も人気のある製品、プロモーション、ルールなど) です。

予想されるトラフィック量を考えると、包括的なキャッシング戦略が必要であることは明らかです。そのため、次のオプションを検討しています。

  1. Squid または Varnish を PHP の前に置き、すべてのパブリック コンテンツと顧客の注文送信フォームをキャッシュするように構成します。
  2. PHP で memcached を使用して、ページ フラグメント (最も人気のある製品など) をキャッシュします。
  3. 中間層/Tomcats にキャッシングを実装します (つまり、コンテンツを Web サーバーに返す前に、ehcache などのローカル キャッシュから取得してみてください)。
  4. Zend Cache のような PHP レベルのキャッシュを使用して、そこにページのフラグメントを保存します。これは、私が言及した 2 番目のオプションに近いものですが、Zend フレームワークに組み込まれています。

これらの戦略を組み合わせて使用​​する可能性があります。

問題は、Varnish のようなフロント キャッシュを追加する価値があるのか​​、それとも内部で Zend Cache を使用するだけの価値があるのか​​ということです。


言及するのを忘れていたもう 1 つのオプションは、Zend Cache のような PHP レベルのキャッシュを使用して、そこにページのフラグメントを保存することです。これは、私が言及した 2 番目のオプションに近いものですが、Zend フレームワークに組み込まれています。

問題は、Varnish のようなフロント キャッシュを追加する価値があるのか​​、それとも内部で Zend Cache を使用するだけの価値があるのか​​ということです。

ありがとう、フィロパトル。

4

1 に答える 1

1

私はこのようなプロジェクトをかなり行ってきましたが、次のことがわかりました。

  • (完全な) カスタム ソリューションを作成するのは難しく、費用もかかります。幸いなことに、Squid/Varnish、memcache、および ehcache が見つかりました。
  • サイトの動的な動作は大きく異なり、自分のサイトを最もよく知っているのはあなたなので、特定のキャッシュ戦略を考案するのは理にかなっています
  • 複数層のキャッシュを展開することは理にかなっています。ただし、これはサイトの動作を複雑にするため、サイトに関係するすべての人 (ビジネスなど) に何かを伝え、エンジニアに多くのことを伝える必要があります。
  • 問題をどのようにデバッグするかを考えてください。たとえば、提供されるデータの鮮度を示すヘッダーを追加し、特定の人がキャッシュを削除または回避できるようにします
  • さまざまなキャッシュ レイヤーがどのように機能するかを定期的に確認してください (たとえば、ワニス マシンに nagios プラグインを使用します)。
  • キャッシュを構築する前に、パフォーマンスの問題がどこにあるかを測定してください:)
  • 特定のオブジェクトを短時間だけキャッシュすることで、すでに非常に大きな改善が見られる場合があります

最近では、Varnish がとても気に入っています。これは、Java/PHP コードを乱雑にしない独立したレイヤーであり、高速で非常に柔軟です。欠点は、vcl の構成が少し複雑すぎることです。

私は通常、メモリ内ストレージで ehcache + を使用して、小さなデータ セットでの待機時間 (データベース クエリやサービス リクエストなど) を回避します。大量のデータがあり、キャッシュを複数のノードで共有する必要がある場合は memcached を使用します。

于 2011-02-10T23:41:36.630 に答える