徐州网站排名系统,南宁网站建设哪家好,诚信网站体系建设工作总结,一个人 建设网站先了解一下为什么会出现这种session共享的解决方案#xff1f;
随着互联网公司的项目在微服务和分布式的环境下进行的搭建#xff0c;导致一个项目可能分别部署在几个甚至很多的服务器集群下#xff0c;此时就会出现一个问题当用户进行一个session会话的时候#xff0c;比…先了解一下为什么会出现这种session共享的解决方案
随着互联网公司的项目在微服务和分布式的环境下进行的搭建导致一个项目可能分别部署在几个甚至很多的服务器集群下此时就会出现一个问题当用户进行一个session会话的时候比如一个用户去登录项目一般的大公司的项目都是有Nginx进行反向代理的但是这里简单列举一下Nginx常用的几种反向代理策略1.轮询策略2. 权重比例策略3. ip_hash策略4. 还可以自定义的策略在Nginx的反向代理下一般会把用户的请求分发到不同的服务器上但是如果用户请求的请求是存放在该请求的服务器A上那么该用户的sessionID就存储在该服务器上JVM的一个ConcurrentHashmap中以sessionID为key。但是如果此时用户请求的一个服务模块可能需要调用到服务器B当用户发起请求的时候此时的服务器B上并没有存储该用户的sessionID所以就会再次让用户进行一个登陆操作。还有可能会导致用户本来就想完成一个下单操作但是却还登陆了好几次的情况。所以session共享方案在分布式环境和微服务系统下显得尤其重要。
解决方案一基于Nginx的ip_hash 负载均衡
其实就是对请求过来的ip地址对你的多少台可用的服务器进行取模然后就会把你的请求通过Nginx的反向代理给分发到对应的服务器上。这里会把可用的服务器放到一个数组中如果取模得到的结果是几就把请求分到服务器数组中的下标为几 的服务器上
具体实现
需要你在Nginx.conf文件中进行对应的修改根据自己的可用服务器
upstream backend{ip_hash;server 192.168.128.1:8080 ;server 192.168.128.2:8080 ;server 192.168.128.3:8080 down;server 192.168.128.4:8080 down;}
server {listen 8081;server_name test.csdn.net;root /home/system/test.csdn.net/test;location ^~ /Upload/upload {proxy_pass http://backend;}}这种实现的优缺点 解决方案二基于Tomcat的session复制
这个解决方案其实就是当用户请求的时候把产生的sessionID给复制到系统所有的服务器中这样就能保证当用户请求的时候从服务器A可能调用到服务器B上的模块的时候也能保证服务B也有该用户的sessionID这样就不会再次让用户进行再次登录操作了。也就解决问题了。
具体代码中如何实现session复制呢 使用session复制的优缺点 解决方案三使用Redis做缓存session的统一缓存
这种方案呢其实就是把每次用户的请求的时候生成的sessionID给放到Redis的服务器上。然后在基于Redis的特性进行设置一个失效时间的机制这样就能保证用户在我们设置的Redis中的session失效时间内都不需要进行再次登录。
如何进行代码的实现 使用Redis实现session共享的优缺点 解决方案四其实还可以把session放到cookie中去因为每次用户请求的时候都会把自己的cookie放到请求中所以这样就能保证每次用户请求的时候都能保证用户在分布式环境下也不会在进行二次登陆。