2012-03-02 1 views
1

私は動的PHP(Yiiフレームワークベース)サイトを持っています。ユーザーはサイト上の何かを行うためにログインする必要があります。私はキャッシングとCDNの仕組みを理解しようとしています。私は少し混乱しています。キャッシング、CDN - PHP Yiiサイトでは同じですか?どのように動的なPHPサイトのためにそれを使用するには?

キャッシュ(memcacheの)

私のサイトは、JS、CSSの良い量を持っている、とイメージ。私はキャッシングを有効にすること( "memcache"?)が私のサイトをかなりスピードアップすることを理解しています。しかし、これは私を混乱させる。キャッシュはどのように役立ちますか?つまり、各ユーザーごとにDBから出てくるものをどのようにキャッシュすることができますか?たとえば、ユーザー1はログインして、コントロールパネルを表示します。ユーザー2がログインすると、ユーザー2にコントロールパネルが表示されます。

キャッシュする対象を決定するにはどうすればよいですか?さらに、どのようにキャッシュ(memcaching)を有効にするのですか?

CDN:

私はCloudFlareのなどのコンテンツ配信ネットワークを使用するように言われています。私のサイトを自動的にキャッシュしているとします。だから、私のuser-1がログインすると、それは何をキャッシュに入れますか?それはホームページのCSS、JS、およびホームページの画像だけをキャッシュしますか?それ以外はログインする必要があるからですか?ユーザーがログアウトするとどうなりますか?つまり、「セッション」はCDNの作業に干渉しますか?

CDN経由で画像を配信すると、サーバーの負荷が軽減されますか?クラスタ化されたサーバー構成を取得するための現金はあまりありません。だから、自分の(共有の)サーバがPHPコードの処理にすべてのリソースを費やすことができるようにしたいだけです。それで、「キャッシング」(memcacheのようなもの)や「CDN」(CloudFlareのようなもの)を使ってどれくらいの負荷を節約できますか?

最後に

キャッシング、CDN、および基本的なパフォーマンス最適化のために、このシナリオで実装するための一般的な戦略がどうなりますか? CloudFlareのようなCDNを有効にし、キャッシュを有効化/実装/設定するために私のPHPコードを変更する必要がありますか?少なくとも、開発者/コーディング時間を最小限に抑え、私のサイトをはるかに速く動かすことができますか?

ああ、「私たちについて」のページのような私のページのいくつかは静的なHTMLにもなります。しかし、彼らは多くのヒットを得ることはありません。私のFacebookページに使用されるiFrameページを除いて。

答えて

1

キャッシングは、ユーザーごとにディスクioを実行する代わりに、メモリに保存されるmemcachedのために役立ちます。これにより、パフォーマンスが大幅に向上します。

Memcacheは、一般にデータ、つまりクエリ結果をキャッシュするために使用されます。 http://pureform.wordpress.com/2008/05/21/using-memcache-with-mysql-and-php/ チュートリアルがたくさんあります。

私はamazon s3を使用していますが、それはかなりcdnではありません。これはストレージプラットフォームではありますが、メディアを提供する際には自分のサーバーから負荷を取り除くのに役立ちます。

すべての静的リソースをCDNに入れて、自分のサーバーでこれらのリソースを処理する必要はありません。それはあなたのPHPコードを変更する必要はありません。これには、JSとCSSが含まれます。 静的なページ(あなたのページについて)には、理由がないのでPHPが処理していないことを確認したいと思います。あなたのウェブサーバーはそれを直接提供する必要があります。

キャッシュを変更するには、コードを変更する必要があります。キャッシュを行うために通常のフロー: 1)ユーザがリクエストをする 2)キャッシュにデータがあるかどうかを確認する 3)キャッシュにない場合は、DBクエリを実行してキャッシュに入れる 4)キャッシュが取得中の場合それは 5)データを返します。

ディスクioが必要なものをキャッシュすることができます。スピードアップが必要です。

+0

ありがとう、dm03514と@Brian。私は今キャッシングがどのように動作するのか理解していますしかし、これは別の疑問を生みます。すべてのユーザーは異なっており、異なるアカウントを持っています。ですから、もし私がクエリをキャッシュするならば、それらのクエリはその特定のユーザにしか良いものではありません!したがって、50,000人のユーザーがいる場合は、これらの5万人のユーザーのそれぞれに対してクエリをキャッシュする必要があります。さらに、結果セットが更新された場合はどうなりますか?キャッシュには古い結果セットが表示されます。 –

+0

遅れて申し訳ありませんが、私はあなたが使用するキャッシュシステムに基づいて変化する笑を動かしてきました。ほとんどの場合、頻繁に変更されることのないユーザー固有のデータ(電子メールアドレス、名前、環境設定などのアカウントデータ)や頻繁に変更されないグローバルデータ(ページコンテンツ、ユーザーコメントなど)。頻繁に変更される可能性のあるデータをキャッシュすることに決めた場合、キャッシュされたデータに単純なTTL(有効期限)の有効期限を使用することはできず、代わりにそのデータを手動で期限切れにする必要があります。 – Brian

1

Memcachedは、Webサーバーのファイルシステムにフラットファイル形式でデータベース情報(通常はリモートサーバーまたは同じサーバー上のデータベースエンジン)を格納することで動作します。フラットファイルに直接アクセスして規制された形式で格納されたデータを取得することは、毎回リモートクエリからそのデータにアクセスするよりもずっと高速です。これは通常、定期的な変更の対象とならないため、一定期間保管することができるデータがある場合に便利です。

ユーザーのアカウント情報をキャッシュに保存して、そのユーザーがログインしているページの読み込みを高速化する場合は、情報を読み込んでローカルにキャッシュします。そのデータに対するその後の要求では、データベース自体からその情報をロードするのに通常かかる時間のほんの一部でロードされます。明らかに、ログイン中にユーザーが情報を変更した場合は、その情報を更新/再キャッシュする必要がありますが、待機時間を最小限に抑えるキャッシング・システムを実装すると、ページの配信にかかる時間が大幅に短縮されます。データベース。

私はので、私はその効果に何かアドバイスを提供することはできませんが、あなたのアプリケーションでキャッシュを実装するという点で、あなたがチェックアウトする必要があり、個人的にCloudFlareに精通していないよ:

http://code.google.com/p/memcached/wiki/NewOverview

をまた読んでインストール/実装/その他をカバーするWikiエントリの残りの部分。そうすれば、正しい道を歩み始めるはずです。

3

私は実際にCloudFlareのために働いています&私はいくつかの懸念事項に取り組むと思います。

は、「私は、開発者/コーディング時間の最低額を取る とする何ができますか?私はCloudFlareの のようなCDNを有効にすると、/設定キャッシュを実装/有効にするために私のPHPコードを変更する必要があります私の サイトははるかに高速に動作しますか? "

いいえ、URLを書き換える必要はありません。私たちは自動的にファイル拡張子でcache static contentを書きます。しかしこれはあなたのDNSが私たちを指すように変更する必要があります。

CDN経由で画像を提供することは、サーバーの負荷を軽減しますか?

はい、また、ほとんどの訪問者がサイトにすばやくアクセスし、帯域幅をかなり節約するのに役立ちます。

たちについて「のページなど、あまりにも 静的なHTMLであることを行っている。 『』ああ、私のようなページの一部が、待って」

CloudFlareはデフォルトでHTMLをキャッシュしません。PageRulesを使用して、静的HTMLなどの高度なキャッシュオプションを設定します。

関連する問題