web-dev-qa-db-ja.com

Webキャッシング、CDN、およびプロキシサーバーの使用を開始するにはどうすればよいですか?

私は(当然のことながら)大量のトラフィックを生み出すことを望んでいるスタートアップを構築している初心者プログラマーです。私はAmazonEC2上にあるdotcloudでDjangoプロジェクトをホストしています。ストリーミングメディア(ただし、rmtpではなくHttp)があるので、dotcloudの人たちはCDNを使用することをお勧めします。私もストレージにAmazonS3を使用しているため、CDNとしてAmazonCloudFrontを使用することにしました。

キャッシングに注意を向ける必要があり、迷子になって混乱する時が来ました。私はその概念に全く新しいです。私の知識の全範囲は、私が今読んだチュートリアル( http://www.mnot.net/cache_docs/ )と、グーグルのコンサルティングに費やした混乱した週末から来ています。すべての中で最も厄介なのは、自分のサイトで何をする必要があるのか​​さえわからないことです。

  1. CDNとプロキシサーバーの違いは何ですか?

  2. キャッシングサービス(memcached、redisなど)、CDN(CloudFront)、およびプロキシサーバー(squid)を使用することは可能ですか?

  3. 私たちのサイトはDB主導であり、ユーザーの場所に固有の動的に生成されたリストを生成します。そのようなサイトをキャッシュできますか? (リスト自体はAJAXを介してフィルタリングできるため、URLは同じままで、結果が大きく異なる場合があります。たとえば、example.com/some_url /は40個のオブジェクトのリストを生成しますが、ページには10個しか表示されません。をクリックするとフィルタを使用すると、ユーザーは/ some_url /にいる間に10個のdifferentオブジェクトになってしまう可能性があります。

  4. トラフィックの多いリッチコンテンツサイトのベストプラクティスは何ですか?

  5. どうすればこれについて知ることができますか?私が見るところはどこでも、私自身の基盤の一部としてまだ持っていないいくつかの基本を当然のことと思っているようです。

正しい質問をしているのかわかりません。とても迷いました。私は今、サイト全体の95%を構築していて、詳細を整理しているだけだと思っていましたが、キャッシュは別の主要な作業のようです。どんなガイダンス/アドバイス/励ましも大歓迎です!

25
Matt Parrilla

それでは、キャッシュから始めましょう...

キャッシングとは、何かを一時的に保存することです。これにより、毎回取得するために、より高価な操作を実行する必要がなくなります。

HTTPキャッシングとは、サーバーへのラウンドトリップを保存することです。デフォルトの動作を使用する場合、ブラウザはサーバーに「より新しいバージョンがある場合は、このリソースのコピーを送信してください」と要求します。

期限切れヘッダーを将来の時間に設定した場合、ブラウザーは、取得したリソースのコピーを使用できることを認識しているため、この質問をしません。

このレベルでキャッシュすると、エンドユーザーエクスペリエンスが向上し、帯域幅が節約されます。

あなたの簡単な説明から、HTTPキャッシングはより小さな静的ファイルに役立つ可能性があります(bookofspeed.comのch3を読んでください)

Memcached(およびredis)が使用されるDBキャッシングは、データベース操作を繰り返すのではなく、操作の結果を保存してキャッシュから提供することにより、データベースの負荷を軽減することです)

あなたの状況では、リクエストパラメータに基づいてデータ取得レイヤーでキャッシュします(そしておそらくクライアントへのHTTP応答がキャッシュされないようにします)。

CDNとプロキシサーバー..

これらは本当に異なる獣です-CDNはコンテンツを訪問者の近くに保つことで待ち時間を短縮します-大きなファイルを提供している場合は、サーバーではなく、それに最適化されたネットワークにそれらを配置しますが、実行には£££の価格がかかりますそれ。一部のCDN(例:クラウドフロントには、訪問者が必要とするファイルがない場合にOriginサーバーに戻るプロキシのような動作があります。

プロキシサーバーは、文字通り、サーバーとエンドビジターの間に位置するサーバーです。サーバーファーム(リバースプロキシ)の一部である場合があり、ISPのネットワークまたはビジターのネットワークです。

リバースプロキシは、基本的に、エンドビジターとの通信作業をサーバーからオフロードします。接続が遅い場合は、サーバーを拘束してページを生成する時間が長くなります。リバースプロキシは、複数のサーバーの前に配置することもできます。すべて同じことまたは異なることを実行し、プロキシは単一のアドレスを外部に提示します。 Squidは使用できるプロキシの1つですが、Varnishも非常に人気のあるATMです。

通常のプロキシは、それらを通過する訪問者のキャッシュとして機能します。企業はインターネットゲートウェイにキャッシングプロキシサーバーを持っている場合があります。これにより、外部サイトに最初にアクセスした人がファイルを取得し、その後の訪問者がプロキシからファイルを取得します。より高速なエクスペリエンスが得られ、企業は帯域幅の消費を削減します。

現在、トラフィックの多いサイトはないと思います。そのため、どこで努力するか、つまり、何をいつ最適化する必要があるかを理解することが課題です。

私の最初の推奨事項は、Boomerang.jsまたはPionを使用して独自に構築している場合でも、実際のユーザー監視(RUM)を組み込むことです。また、Cacti/Munin/CollectDなどの監視ツールを調べて、サーバーの負荷を理解できるようにします。

ユーザーエクスペリエンスを理解することは、最適化する必要がある場所を見つけるための鍵です。

48
Andy Davies