应用服务器集群的session管理

为解决HTTP无状态性和负载均衡下Session管理问题,本文介绍了4种策略:session sticky保持用户请求始终路由到同一服务器,session replication同步各服务器间的Session,利用cookie记录session但存在性能和安全问题,以及session集中存储在数据库或缓存服务器以实现统一管理。每种策略都有其优缺点,需根据实际应用场景选择合适的方法。
摘要由CSDN通过智能技术生成

首先,我们知道,HTTP是无状态的协议,应用服务器不保存业务的上下文信息,而是进根据每次提交的数据进行相应的业务逻辑处理,因此所有的服务期完全对等,一个请求由哪个服务器来处理都是一样的。

因此,为了保证网站的高可用,我们可以部署多个Web服务器,通过负载均衡的手段来缓解服务器压力;同时一个服务器挂掉了,负载均衡通过心跳监测机制发现该服务器失去响应,就会把它从服务器列表中移除,将请求发送到其他服务器上。

但是,事实上,业务总是有状态的:电商的购物车、社交网站的登录状态........因此,我们需要在服务器上保存用户的状态(Session)。

但是在负载均衡的情况下,一个服务器挂掉了,那它保存的session也没有了,那我们应该怎么办呢?

1.session sticky

就是负载均衡设备(F5、部署了nginx服务器的设备)在做路由分发的时候,将相同用户的请求总是路由到同一台服务器上。

可以利用负载均衡的源IP地址(或是cookieId)Hash算法实现。

但是这种做法不符合我们对高可用的期望,一台服务期挂掉了,那么该服务器上的session信息也没有了,用户请求切换到其他服务器上(其他服务器没有保存该用户的session)。

2.session replication

复制会话,服务器之间进行session的复制,从而保证了每个服务器上保存的session信息都是一样的。这样做的优点就是某台服务器down掉了也不会导致session的丢失,服务器在使用session时,在本地内存获取即可。

但是,这样是及其占内存的,效率也低下。

3.利用cookie记录session

客户端保存一个由userid、token、timestamp等生成的序列access_token,每次向服务器发送请求的时候都附带着这个access_token,服务器端拦截器获取到access_token后解析它,拿到userid、timestamp等,然后再对该session的有效性进行判断。

缺点:1.cookie不能太大,否则太影响传输效率,因此能记录的信息有限;

2.每次请求都要传输cookie,影响性能;

3.用户如果关闭了cookie,访问就部正常了。

4.session集中存储

将session存储在数据库、缓存服务器(redis等)里是一种办法。

当然,我们也可单独部署session服务器来统一管理session,应用服务器每次读写session时,都会访问session服务器。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值