小编MrK*_*urt的帖子

后处理反向代理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>
Run Code Online (Sandbox Code Playgroud)

您将在该示例中看到的是一小部分Ruby,它根据cookie值确定包含的文件,然后返回带有要拉入的URL的哈希值,超时值以及一些默认文本,以便在错误.理论上,所有包含也可以异步请求.

我的理解是亚马逊做了这样的事情.后端服务生成各种页面组件,具有严格的超时限制以确保整体页面速度.我希望他们的CDN服务会包含这样的东西,但它不是!

Edge Side Includes(ESI)的W3规范几乎就是我想要的.然而,对它的支持很少.它可以通过Akamai获得,有一些Oracle软件可以做到这一点,开源Varnish缓存有一个非常基本的实现.它也是一种非常丑陋的XML格式.

所以问题是:那里有什么让我做我想做的事情?是其他人以这种方式做事吗?

proxy amazon caching reverse-proxy edge-side-includes

6
推荐指数
1
解决办法
2692
查看次数