0

为了维护用户的状态,Web 服务器创建一个 Session 对象并将其分配给一个唯一的 session_id。这在单个服务器场景中是有意义的。但是,在分布式服务器架构中会发生什么,每个请求都可以访问不同的服务器。这个 Session 对象如何在不同的 Web 服务器之间共享?我能想到的一种方法是将其存储在数据库中,但这效率太低,因为每次读取都会产生额外的延迟。

我想知道解决这个问题的最佳实践是什么?

4

1 回答 1

1

这在很大程度上取决于您的应用程序架构以及您希望共享的会话信息的不足。

如果您只希望共享身份验证令牌,这可以通过 URL 重写或 Cookie 来完成。

如果您希望存储更大的对象,那么您将不得不查看您的负载平衡架构(集群)并做出决定。当然,我不能在这里解释所有内容,因为它们是广泛的主题,但我可以根据我的经验给你一些提示,以便你进一步研究:

  1. Sticky session:使用这种方法,客户端会被其中一个负载平衡服务器卡住,因此始终仅由该服务器提供服务。这意味着您可以像在单节点服务器上一样管理所有会话等。
  2. Cluster topology:查看您的节点集群并查看它支持哪些拓扑以及它是否可以在彼此之间共享数据。我之前配置过:Ring and Star。有关更多详细信息,请参阅本文
  3. Database:这是在负载平衡环境中共享对象的最简单和经典的方法之一。
  4. File System:与数据库非常相似,可以序列化对象并在以后使用集中式文件系统(例如 NFS、AFS)检索它。
于 2013-07-20T13:23:01.337 回答