我们运行一个相对较高容量的内容网站。与大多数内容网站一样,每个网页的大部分都是相对静态的。这些文章很少改变,使它们成为某种形式的静态/边缘缓存的理想选择。但是,有两个大问题。辅助页面元素(导航栏,最近的内容列表等)变化非常频繁,快速使“完整”缓存页面失效。我们在页面中包含更多动态位,比如用户特定的信息等等也是很常见的。反向代理HTTP请求的后处理? (如Akamai的ESI)
有一个反向代理/负载均衡器可以处理后期内容,让我们处理包含代理/边缘。对后端的初始请求会返回一个粗略的模板,然后代理软件可以处理该模板以完成它。该标记可能是这个样子:
<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来拉,一个超时,以及一些默认的文本显示在一个错误的事件。从理论上讲,所有的包含都可以异步地被请求。
我的理解是,亚马逊做了这样的事情。各种页面组件由后端服务生成,具有严格的超时限制以确保整体页面速度。我希望他们的CDN服务能够包含这样的内容,但不是这样!
Edge边包括(ESI)的W3规范几乎是我想要的。然而,对于它的支持很少。它可以通过Akamai获得,有一些Oracle软件可以完成它,开源的Varnish缓存具有非常基本的实现。这也是一个非常丑陋的XML格式。
所以问题是:什么能让我做我想做的事?有没有其他人以这种方式做事?
你能扩充这个答案吗?这听起来并不像我想要的那么多,但可能我错过了一些东西。 – MrKurt 2008-11-30 20:50:32