为什么鱿鱼适合REST架构?

时间:2009-11-28 12:10:49

标签: optimization rest caching squid

this文章中,有人认为如果经常从数据库中获取随机实体,则使用Memcache;如果使用REST架构,则使用Squid 。请解释原因(关于鱿鱼)。

5 个答案:

答案 0 :(得分:6)

Memcache是​​一个分布式对象存储 - 您可以将对象放入和放出此对象。它是任何用途的通用缓存。

Squid是代理服务器和Web缓存。如果一切都是通过URL(例如REST),那么Squid将免费完成这项工作。

总而言之,memcache是​​通用的,Squid用于缓存URL的结果。

答案 1 :(得分:3)

REST是关于http和资源的。

squid可以用作reverse proxy,因此需要从网络服务器加载。服务器端可以设置some expires http header以指示缓存的时间窗口。

这就是说,缓存主要是通过标准的http标头完成的,因此它比缓存数据库查询更接近休息样式架构。

答案 2 :(得分:2)

Rest使用http动词进行正确的动作,即GET始终是非破坏性的。网址也被命名为。这意味着Squid中的http缓存可以用于性能优势而无需依赖底层编程技术(ASP MVC,Rails,CouchDB等)

答案 3 :(得分:2)

Squid(作为代理和缓存)可以有效地与REST端点一起使用。在REST中,资源(应该)通过 ETAG / Last-Modified 标头显式传输,以便于缓存。

此外,REST中的许多操作(应该)是幂等(重复没有进一步的副作用):这对于Squid来说是一个完美的情况。它可以在没有打扰应用程序服务器的情况下单独执行这些操作。

答案 4 :(得分:1)

(这个答案比最初的问题晚了十年-但鉴于我在所咨询的较大组织中遇到此问题,因此我认为在这里进行解释很有用。)

Roy Fielding看着SOAP时,他意识到如果使用HTTP Methods(GET,POST等)来访问和修改资源< / strong>,而不是仅将HTTP用于仅用于远程过程调用,则可以利用其余的HTTP规范,例如缓存(RFC-2616)。 Fielding's layered architecture说明了这一点。这就是他设计REST的原因。

Squid作为HTTP缓存代理,可以显着减少后端系统的负载,同时确保缓存的数据是最新的。

该标准允许定义在重新验证项目之前可以将其缓存多长时间,以及如何发出条件请求,因此仅发送新版本以响应请求。所有这些客户端行为已在浏览器和主要语言(例如Java的Apache HttpComponents Clientaccompanying caching library)使用的HTTP客户端中实现。

由于到目前为止已经明确定义并实现了所有这些机制,因此使用它实际上只是使用这些组件的问题,您可能已经在使用其中的大多数组件(例如,在撰写本文时,Apache HC Components是SpringBoot附带的默认实现-只需将缓存库添加到构建中即可。

如果您要使用MemCache或Redis来实现此目的,则只是在重新发明轮子,从此以后,您将不得不负担维护自定义代码的重复性负担。而且,如果您没有在代码中实现RFC 2616的等效功能,那么您将使用过时的数据进行低效率的通信。