比較的ボリュームの多いコンテンツ サイトを運営しています。ほとんどのコンテンツ サイトと同様に、各ページの大部分は比較的静的です。記事はめったに変更されないため、何らかの形式の静的/エッジ キャッシングの候補となります。ただし、大きな問題が 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 形式でもあります。
問題は、何が私にやりたいことをさせてくれるのかということです。他の誰かがこの方法で物事を行っていますか?