关于“架构风格和基于网络的软件架构设计”的Fielding论文在第78-79页指出,客户机和服务器之间的通信应该是无状态的。它还说“这个约束诱导了可见性、可靠性和可伸缩性的属性。”
此外,它还说,“由于不必在请求之间存储状态,服务器组件可以快速释放资源,因此可扩展性得到了改进,而且由于服务器不必跨请求管理资源使用,因此进一步简化了实现。”
现在,我们几乎所有其他应用程序都需要“有状态”,那么,http的无状态特性在可伸缩性方面还有什么好处呢?
在这方面的任何帮助都是非常感谢的。谢谢。

最佳答案

现在我们几乎在所有其他应用程序中都需要“有状态”
我们确实在“大多数”应用程序中这样做。有很多应用程序只为一些持久性存储提供一个crud接口。
然而,这与所述应用程序的体系结构,或者更确切地说,与它们如何与后端通信没有多大关系。一种客户端,通常托管一些用户界面,它通过某些层与某些服务进行对话,以便让后端执行某些操作(crud或rpc)。
是关于这项服务的沟通。这就是无国籍。这意味着从客户机到服务的每条消息都包含足够的信息,以便让服务执行所需的操作。这就是rest的全部含义。
这意味着服务器不需要知道客户机建立的连接的来源。从客户端到服务器不需要永久连接。连接或此连接所涉及的会话中没有隐藏的“元数据”。
这意味着您可以轻松地横向扩展:当您的服务器连续达到其客户端连接限制或其他资源限制时,您只需添加另一台服务器,就可以为更多的客户端提供服务。
现在,由于http本身是无状态的(除了使用cookies和服务器端存储进行会话模拟之外),它最终成为rest服务的传输层。

10-08 04:48