为什么RESTful应用程序更容易扩展

时间:2012-07-02 16:19:26

标签: web-services rest architecture

我一直认为选择RESTful架构的一个原因是(其中包括)具有高负载的Web应用程序的更好的可伸缩性。

为什么?我能想到的一个原因是,由于每个客户端定义的资源相同,缓存变得更容易。在第一个请求之后,后续请求从memcached实例提供,该实例也可以水平扩展。

但是你也不能用传统方法来实现这一点,其中动作在网址中被编码,例如(booking.php /用户id = 123&安培; travelid = 456&安培; foobar的= 789)。

5 个答案:

答案 0 :(得分:14)

REST的一部分确实是URL部分(它是REST中的R),但S对于缩放更为重要:状态。

REST的服务器端是无状态的,这意味着服务器不必跨请求存储任何内容。这意味着服务器之间不必进行(多)通信,使其可水平扩展

当然,在R(代表性)中有一个小小的好处,因为如果你有一个很好的URL,负载均衡器可以轻松地将请求路由到正确的服务器,并且GET可以转到奴隶而POST则转到主人。

答案 1 :(得分:4)

我认为汤姆所说的非常准确,但可伸缩性的另一个问题是在扩展时改变的障碍。因此,REST的最大租户之一就是HyperMedia。基本上,服务器将拥有路径并在运行时将它们传递给客户端。这允许您在不破坏现有客户端的情况下更改代码。但是,您会发现REST的大多数实现只是简单地隐藏在REST背后的RPC ......这是不可扩展的。

答案 2 :(得分:2)

"可伸缩"或者"web scale"是关于网络,云和REST的最滥用的术语之一,主要用于说服管理层获得他们支持将他们的开发团队转移到REST列车上。

这是一个没有价值的流行语。如果您在网上搜索" REST可伸缩性"你会发现很多人在没有任何具体证据的情况下互相鹦鹉学舌。

REST服务与通过SOAP接口公开的服务完全相同。两者都只是应用程序服务的HTTP接口。这项服务的实际扩展程度取决于完全如何实际实施此服务。编写一个无法在REST和SOAP中都可以扩展的服务是可能的。

是的,你可以用SOAP做一些让它变得更糟的事情,比如依赖状态和会话。开箱即用的SOAP不会这样做。这要求您使用更智能的负载均衡器,如果您真的关心任何形式的扩展,那么您仍然需要它。

REST允许SOAP不做的一件事,以及此处的其他一些答案,通过HTTP缓存代理或客户端缓存可缓存的响应。当许多操作时,可能使REST服务比SOAP服务更轻微地加载。响应是可缓存的。所有这些意味着更少的请求最终会在您的服务中结束。

答案 3 :(得分:0)

原因(可能不是 原因)是RESTful服务是无会话的。这意味着您可以轻松使用负载均衡器将请求定向到各种Web服务器,而无需在所有Web服务器之间复制会话状态,也不必确保来自单个会话的所有请求都转到同一Web服务器。

答案 4 :(得分:0)

说其他应用程序是可扩展的,其主要原因是:它基于HTTP协议构建。因为HTTP是无状态的。无状态意味着它不会在其他请求之间共享任何内容。因此,任何请求都可以发送到负载平衡群集中的任何服务器。没有任何强制此用户请求进入此服务器的。我们可以使用令牌来克服这个问题。

由于这种无状态性,所有REST应用程序都非常易于扩展。但是,如果要在每个服务器中获得较高的吞吐量(每秒可以处理的请求数量),则应该优化阻止应用程序中的内容。请遵循以下提示

  • 使每个REST资源都是一个小实体。不要从许多表的联接中读取数据。
  • 从数据库附近读取数据
  • 使用缓存(Redis)代替数据库(您可以保存DISK I / O)
  • 始终保持尽可能远的数据源,因为这些块将使服务器资源(CPU)处于理想状态,并且其他任何请求都无法在理想状态下使用该资源。