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