REST API缓存,我应该使用Reverse代理还是memcache(d)?

时间:2010-09-03 13:20:34

标签: rest memcached reverse-proxy squid varnish

我有一个REST API,我希望缓存索引的JSON响应(GET / foo)和读取操作(GET / foo / 1)以显着提高性能。当资源上有POST或PUT时,索引和读取结果的缓存条目需要过期,因此不会提供旧内容。

这是一个最好用Squid / Varnish等反向代理完成的方案,还是选择memcache(d)?

3 个答案:

答案 0 :(得分:9)

使用位于HTTP层的反向代理更加透明。这意味着可以通过网络查看正在发生的事情。糟糕的是,其中很少支持缓存经过身份验证的响应,因此如果您的资源需要身份验证,它们的效率可能会降至0。当修改此完全不相关的资源B(/foo)时,反向代理通常也不会自动使资源A(/foo/1)失效。这是你必须以某种方式添加到你的解决方案中的正确行为。

如果使用memcached,这两个问题都可以解决,因为它没有透明度要求。

答案 1 :(得分:2)

我会选择像varnish这样的反向代理,因为您可以在不涉及缓存逻辑的情况下实现(并测试)您的服务,并将缓存添加为单独的层。您可以升级/重新启动服务,而varnish为GET请求提供旧结果(非常适合可用性),并且可以根据特定的GET / POST操作轻松地将清漆中的规则设置为无效(清除)现有缓存结果。

答案 2 :(得分:1)

如果要使用分布式内存,memcached是一个很好的解决方案。 https://github.com/cpatni/middleman是一个反向代理,它使用memcached进行缓存。