无状态协议是否比有状态协议更好用?

11

我可以看到有状态协议可以减少类似于cookie的拼接“模拟状态”的情况,但是测试变得更加困难以确保你的实现是正确的并且重新连接和会话继续可能非常难处理。

是否总是使用无状态协议被认为是更好的做法?还是这确实与领域有关?我认为处理有状态协议时身份验证会变得更容易,但是否有其他原因应该使用有状态协议?

7个回答

13

无状态的优点:

  1. 高可扩展性 (可以向任何节点发送请求,随时可以添加节点)
  2. 高可用性 (如果一个节点失败,没有丢失任何状态,只需将请求重新发送到另一个节点)
  3. 高速度 (由于没有状态,结果可以缓存)

9
你的应用程序对状态有多重要?你是否需要在不同机器之间保持数据的连续流动,还是突发传输更有用?如果你正在编写类似IP电话的应用程序,那么你可能需要相当具有状态性质的东西,如果可以使用无状态方式完成,则很可能更便宜、更容易。进行有状态的操作必然更加脆弱,因为如果连接的任一端断开或连接本身中断,你就会面临更高的数据丢失风险,而使用无状态连接,你更可能只需等待一段时间并重试即可。
这些确实是不同的工具,适用于不同的工作,但鉴于在线无状态技术的易用性和普及性,当你有选择时,向这个方向看起来是符合逻辑的。

9
我会考虑它是领域特定的。如果你正在编写ping的道德等价物,无状态协议是正确的选择。另一方面,如果你正在编写VNC,则有状态必然是正确的选择。
至于何时选择哪种协议,有两点需要注意。首先,虽然实现选择要么是这样,要么是那样,但问题空间是一个连续体。所有真实世界的任务都至少有一点状态,问题是有多少状态,传递状态的开销是否值得在两端跟踪它的麻烦。其次,您通常处理的是协议栈,而不是单个协议;确保每个协议生活在正确的层面可以极大地简化事情。

3

无状态协议更易于集群化,因为在后续请求中从不需要将状态从一个服务器转移到另一个服务器。


3

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

通过几分钟的谷歌搜索,可以找到几篇文章和博客,讨论NFSv4的有状态性;这对于涉及的一些设计问题应该是有趣的阅读。


2

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


1

有状态的更好。这样你就不必一直发送状态了。协议也会变得更简单。


2
如果HTTP是有状态的,那么Web很可能无法扩展。 - John Topley
1
很难说。如果状态得到良好解决,我们可能会有更好的应用程序。目前所有的框架都试图隐藏状态传递。我不知道是否有人成功了。但至少需要10年的时间。 :) - FlinkmanSV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接