web-services - 有状态的 Web 服务有多好和/或有多必要?

标签 web-services session stateful

你们在实际项目中看到什么样的服务器?

1) Web 服务必须是无状态的:基本上你必须在每个请求中发送用户名/密码,每个请求都必须使用 HTTPS,如果需要,我将每次都验证并加载用户对象。

2) Web 服务的 session :就像在 Web 容器中一样,因此我至少可以保存经过身份验证的用户对象并具有类似于 session ID 的内容,因此我不需要在每个请求上都进行身份验证、加载和检查用户。

3)Sticky Service(跨请求的持久服务):https://jax-ws.dev.java.net/nonav/2.1/docs/statefulWebservice.html

我了解有状态服务(以及 Web 应用程序 session )的可伸缩性问题,但有时您必须拥有某种状态,例如购物车。但是您也可以将此状态放入数据库中(将后端用作一种 session argh)或将整个状态传递给客户端(客户端负责重新发送整个购物车)。

事实是,至少对于 Web 应用程序, session 在许多情况下都有很大帮助。如果您的系统接受“如果他的 Web 服务器发生故障,用户必须重新开始他正在做的任何事情”,则可以忽略可伸缩性问题,或者如果这是 Not Acceptable ,您可以尝试使用 session 集群。

Web 服务的情况如何?我倾向于得出结论,Web 服务与 Web 应用程序非常不同,并且接受选项 1)(总是无状态的),但很高兴听到基于实际项目经验的其他意见。

最佳答案

理想情况下,网络服务(和网站)应该是无状态的。

不幸的是,这需要经过深思熟虑的问题域和清晰的关注点分离。

我在实践中发现 最多现实世界的网站依赖于状态,即使这限制了它们的可扩展性。

我还发现 许多现实世界的网络服务也依赖于状态。

最终,“正确”的决定是针对特定问题的决定,因此编写一个依赖于状态的 Web 服务并在以后在可伸缩性成为问题时对其进行重构可能是可以的。

关于web-services - 有状态的 Web 服务有多好和/或有多必要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1009863/

相关文章:

parameters - RenderStrategy.ONE_PASS_RENDER 是一种在 Wicket 应用程序中摆脱 ?1 等页面版本参数的合理方法吗?

flutter 应用程序 : how about changing the state inside 'build' ?

java - 如何使用 jax-ws commons 配置 jax-ws 以与 Spring 一起使用?

PHP登录系统,如何保护它

c# - 如何从纬度和经度获得最近的重要人口中心?

node.js - 两个本地 Node.js 服务器上的 session

php - 检查用户是否已经登录?

c# - 用于有状态应用程序的 ORM。 EF适合吗?或者任何?

android - 在 android 中使用 ksoap2 的 java.lang.ClassCastException

java - 我该如何解决 XMLStreamException