【问题标题】:Understanding REST in terms of scalability, performance,从可扩展性、性能、
【发布时间】:2011-07-13 11:06:02
【问题描述】:

我只想知道我对 REST 的看法是否正确。假设我们有一个购物网站。使用传统方法,购物车将存储在用户会话中,因此服务器必须为用户管理许多项目(用户#1:项目1,项目2,项目3;用户#2:项目A,项目B,项目3,...) .因此,如果有超过 1000 名用户在网站上浏览并将商品添加到他们的购物车中,则服务器必须具有大量的内存/计算能力。

在 REST 方法中没有会话,因此客户端拥有有关购物车中商品的所有信息。这意味着服务器不需要这么大的内存需求,我可以轻松地扩展它。

现在,如果我以非 REST 方法将商品添加到购物车,它将直接进入会话。另一方面,如果我在 REST 方法中添加一个项目,我必须更新数据库中的实体(/shoppingcart/1234/),这将需要更长的时间,因为我必须更深一层(客户端- >服务器->数据库)。

到目前为止这是正确的还是我遗漏或误解了一点?

【问题讨论】:

  • REST 不关心购物车是在客户端还是服务器端。就您而言,REST 是关于如何将 Web 上的资源及其操作公开给客户端。
  • 好的,我已经通过 GET、POST、PUT、DELETE 理解了这一点。但是,如果我决定不在客户端管理我的购物车,那么使用 REST 会更慢,因为我只能将它们存储在数据库中而不是服务器的会话中?
  • 这与 REST 没有任何关系。您将 REST 与其他一些概念混为一谈(参见this answer)。
  • @bzlm,链接没有指向任何一个答案。
  • @bzlm 您的第一条评论很好地解释了 REST,但问题仍然是可伸缩性如何与 REST 一起工作。 ?

标签: performance rest scalability


【解决方案1】:

在 REST 方法中没有会话,因此客户端拥有有关购物车中商品的所有信息。

REST 无状态约束并不意味着客户端需要跟踪有关购物车中商品的所有信息(请不要这样做)。但这确实意味着购物车的状态是可寻址的(客户端拥有服务请求所需的所有信息)。

考虑以下网址:

/shopping-cart/john.howes

我对无状态约束的理解是,如果我或您或任何人导航到该链接,我们将获得相同资源的一些表示(假设我们有权查看它)。它可能是 XML 或 JSON 或 HTML,可能是英文或法文,但底层资源是相同的。如果我将该 URL 加入书签并稍后在另一台设备上查看或通过电子邮件将其发送给朋友,我们将获得相同的资源(假设它仍然存在并且我们有权查看它)。

所以,因为我有一个指向 /shopping-cart/john.howes 的链接,所以我拥有处理请求所需的所有信息。

现在,如果我以非 REST 方法将一个项目添加到购物车,它将直接进入会话。如果我在 REST 方法中添加一个项目,我必须更新数据库中的实体(/shoppingcart/1234/),这将需要更长的时间,因为我必须更深一层(客户端-> 服务器-> 数据库) .

我认为,无论您是否使用 REST,将大型对象添加到会话状态都会导致灾难(为了可维护性、可扩展性和完整性)。所以,我会硬着头皮使用数据库。而且我认为您基本上是对的:REST 并没有说明数据如何存储在服务器上,但它确实暗示您不会将用户会话的当前状态存储在 Web 服务器的内存中。我认为你有很多优化性能的选择。将所有内容都保留在会话中并不是一个很好的选择。

我希望这会有所帮助。

约翰

【讨论】:

  • 您听说过 RESTFest 吗? restfest.org很高兴你能加入我们。
  • 不想继续聊天,@bzlm,所以我通过推特回复。 :)
【解决方案2】:

在 REST 中创建购物车有两种不同的方式。一个是您实际上将购物车作为资源并为其分配一个 URI,如您所描述的那样。另一种是购物车的内容一直保存在客户端上,直到用户下订单为止。

这两种方法各有利弊,是的,将购物车存储为资源需要将购物车存储在数据库中(不过它可能是内存数据库!)。

但是,我不认为尝试在这方面进行性能比较,在使用会话和将购物车存储为资源之间,是特别有价值的。

【讨论】:

  • 但问题仍然是可扩展性的工作原理
  • @MohammadFaizanKhan 将购物车保持在客户端状态意味着服务器不必维护购物车状态,因此可以扩展到无限数量的具有待处理购物车的消费者。
  • 没关系,我们可以将购物车保存在 cookie 中,但不需要 REST。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2011-06-05
相关资源
最近更新 更多