解决应用服务器变为集群后的Session问题
浏览器向应用服务器发送请求的时候,会建立一个会话,这样应用服务器根据不同的会话进行不同的操作,在会话开始时,分配一个会话标识sessinID,通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个标识来告诉web服务器请求的是属于哪个会话,在web服务器上,各个会话独立存储,保存不同的会话信息,然而当我们应用服务器变为集群后,例如:有两个应用服务器A,B。浏览器请求到来时,负载均衡系统把请求分配给A服务器,session信息存储在A上,当下一次请求时,如果负载均衡系统把请求分配给B,B上没有Session信息,就会出现问题。
下面是四种解决方案:
1、session sticky
上述问题在单机系统中不会出现,而在多机系统中,要解决这个问题,可以对负载均衡系统进行设置,使每一次的请求只交给同一个应用服务器处理,
缺点:应用服务器一旦宕机,立即无法提供服务,导致可用性降低。
:负载均衡系统变为一个有状态的节点,内存消耗更大,容灾方面更麻 烦
2、session Replication
在这种方式中,不要求每一次会话请求都到达同一个应用服务器,而是在 应用服务器之间增加了一个session数据同步,使每一个应用服务器,通过同步处理,达到session数据同步,这样的话,请求无论分配到那个应用服务器上,都可以处理
缺点:只要session有变化,就需要将数据同步到其它服务器,机器越多,同步带来的开销越大,同时每个服务器的数据冗余很严重。
3、session数据集中存储
这种方案是把Session数据集中存储起来,然后应用服务器从同一个Session存储器中获取session,
4、Cookie Based
把session数据放在cookie中,然后在用服务器上从cookie中获取session数据
缺点:导致session数据暴露在客户端,使数据不安全。