点击关注公众号,实用技术文章及时了解

先了解一下为什么会出现这种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失效时间内,都不需要进行再次登录。推荐:250期面试题

如何进行代码的实现:

使用Redis实现session共享的优缺点:

解决方案四:结合cookie

其实还可以把session放到cookie中去,因为每次用户请求的时候,都会把自己的cookie放到请求中,所以这样就能保证每次用户请求的时候都能保证用户在分布式环境下,也不会在进行二次登陆。

感谢阅读,希望对你有所帮助 :) 

参考:网易云课堂

来源:blog.csdn.net/qq_36520235/

article/details/87830929

●【练手项目】基于SpringBoot的ERP系统,自带进销存+财务+生产功能●分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!●能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

面试官:分布式环境下,如何实现session共享相关推荐

  1. Spring-Redis实现分布式环境下主子域名Session共享

    背景: 之前一直采用通过注解的方式配置Spring环境下的子域名共享,其基本思路是通过将session放入redis中,然后将使用HTTPSESSION更改为使用SpringSession的方式,使得 ...

  2. mysql集群session_集群/分布式环境下5种session处理策略

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  3. 【Linux运维-集群技术进阶】集群/分布式环境下5种session处理策略

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  4. 集群/分布式环境下5种session处理策略

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  5. C#session共享+redis_Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享...

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! Docker快速手上视频教程(无废话版)[免费] 作者:夜月归途 转载自: https://www.cnblo ...

  6. 【分布式】分布式环境下如何保证数据库和缓存的双写一致性?看完我明白了!!

    写在前面 当今时代,互联网高速发展,已然从IT时代进入到DT时代.我们系统的架构也由原来的单体应用,转变为分布式.微服务的架构模式.从数据上来看,数据量越来越大,数据的查询性能越来越低.此时,就需要我 ...

  7. 分布式环境下,互斥性与幂等性问题,分析与解决思路

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问.海量数据处理的场景也越来越多.如何用较低成本实 ...

  8. JAVA中useDrlimiter方法_今天来讲讲分布式环境下,怎么达到对象共享,以及实现原子性(atomic),以Redis中的Redisson为例(实现分布式锁、分布式限流等)...

    相信各位对redis肯定是不陌生的,一个高吞吐量的内存型结构存储数据库.可用用于很多业务场景,能够有效的解决很多复杂的并发问题,分布式问题. 下面粘一下中文官网介绍: 关于解决对象共享问题,很多方式, ...

  9. 分布式环境下定时任务重复执行问题解决方案

    现在为了提高服务的响应时间,避免单点故障,一般项目都会做集群部署,最少两个节点.集群部署的时候就会暴露出一些单节点下不会遇到的问题,比如session问题.缓存不一致问题等.还有一种情况是,定时任务重 ...

最新文章

  1. 立足高校矢志创新,鲲鹏计算生态长沙在行动
  2. linux 进程 内存布局 初探
  3. DHCP欺骗(DHCP Sproofing)
  4. Spring boot错误处理机制
  5. 【USACO15DEC】最大流Max Flow
  6. matlab接口编程配置,MATLAB与外部程序接口编程
  7. 使用 Chrome 调试 Vue3 的 TypeScript 源码
  8. 一个人的简历(林肯)
  9. android 哈哈镜,Carnival Mirror App(哈哈镜模拟器)
  10. 会声会影 html5,一文了解会声会影哪个版本比较好用
  11. CFAR原理详解及其matlab代码实现
  12. PL/SQL语言简单案例
  13. 网站资源文件下载不了怎么办?一个方法教你如何轻松扒下
  14. Codeforces - Pokémon Army
  15. 根据音乐播放进度实时更新音乐播放器播放进度条
  16. elasticsearch操作
  17. linux怎么查看当前系统版本号,如何查看当前系统版本的版本号
  18. 2022-2028年中国房地产中介服务行业市场深度分析及投资前景分析报告
  19. 东方通应用服务器TongWeb的安装,使用,排错(不定时更新)
  20. 邮件(mail)服务器

热门文章

  1. 三星旗舰Galaxy Note 10系列发布 5G版本国行尝鲜价8299元
  2. 比新iPhone好看多了!华为Mate 30系列机型外观曝光
  3. 苹果3月新品发布会one more thing曝光:或许就是iPhone SE 2
  4. 英特尔扶正临时CEO 打破公司50年CEO选拔传统
  5. 炮轰小米后柔宇科技再发长文声明:无意碰瓷炒作
  6. 拳王虚拟项目公社:说一个合法正规兼职创业,副业虚拟资源项目
  7. Spring容器创建流程(8)初始化bean
  8. 晨哥真有料丨自信一点!恋爱做自己,不要自卑,不要迎合!
  9. centos7网卡编辑_CentOS7网卡命名中碰到的一个坑
  10. 初识openwrt(上)