【问题标题】:REST API caching, should I use a Reverse proxy or memcache(d)?REST API 缓存,我应该使用反向代理还是 memcache(d)?
【发布时间】:2011-04-07 20:36:39
【问题描述】:
我有一个 REST API,我想在其中缓存索引的 JSON 响应 (GET /foo) 和读取操作 (GET /foo/1) 以显着提高性能。当资源上有 POST 或 PUT 时,索引和读取结果的缓存条目需要过期,因此不会提供旧内容。
这种情况最好使用 Squid / Varnish 等反向代理完成,还是您会选择 memcache(d)?
【问题讨论】:
标签:
rest
memcached
reverse-proxy
squid
varnish
【解决方案1】:
使用位于 HTTP 层的反向代理更加透明。这意味着可以通过网络查看正在发生的事情。不好的是,其中很少有人支持缓存经过身份验证的响应,因此如果您的资源需要身份验证,它们的效率可能会下降到 0。当完全不相关的资源 B (/foo/1) 被修改时,反向代理通常也不会自动使资源 A (/foo) 过期。这是您必须以某种方式添加到解决方案中的正确行为。
如果使用 memcached,这两个问题都可以解决,因为它没有透明度要求。
【解决方案2】:
我会选择像 varnish 这样的反向代理,因为您可以在不涉及缓存逻辑的情况下实现(和测试)您的服务,并将缓存添加为单独的层。您可以在 varnish 为 GET 请求提供旧结果时升级/重新启动您的服务(非常适合可用性),并且很容易在 varnish 中设置规则以根据特定的 GET/POST 操作使现有缓存结果无效(清除)。