11

我可以看到有状态的协议可以减少像 cookie 这样的“模拟状态”。

但是测试变得更加难以确保您的实现正确并重新连接,并且会话继续可能很难处理。

始终使用无状态协议是否被认为是更好的做法,还是真的是特定领域的?

我认为在处理有状态协议时身份验证会变得更容易,但是还有其他原因应该使用有状态协议吗?

4

7 回答 7

13

无国籍的优点:

  1. 高扩展性 (可以向任何节点发送请求,可以随时添加节点)
  2. 高可用 (如果一个节点发生故障,没有状态丢失,只是重新发送请求到另一个节点)
  3. 高速 (因为没有状态,结果是可缓存的)
于 2009-03-09T16:22:22.643 回答
9

状态对您的应用程序有多重要?您是否需要不同机器之间的持续数据流,还是爆发更有用?如果您正在编写 IP 电话类型的应用程序,那么您可能会想要一些相当有状态的东西,如果您可以摆脱无状态,那么这样做可能会更便宜、更容易。有状态地做事必然更脆弱,因为如果连接的任何一端被丢弃或连接本身发生故障,您将面临更高的数据丢失风险,而对于无状态连接,您更有可能只需要等待一段时间并尝试再次。

它们确实是用于不同工作的不同工具,但鉴于无状态技术在线的易用性和普遍性,当您有选择时,朝这个方向看是合乎逻辑的。

于 2009-03-09T16:24:09.753 回答
9

我会认为它是特定领域的。如果您正在编写 ping 的道德等价物,那么无状态协议是正确的选择。另一方面,如果您正在编写 VNC,则肯定是有状态的。

至于什么时候选哪个,有两点要记住。首先,虽然实施选择是非此即彼,但问题空间是一个连续统一体。所有现实世界的任务都至少有一点状态,问题是多少以及传递它的开销是否值得在两端跟踪它的麻烦。其次,您通常处理的是协议栈,而不是单个协议;确保一切都生活在正确的水平上可以极大地简化事情。

于 2009-03-09T16:26:02.010 回答
3

无状态协议更容易集群,因为状态永远不需要在后续请求时从一台服务器传输到另一台服务器。

于 2009-03-09T16:18:31.170 回答
3

我个人并不熟悉有状态与无状态的所有设计问题,但我确实知道 NFSv4 在 15 年之前的 NFS 版本无状态之后是有状态的,因此显然无状态成为 NFS 设计者的一个重大限制。

几分钟的谷歌搜索显示了几篇谈论 NFSv4 的状态的文章和博客;对于所涉及的一些设计问题,这应该是有趣的阅读。

于 2009-03-09T16:32:37.440 回答
2

无状态协议的另一个好处是它更容易处理服务器故障转移情况和/或集群/负载平衡情况。

于 2009-03-09T16:17:23.980 回答
1

有状态的更好。然后你不必一直发送状态。然后协议变得更简单。

于 2009-03-09T16:26:10.777 回答