为什么使用有状态的Web服务是不好的编程?为什么它会被允许?

Jus*_*anz 8 web-services stateful

我需要在我们的组织中建立有状态的Web服务.但是,我在网上看到的所有地方都表示构建有状态的Web服务是糟糕的编程,但没有说明原因.我想我不明白这是多么糟糕.我也不太明白为什么他们会给你一个解决方案让你在网络服务中拥有状态.

所以我想我的问题是,为什么使用有状态的Web服务是不好的编程?为什么它会被允许?

Not*_*tMe 17

Web服务的整个目的是以一种高度可扩展的方式在一个事务中提供一个功能.这意味着保持简单和原子化.

当您必须进行多次调用以执行操作时,您很有可能将事务挂起.客户回来了吗?他们完成了吗?交易还需要多长时间?他们崩溃了吗?如何处理回滚?

这些问题的答案可能会对运行服务所需的资源产生根本影响.这就是为什么每个人都建议一举完成所有这一切.

  • 很好的答案!此外,如果您的操作是有状态的,如果服务器失败会发生什么?(它会.这就是我们运行服务器集群的原因.)所有状态都将丢失.Stateless允许您将请求重新提交到群集中的下一个服务器,就好像什么都没发生一样. (3认同)
  • 完全不对。Web服务是关于远程应用程序之间的通用市场范围集成技术。它们中的大多数都是无状态的,因为我们处理的大多数操作都是无状态的...当实际上有状态的方法是正确的方法时,即使考虑到继承的非功能性方面,您的答案也可能会误导人们使用多种无状态服务。 (2认同)

Sud*_*han 9

以下是我能想到的一些原因:

  1. 维护状态的成本必须仅由服务器端承担 - 服务消费者很少是Web浏览器,因此没有cookie.这降低了服务器性能并增加了设计复杂性.

  2. 服务使用者是一种智能程序,而不是一种愚蠢的浏览器.因此,程序将(几乎总是)保持自己的状态.换句话说,当您提供服务时,您的消费者将准确地请求所需的数据.维护服务器上的状态变得过时且不必要.

  3. 事务 - 服务是系统中的悬空点,因为它的客户端大部分都是智能的,他们决定何时通知您状态的变化.这意味着如果您维护状态,则可能必须在服务调用之间等待才能完成事务操作.并且绝对不能保证客户端将进行下一次服务呼叫.

有很多原因,但这些是我能想到的最好的因素:)