【发布时间】:2012-12-21 11:58:02
【问题描述】:
我了解 REST 并且知道在不使用会话的情况下创建 RESTful Web 服务,我知道它更好,但我并不真正了解无状态的概念以及使用 REST 如何使您的应用程序具有可扩展性
谁能解释一下 REST 的这两个方面,无状态和可扩展性,以及 SOAP 有何不同和不可取之处?
【问题讨论】:
我了解 REST 并且知道在不使用会话的情况下创建 RESTful Web 服务,我知道它更好,但我并不真正了解无状态的概念以及使用 REST 如何使您的应用程序具有可扩展性
谁能解释一下 REST 的这两个方面,无状态和可扩展性,以及 SOAP 有何不同和不可取之处?
【问题讨论】:
有状态 API 将为所有连接的客户端维护会话。这意味着会话需要在服务器之间共享,这限制了可扩展性。
通过将此状态存储在客户端并随每个请求一起发送,您可以拥有相同的状态,但具有更好的可扩展性。
【讨论】:
创建 RESTful 服务不会使您的应用程序具有可扩展性,实际上,您可以创建基于会话且不能跨多台机器、粘性会话或完全无状态的 RESTful 服务.
至于可扩展性,许多因素决定了服务是否可扩展,事实上,即使服务需要会话,也可以扩展(例如,如果您的服务具有粘性会话,这意味着会话托管在一台机器上,网络访问者总是回到他会话所在的同一台机器上。
无状态服务使扩展更容易,因为这意味着一旦处理了请求,来自该 Web 访问者的下一个请求不一定必须返回到同一台机器,这意味着(理论上)您可以拥有尽可能多的您想要的机器服务相同类型的请求。如果您的流量翻倍,您只需添加相同数量的机器和繁荣,您现在可以处理两倍的请求。
然而,在实践中,事情变得复杂,几乎不可能创建完全无状态的服务。大多数情况下,如果您的 Web 访问者可以更新数据,您就会遇到并发问题,因为两个 Web 访问者可以更改相同的数据,并且必须进行某种同步以防止数据损坏。在这些情况下,您可能希望拆分您的服务,以便让您更改数据的服务不是无状态的,而让您提取数据的服务是无状态的。在大多数情况下,我猜大部分繁重的工作都在数据提取方面而不是数据更新方面,所以这很好。
至于 SOAP,我只能说世界正在朝着更轻量级的 REST 发展。
【讨论】:
无状态意味着您可以拥有任意数量的前端,每个前端都可以以相同的方式回答请求,无需处理文件系统会话,即
因此您可以扩展(添加任意数量的前端),这是实现无状态的最明显原因。
【讨论】: