你们在实际项目中看到什么样的服务器?
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/