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

时间:2013-07-20 06:04:39

标签: web-services web-applications web webserver

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

我想知道用于解决此问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

如果您希望存储较大的对象,则必须查看负载平衡架构(群集)并做出决定。当然,我不能解释这里的所有内容,因为它们是一个很大的主题,但我可以从我的经验中给你一些提示,以便你可以进一步研究:

  1. Sticky session:使用这种方法,客户端会遇到其中一个负载平衡服务器,因此只能使用该服务器。这意味着您可以像管理单个节点服务器一样管理所有会话。
  2. Cluster topology:查看您的节点群集,查看它支持的拓扑以及它是否可以在eah other之间共享数据。我之前配置过:Ring和Star。有关详细信息,请参阅this文章。
  3. Database:这是在负载均衡环境中共享对象的最简单而经典的方法之一。
  4. File System:非常像数据库,可以使用集中文件系统将对象序列化并稍后检索它,例如NFS,AFS。