【问题标题】:How stateless server can keep session state on server side?无状态服务器如何在服务器端保持会话状态?
【发布时间】:2020-01-27 20:04:18
【问题描述】:

我正在阅读 Martining Fowler 的名著Patterns of Enterprise Application Architecture,以系统化我的知识。

我读过Session and States 章节,我有点困惑。在本章的第一部分作者推荐使用无状态服务器来避免一些问题。然后作者说有时我们需要在服务器端保存一些数据 - 例如网上商店的用户购物车。 但是要实现有状态的会话我们可以使用无状态服务器。然后作者描述了保存会话状态的方法(客户端、服务器、数据库)

但读完这一章后,我不明白什么是无状态服务器。如果服务器保持会话状态,它如何成为无状态的?

【问题讨论】:

  • 服务器不保持“会话状态”。应用程序保持其状态,其中也可以包含会话信息。

标签: java session architecture state stateless


【解决方案1】:

Quora 有一个很好的定义:

无状态服务是一种不在应用服务器上存储任何数据的服务。它读取或写入数据到数据库,返回一个值(或不返回),然后,任务本身的任何信息都被遗忘了。

含义:保存状态数据的不是服务器本身。它可以将其放入某个数据库中。然后,它可能会向客户端提供某种类型的 token,客户​​端可以将其包含在未来的调用中。并且该 token 使其他服务器能够从数据库中检索相应的数据。

关键是:当然,信息需要存储在某处。但那个地方不是服务器,而是所有无状态服务器都可以访问的一些基础设施。

【讨论】:

  • 那么在客户端或数据库(或任何其他外部存储)中保持会话状态允许我们拥有无状态服务器?
  • @gstackoverflow 我认为这是一个有效的结论。关键是:你的“状态数据”需要去某个地方。当您想让自己在同一个客户端的请求之间“切换”服务器时,它们不能单独位于该服务器上。但也要注意:当然,这是有后果的。我看到了更多的潜在愿景。即使您拥有“无状态”服务器,它们也可能会“缓存”信息,并且出于性能原因,您可能希望同一个客户端以某种方式访问​​“同一个”服务器。
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2013-10-24
  • 2010-11-25
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多