用于缓存 REST API 的 CDN

用于缓存 REST API 的 CDN

我正在研究 CDN 提供商,但我很难找到可用的提供商、它们到底提供什么以及它们是否适合我的目的。希望你们能给我一些建议 :-)

我们在 Amazon EC2 实例上托管公共 REST API。每次调用都是动态的,并且占用大量 CPU,但一般来说活动相当稳定。但是,经常会出现许多用户同时请求相同资源的短暂高峰。例如,当有人在博客或 Twitter 上发布资源链接,然后每个人都点击它时,就会发生这种情况。

许多资源不会频繁更改,我的服务器正在发送显式 Cache-Control max-age 标头,指定每个资源可以且应该缓存的时间。我需要一个 Web 缓存/反向代理/CDN,能够很好地检查缓存控制标头并缓存这些服务器调用,这样,如果 1000 个客户端在一分钟内请求相同的资源,我的服务器只需提供一次,或者至少不是 1000 次。

此外,CDN 应该能够缓存任何 HTTP GET 请求,无论内容类型或 URI 如何。文件大小的限制没有问题;输出通常简短而紧凑。我今天正在尝试使用 Cloudflare;但是他们只根据 URI 的“文件扩展名”缓存静态文件,这使得它对大多数 REST api 完全无用。最后但并非最不重要的一点是,我是一家小型初创公司,所以最好是价格合理且可以扩大和缩小规模的产品。

哪些供应商可能符合这些要求?感谢您提供任何经验/建议。

答案1

任何能够“源获取”(这是 CDN 行业术语,我们大多数人会称之为反向代理)的 CDN 都应该能满足您的需求。在低成本、按使用付费的 CDN 中,我知道这些 CDN 具有以下功能:

请注意,使用 Akamai 作为 CDN 的 Rackspace Cloud Files 仅支持上传到其服务器的静态来源文件。

一个关键点可能是最小缓存寿命。快速更新的内容会给 CDN 带来问题,因为 CDN 旨在提供静态内容。因此,如果您设置“Cache-Control: max-age=5”,则特定 CDN 可能会将其更改为某个最小值(例如 3600),或者根本不缓存它,而只是将请求传递回您的源站。

如果按使用付费的 CDN 都不能提供您需要的短缓存生命周期,您可能需要考虑签约 CDN 服务。或者,最好的选择是设置或者Nginx在一个或多个 EC2 实例上进行缓存。

答案2

有一些公司专门提供 API 管理服务,包括缓存。

我脑海中浮现出两个名字:

  1. 阿皮吉
  2. 马舍里

与传统 CDN 相比,您使用它们可能会更幸运。

如果你正在寻找内部反向缓存代理,那么我认为会做得很好。

答案3

我无法代表其他/较小的 CDN 发言,但我曾与 Akamai 和 Level3 合作过。我可以告诉你,Akamai 绝对可以通过 mime 类型缓存,甚至可以通过通配符匹配 uri 词干缓存。他们几乎可以满足你的所有需求,只是我不知道你是否觉得它们在你的预算之内。

一旦通过 Akamai,如果所有请求都是 www.yoursite.com,而您希望缓存一些请求,那么如果您想节省成本,就需要稍微修改一下您的应用程序。例如,如果您将其保存在 www.yoursite.com,全部由于主机现在已重定向到 Akamai 主机,因此请求将开始通过 Akamai。任何未配置为缓存的内容都将被代理。

另一方面,您可以重命名网站的部分内容,以便您的 cookie 设置为 domain=*www.yoursite.com,并重写部分内容,以便您希望缓存的部分实际上位于主机 cdn.www.yoursite.com(或任何其他名称,您明白了)。这意味着您不希望缓存的任何内容都会直接进入源站,而 cdn.www.yoursite.com 子域中的任何内容实际上都会进入 akamai。毫无疑问,您需要在源服务器上做出必要的安排来适应这一点。

Akamai 有一个基于带宽的计费选项(如果对于每天点击量仅为 1000 次的网站还有另一种选项的话),这样做可以为您节省一些钱。

话虽如此,老实说,如果您谈论的是静态资源的大量访问,足以保证缓存控制,而且这只是数千个问题,那么您可能正在寻求解决错误的问题。如果这些请求需要在您的 Web 应用程序上对每个请求进行后端调用,您应该考虑重新设计它,以便将其缓存在应用程序内,并使对此类资源的 Web 请求更便宜。

相关内容