应用服务器集群的Session管理

应用服务器的高可用架构设计主要基于服务无状态的特性,事实上,业务总是有状态的, 如购买信息,登录状态,新消息等。Web应用中这样的上下文对象称为会话。

单机情况下,Session可由部署在服务器上的Web容器(如JBoss)管理。
在使用负载均衡的集群环境中,由于负载均衡服务器可能将请求发往集群任何一台应用服务器上,需要采取手段保证每次请求都能获得正确的Session。

主要有以下几种手段:

1. Session复制
应用服务器开启Web容器的Session复制功能,在几台服务器之间同步Session对象,每台服务器都保存所有用户的Session信息。
优点:从本机上读取Session信息快速,任一机器宕机不影响使用
缺点:集群规模较大时,服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源。只能在集群规模较小的情况下使用

2. Session绑定(会话黏滞)
利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将同一IP地址的请求分发给同一台服务器,这时负载均衡服务器必须工作在HTTP协议层。这样整个会话期间,用户所有的请求都在同一台服务器处理,Session绑定在某台特定服务器上。
缺点:不符合高可用需求,某台服务器宕机,该机器上Session就不存在了

3. Cookie记录Session
浏览器Cookie记录Session。
优点:简单易用,支持应用服务器线性伸缩
缺点:受Cookie大小限制,能记录的信息有限;每次请求响应都要传输Cookie,影响性能;用户关闭Cookie,访问不正常

4. Session服务器
利用独立部署的Session服务器(集群)统一管理Session,应用服务器读写Session时,都访问Session服务器,将应用服务器的状态分离,分为无状态的应用服务器和有状态的Session服务器(利用分布式缓存、数据库)。Cookie 里面记录一个Session ID,当Cookie被禁用时,使用URL重写技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
优点:可用性高,伸缩性好,对信息大小无限制

Ref: 《大型网站技术架构》

你可能感兴趣的:(JavaWeb)