我的组织需要有状态的 Web 服务。然而,我在网上读到的所有地方都说构建有状态的 Web 服务是糟糕的编程,但没有人说出原因。我想我不明白这有什么不好。我也不太明白为什么他们会提供解决方法以允许您在 Web 服务中拥有状态。
所以我想我的问题是,为什么使用有状态的 web 服务是不好的编程,为什么会被允许?
我的组织需要有状态的 Web 服务。然而,我在网上读到的所有地方都说构建有状态的 Web 服务是糟糕的编程,但没有人说出原因。我想我不明白这有什么不好。我也不太明白为什么他们会提供解决方法以允许您在 Web 服务中拥有状态。
所以我想我的问题是,为什么使用有状态的 web 服务是不好的编程,为什么会被允许?
Web 服务的全部目的是以高度可扩展的方式在一个事务中交付一项功能。这意味着保持事情简单和原子。
当您必须进行多次调用来执行操作时,您很有可能使交易挂起。客户回来了吗?他们完成了吗?交易应保持多长时间?他们撞车了吗?应该如何处理回滚?
这些问题的答案可能会对运行服务所需的资源产生根本性影响。这就是为什么每个人都建议一口气完成所有事情的原因。
以下是我能想到的一些原因:
维护状态的成本只能由服务器端承担——服务消费者很少是网络浏览器,所以没有 cookie。这会降低您的服务器性能并增加您的设计复杂性。
服务消费者是一个智能程序,而不是一个笨拙的浏览器。因此,程序将(几乎总是)保持自己的状态。换句话说,当您提供服务时,您的消费者将准确地请求它想要的数据。在服务器上维护状态变得过时且不必要。
事务 - 服务是您系统中的一个悬空点,因为它的客户端大多是智能的,它们决定何时通知您其状态的变化。这意味着如果您维护状态,您可能必须在服务调用之间等待才能完成事务操作。并且绝对不能保证客户会拨打下一次服务电话。
有很多原因,但这些是我能想到的:)
我认为这是一种神话
如果 google 可以使他们的有状态 Web 应用程序可扩展,那么为什么我们不能扩展有状态 Web 服务。这完全是关于降低可扩展性的应用服务器。
即使有网站或网络服务,最终目标是提供更好的服务。如果“有状态”是为了改善您的服务,那么请不要犹豫。