分布式Web服务器如何维护客户端状态

问题描述 投票:0回答:1

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

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

web-services web-applications web webserver
1个回答
1
投票

这很大程度上取决于您的应用程序架构以及您希望共享哪种类型的会话信息。

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

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

  1. Sticky session:
    使用这种方法,客户端会陷入负载平衡服务器之一的困境,因此始终仅由该服务器提供服务。这意味着您可以像在单节点服务器上一样管理所有会话等。
  2. Cluster topology:
    查看您的节点集群,看看它支持哪些拓扑以及是否可以在彼此之间共享数据。我之前配置过:环和星。请参阅这篇文章了解更多详情。
  3. Database:
    这是在负载平衡环境中共享对象的最简单和经典的方法之一。
  4. File System:
    非常类似于数据库,可以序列化对象并稍后使用集中式文件系统(例如NFS、AFS。
© www.soinside.com 2019 - 2024. All rights reserved.