通过Nginx来实现负载均衡技术所带来的Session不同步的处理
题记:在以前的纯⽹页时代(不能交互),⽤户只能看看⽹页信息,可能看见⼀个想买的物品,只能按照⽹页上提供的电话、地址来联系。但随着技术的发展,⽤户可以直接在⽹站上与⼈交易,此时会产⽣⼀个问题,对⽅怎么知道⼀直是你在请求呢,其实是通过Session机制的。
Session机制
客户端第⼀次请求服务端时,服务端会产⽣⼀个session对象(⽤于保存该客户的信息);
并且每个session对象,都会有⼀个唯⼀的sessionId(⽤于区分其他session);
服务端⼜会产⽣⼀个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值;
然后服务端会在响应客户端的同时将该cookie发送给客户端,⾃此客户端就有了⼀个cookie(JSESSIONID)
因此,客户端的cookie就可以和服务端的session⼀⼀对应(JSESSION-sessionID)
(⽐如:登⼊淘宝后,⼀段时间内就不需要再次登⼊了)
负载均衡
将请求分发的技术,可以是软件诸如Nginx、Apache也可以是硬件诸如F5等。
⽽负责接收请求处理的服务器的集合就叫做集。
这个是tomcat集:
(通过负载均衡技术,可以把http请求分发给不同的服务器处理)
nginx和apache区别说了这么多,我们上nginx
nginx简介
nginx在中国等发展中国家使⽤⾮常多。
优点:安装配置简单、占有内存少、并发处理能⼒强3W+优化下10w+、
功能强⼤,动静分离,反向代理。
缺点:⽀持的应⽤少(⼯作在第七层)、不能保持Session。
负载均衡算法
由于nginx不能保持Session同步,所以会导致⼤问题。
Session不同步带来的问题
假如甲⽤户发送了⼀个请求给服务器,服务端做出反应,甲此时的浏览器中就产⽣了⼀个cookie(JSESSIONID),对应的a服务器就会有⼀个对应的(JSESSION-sessionID)。⽽甲发送第⼆个请求给服务器,它通过负载均衡算法可能分配给了b服务器,此时甲携带的
cookie(JSESSIONID)在b服务器中不到对应的
(JSESSION-sessionID)。为了安全,会要求⽤户重新登⼊。这样⽤户每发⼀个请求就可能会被要求重新登⼊⼀次(产⽣新的session)。⽤户体验极差。此时就要解决办法了。
Session⼀致性的解决办法
Stickey Session 粘带Session
Session Replication Session复制
Shared Session Session共享
1,粘带Session
修改Nginx配置⽂件
upstream balance{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:18080;
}
优点:配置简单、不⼊侵应⽤,⽆额外的代码修改,便于服务器⽔平拓展。
缺点:服务器重启Session丢失,存在单点负载⾼的风险,单点故障问题。
2, Session复制
优点:不⼊侵应⽤(session序列化)、便于服务器⽔平拓展、能适应各种负载均衡策略、
服务器重启或宕机不会造成Session丢失。
缺点:性能低、内存消耗、代码考虑(session序列化)
配置:
3, Session共享
使⽤redis缓存
配置:
优点:能适应各种负载均衡策略、服务器重启或宕机不会造成Session丢失、拓展能⼒强、适合集数量⼤时使⽤缺点:对应⽤有⼊侵,需增加相关配置、序列化反序列化消耗CPU性能
对⽐
Session 共享------⼤型分布式环境⾸选、可扩展性强、健壮
Session 复制------较⼩分布式环境⾸选、⽆⼊侵、健壮⽆单点故障问题
Session IP_HASH —配置简单、⽆⼊侵、存在单点故障问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论