繁体   English   中英

后处理反向代理HTTP请求? (如Akamai的ESI)

[英]Post processing of reverse proxied HTTP requests? (like Akamai's 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>

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

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

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

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

事实证明,Varnish已经(并且拥有)基本的ESI支持,几乎可以完成我想要的所有工作。 如果有人需要做一些ESI的东西,Varnish似乎很适合它。 这是非常基本的,但仍然很棒。

将Nginx设置为前端,并使用SSI选择页面的动态部分。 动态源可以是HTTP服务器,如Apache,也可以是FastCGI服务器,例如PHP或Django。

编辑:

许多Web服务器支持某种形式的SSI(服务器端包含),此功能允许您将一些标记作为一种非常有限的脚本形式添加到HTML中,比PHP更简单,更快(和更旧)。 使用它可以设置包含大部分内容的静态页面,对于“小动态部分”,SSI标记引用在其他地方生成的动态页面。

我特别喜欢nginx作为几乎任何东西的前端。 它的速度快,资源充足,可扩展性极强(想想更清晰,更稳定的代码)。 作者将其描述为不是通用的网络服务器; 但作为代理前端。 后端可以是HTTP服务器(通常是Apache)或FastCGI进程(PHP,Python,Perl,等等),也可以是其中一个或两者的服务器场。

memcached模块非常棒,它使用memcached(这是最快且最具扩展性的通用分布式哈希表)直接将网页与URL相关联,不涉及磁盘访问。 因为memcached可以从webserver本身的“外部”访问,所以它甚至可以用于动态页面(给定一个理智的URL /资源映射); 但我不认为这会对你的情况有所帮助。 在任何情况下,首先使它与SSI一起使用,然后您可以(如有必要)使用memcached优化动态部分。

我知道有些人写过将nginx SSI与memcache nginx模块结合使用以将内容片段拼接在一起。 它比ESI更有限,但仍然有用。

Akamai有一个Edge Computing解决方案,允许J2EE在Edge上运行。 今天的其他替代方案包括任何云计算服务 - Rackspace和亚马逊是这个市场中的几个参与者。 理想情况下,您将使用CDN和云计算的组合来获得所需的结果。 此外,您可以选择在加载页面模板后通过Web服务异步提供动态内容,然后使用html模板缓存静态页面内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM