29

私は(自然に)大量のトラフィックを生み出すことを望んでいるスタートアップを構築している初心者プログラマーです。Amazon EC2 にある dotcloud で django プロジェクトをホストしています。私はいくつかのストリーミング メディア (rmtp ではなく Http) を持っているので、dotcloud 担当者は CDN を使用することを勧めました。ストレージにも Amazon S3 を使用しているため、Amazon CloudFront を CDN として使用することにしました。

キャッシングに注意を向ける必要がある時が来て、道に迷って混乱しています。私はその概念に完全に慣れていません。私の知識のすべては、私が読んだばかりのチュートリアル ( http://www.mnot.net/cache_docs/ ) と、Google に相談して混乱した週末を過ごしたことに由来しています。すべての中で最も厄介なのは、自分のサイトで何をする必要があるかさえわからないことです.

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

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

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

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

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

正しい質問をしているかどうか確信が持てません。ただ非常に失われたと感じています。私は現在、サイト全体の 95% を構築しており、詳細を解決しているだけだと思っていましたが、キャッシングは別の主要な仕事のようです. ガイダンス/アドバイス/励ましをいただければ幸いです。

4

1 に答える 1

54

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

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

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

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

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

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

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

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

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

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

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

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

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

現時点ではトラフィックの多いサイトをお持ちではないので、どこに労力を費やすべきか、つまり、いつ何を最適化する必要があるかを理解することが課題であると思います。

私が最初に推奨するのは、Boomerang.js や Pion を使用して独自に構築する場合でも、リアル ユーザー モニタリング (RUM) を導入することです。サーバーの負荷を理解できるように、Cacti/Munin/CollectD などの監視ツールも参照してください。

ユーザー エクスペリエンスを理解することは、どこを最適化する必要があるかを判断するための鍵となります。

于 2011-10-13T20:59:02.110 に答える