6

比較的ボリュームの多いコンテンツ サイトを運営しています。ほとんどのコンテンツ サイトと同様に、各ページの大部分は比較的静的です。記事はめったに変更されないため、何らかの形式の静的/エッジ キャッシングの候補となります。ただし、大きな問題が 2 つあります。セカンダリ ページ要素 (ナビゲーション、最近のコンテンツ リストなど) は頻繁に変更され、「完全な」キャッシュ ページはすぐに無効になります。また、ユーザー固有の情報など、より動的なビットをページに含めることもよくあります。

コンテンツを後処理し、プロキシ/エッジでインクルードを処理できるようにするリバース プロキシ/ロード バランサーがあれば、非常に便利です。バックエンドへの最初のリクエストで大まかなテンプレートが返され、プロキシ ソフトウェアがそのテンプレートを処理して完成させることができます。マークアップは次のようになります。

<html>
<body>
  <div id="content">
    Lorem ipsum whackem smackem.
    <%
      dynamic "http://related.content.service/this/story"
    %>
  </div>
  <div id="sidebar">
    <%
      dynamic do |request|
        url = "http://my.user.service/user-widget.html"
        if request.cookies.contains?("user_token")
          url = "http://my.user.service/" + request.cookies["user_token"] + "/user-widget.html"
        end

        error_text = "User service not available"
        { :url => url, :timeout => 500, :error => error_text }
      end
    %>
  </div>
</body>
</html>

この例でわかるのは、Cookie の値に基づいて含まれるファイルを決定し、プルする URL を含むハッシュ、タイムアウト、およびエラーが発生した場合に表示するデフォルトのテキストを返す小さな Ruby です。エラー。理論的には、すべてのインクルードを非同期でリクエストすることもできます。

私の理解では、Amazonはこのようなことをしています。さまざまなページ コンポーネントがバックエンド サービスによって生成され、ページ全体の速度を確保するために厳密なタイムアウト制限が適用されます。彼らのCDNサービスにこのようなものが含まれることを望んでいましたが、そうではありません!

エッジ サイド インクルード (ESI) の W3 仕様は、ほぼ私が望んでいるものです。ただし、それに対するサポートはほとんどありません。これは Akamai から入手できます。それを行う Oracle ソフトウェアがいくつかあります。また、オープン ソースの Varnish キャッシュには非常に基本的な実装があります。また、これは非常に醜い XML 形式でもあります。

問題は、何が私にやりたいことをさせてくれるのかということです。他の誰かがこの方法で物事を行っていますか?

4

4 に答える 4

2

Nginx をフロントエンドとして設定し、SSI を使用してページの動的部分を選択します。動的ソースは、Apache などの HTTP サーバー、または PHP や Django などの FastCGI サーバーにすることができます。

編集:

多くの Web サーバーは何らかの形式の SSI (サーバー サイド インクルード) をサポートしています。この機能を使用すると、HTML にいくつかのタグを追加することができます。これは、PHP よりもはるかに単純で高速な (そして古い) スクリプトの非常に限定された形式です。これを使用すると、ほとんどのコンテンツを含む静的ページを設定できます。「小さな動的部分」については、SSI タグが別の場所で生成された動的ページを参照します。

私は、ほぼすべてのフロントエンドとして nginx を特に気に入っています。非常に高速で、リソースが少なく、非常にスケーラブルです (よりクリーンで安定したコードを備えた lighthttp を考えてみてください)。著者は、それを汎用の Web サーバーではないと説明しています。ただし、プロキシフロントエンドとして。バックエンドは、HTTP サーバー (通常は Apache) または FastCGI プロセス (PHP、Python、Perl など)、またはそのいずれかまたは両方のファームです。

memcached モジュールは驚くべきものです。memcached (最速で最もスケーラブルな汎用分散ハッシュテーブル) を使用して、ディスク アクセスを必要とせずに Web ページを URL に直接関連付けます。memcached は Web サーバー自体の「外部」からアクセスできるため、動的ページでも使用できます (適切な URL/リソース マッピングがあれば)。しかし、あなたの場合はあまり役に立たないと思います。いずれにせよ、まず SSI で動作するようにしてから、(必要に応じて) memcached で動的部分を最適化できます。

于 2008-11-30T05:00:58.853 に答える
2

したがって、Varnish には、私が望んでいたほぼすべてのことを行う基本的な ESI サポートがある (そしてあった) ことがわかりました。誰かが ESI を行う必要がある場合、Varnish は非常にうまく機能するようです。それはかなり基本的ですが、それでも素晴らしいです。

于 2010-04-22T17:55:08.447 に答える
1

nginxSSIをmemcachenginxモジュールと一緒に使用してコンテンツフラグメントをつなぎ合わせる方法について書いた人が何人かいることを私は知っています。ESIのようなものよりもはるかに制限されていますが、それでも便利です。

于 2008-11-30T07:50:16.937 に答える
1

Akamai には、エッジでの J2EE の実行を可能にするエッジ コンピューティング用のソリューションがあります。今日のその他の代替手段には、あらゆるクラウド コンピューティング サービスが含まれます。Rackspace と Amazon は、この市場のプレーヤーです。望ましい結果を得るには、CDN とクラウド コンピューティングを組み合わせて使用​​するのが理想的です。また、ページ テンプレートの読み込み後に Web サービスを介して動的コンテンツを非同期的に提供し、静的ページ コンテンツを html テンプレートでキャッシュすることもできます。

于 2011-04-13T16:38:25.043 に答える