我有必要在我们的组织有状态的web服务。然而,我在网上阅读的任何地方都表示,构建一个有状态的web服务是糟糕的编程,但从来没有说过为什么。我想我不明白它的坏处。我也不明白他们为什么会提供解决方法,让您在web服务中拥有状态。
所以我想我的问题是,为什么使用有状态的web服务是不好的编程,为什么它会被允许?
我有必要在我们的组织有状态的web服务。然而,我在网上阅读的任何地方都表示,构建一个有状态的web服务是糟糕的编程,但从来没有说过为什么。我想我不明白它的坏处。我也不明白他们为什么会提供解决方法,让您在web服务中拥有状态。
所以我想我的问题是,为什么使用有状态的web服务是不好的编程,为什么它会被允许?
Web服务的全部目的是以高度可扩展的方式在一个事务中提供一个功能块。这意味着保持简单和原子的东西。
当您必须进行多次调用才能执行该操作时,您很可能会挂起事务。客户回来了吗?他们完成了吗?交易持续多久?他们有没有崩溃?应该如何处理回滚?
这些问题的答案可能会对运行您的服务所需的资源产生根本性影响。这就是为什么大家都建议一举全力完成这一切的原因。
优秀的答案!另外,如果您的操作是有状态的,那么如果服务器出现故障会发生什么? (它会的。这就是我们运行服务器集群的原因。)所有状态都将丢失。无状态允许您重新提交请求到集群中的下一台服务器,就好像什么都没发生一样。 – 2012-03-16 10:48:06
完全不对。 Web服务是关于远程应用程序之间的通用市场集成技术。其中大多数是无状态的,因为我们处理的大多数操作都是无状态的......即使实际上有状态的方法是正确的,即使考虑到与它无关的非功能方面,您的答案也可能误导人们使用多个无状态服务。 – BonanzaOne 2015-10-29 17:25:31
这里有一些原因,我能想到的:
保持状态会有的成本负担只有服务器端 - 服务消费者很少的Web浏览器,所以没有饼干。这会降低您的服务器性能并增加您的设计复杂性。
服务消费者是一个智能程序,而不是愚蠢的浏览器。因此,该计划将(几乎总是)保持自己的状态。换句话说,当你提供服务时,你的消费者会精确地要求它所需要的数据。维护服务器上的状态已变得过时和不必要。
交易 - 服务是系统中的一个悬挂点,因为它的客户主要是智能的,他们决定何时通知您其状态发生变化。这意味着如果您维护状态,则可能必须在服务调用之间等待以完成事务操作。而且绝对不能保证客户永远不会进行下一次服务电话。
有很多的原因,但这些是我能想到的把我的头:)
顶端的那些我认为这是一种神话
的如果谷歌能够使其状态化Web应用程序可扩展,那么为什么我们无法扩展有状态的Web服务。这都是关于降低可伸缩性的应用程序服务器。
即使有网站或网络服务,最终目的也是为了更好地服务。如果一个“有状态”是为了改善你的服务,那么不要犹豫,去做。
我会以不同的方式来看待这个问题 - 这个服务需要做什么是有状态的?这可以创造性地吸烟和镜像吗? – 2009-06-12 20:16:52