Google 微软 Apple Java 无人驾驶 人工智能 大数据 阿里巴巴 特斯拉 Facebook VR/AR 安全 手机 亚马逊 机器人 云计算

Nginx+Redis+Tomcat Web负载均衡

session会话在单台服务器下不会出现共享问题,现在应用部署方式都是分布式,或者集群部署,这样必然会面临一个问题,session共享。

session共享的解决方案也有很多:

一、web服务器的粘性请求,比如采用nginx请求分发,使用ip_hash这种负载均衡方式,客户端请求只会被分发到相同的后台server,这样可以避免session共享的问题。但是缺点也很明显。

1/ nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。

2/ nginx的后端还有其它方式的负载均衡。假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。

二、基于数据库存储(网站用户量大的情况下,频繁dml数据,对db压力大)。

三、基于cookie存储(虽然可以加密存储,但是毕竟是客户端保存安全问题不容忽视)。

四、服务器内置的session复制域(比如was下提供session复制功能、但这个损耗服务器内存,相当于每台服务器session变更都要通知其他服务器进行更新,代价相当大)。

五、基于nosql(redis、memcache都可以),方案最优。

 

基于Nginx+Redis+Tomcat Web负载均衡实现思路:

1.压力分发,仅使用Nginx作为负载入口(不使用ip_hash)。

2.使用Redis接管原来由Tomcat管理的Session数据。

3.重写Tomcat Session Manager,实现Session在Redis中的整个生命周期的管理。

TomcatRedisSessionManager插件下载及教程请点击。

 

 

 

点赞 0 打赏

我要评论