关于“建筑风格和基于网络的软件架构设计”的论文指出,第78-79页客户端和服务器之间的通信应该是无状态的。它进一步说:“这种约束导致了可见性,可靠性和可扩展性的特性。” 此外,它说,“可扩展性得到改善,因为不必在请求之间存储状态允许服务器组件快速释放资源,并进一步简化实现,因为服务器不必跨请求管理资源使用。”
现在我们在几乎所有其他应用程序中都需要“有状态”,HTTP的无状态性质如何在可伸缩性方面仍然有益呢?
对此方面的任何帮助表示高度赞赏。感谢。
答案 0 :(得分:1)
现在我们需要"有状态"几乎所有其他应用程序
我们确实在"大多数"应用。有一个 lot 的应用程序只为某些持久存储提供了一个CRUD接口。
然而,这与所述应用程序的体系结构几乎没什么关系,或者更确切地说,它们如何与它们的后端进行通信。客户端,通常托管一些用户界面,通过某个层与某些服务进行通信,以便让后端执行某些操作(CRUD或RPC)。关于与此服务之间的通信。 那是无国籍的。这意味着从客户端到服务的每条消息都包含足够的信息,以使服务执行所需的操作。这就是REST所代表的一切。
这意味着服务器不需要知道客户端建立的连接的来源。客户端与服务器之间不需要永久连接。没有"元数据"隐藏在连接中,或者在此连接所需的会话中。
这意味着您可以轻松地水平扩展:当您的服务器持续达到其客户端连接限制或其他资源限制时,您只需添加另一台服务器,这样您就可以为更多客户端提供服务。
现在,鉴于HTTP本质上是无状态的(除了使用cookie和服务器端存储的会话仿真),它最终将自己作为REST服务的传输层。