古道长亭

Contact me with ixiaoqiang0011@gmail.com


  • 首页

  • 归档

  • 分类

  • 关于

  • Book

  • 搜索

Session共享问题

时间: 2022-07-06   |   分类: 集群场景化方案   | 字数: 690 字 | 阅读约: 2分钟 | 阅读次数:

Session共享问题

演示代码

Session共享及Session保持或者叫做Session⼀致性

  • Session问题原因分析

    出现这个问题的原因,从根本上来说是因为Http协议是⽆状态的协议。客户端和服务端在某次会话中产⽣的数据不会被保留下来,所以第⼆次请求服务端⽆法认识到你曾经来过, Http为什么要设计为⽆状态协议?早期都是静态⻚⾯⽆所谓有⽆状态,后来有动态的内容更丰富,就需要有状态,出现了两种⽤于保持Http状态的技术,那就是Cookie和Session。⽽出现上述不停让登录的问题,分析如下图:

    场景:nginx默认轮询策略

  • 解决Session⼀致性的⽅案

    • Nginx的 IP_Hash 策略(可以使⽤)

      服务器重启Session丢失

      存在单点负载⾼的⻛险

      单点故障问题

    • Session复制(不推荐)

      多个tomcat之间通过修改配置⽂件,达到Session之间的复制

      性能低 内存消耗 不能存储太多数据,否则数据越多越影响性能

      延迟性

    • Session共享,Session集中存储(推荐)

      Session的本质就是缓存,那Session数据为什么不交给专业的缓存中间件呢?⽐如Redis

      优点:

      1. 能适应各种负载均衡策略
      2. 服务器重启或者宕机不会造成Session丢失
      3. 扩展能⼒强
      4. 适合⼤集群数量使⽤

      缺点:

      1. 对应用有入侵,引入redis交互代码
  • Spring Session使得基于Redis的Session共享应⽤起来⾮常之简单

    1. 引入jar

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.session</groupId>
          <artifactId>spring-session-data-redis</artifactId>
      </dependency>
      
    2. 配置redis

      spring.redis.database=0
      spring.redis.host=127.0.0.1
      spring.redis.port=6379
      
    3. 添加注解

      @EnableRedisHttpSession
      
    4. 原理

      通过过滤器将session存储到了redis

    示例代码:spring-session-demo

    Tips: 如遇jsp 跳转404问题,增加如下编译配置

    <build>
            <resources>
                <resource>
                    <directory>src/main/webapp</directory>
                    <targetPath>META-INF/resources</targetPath>
                    <includes>
                        <include>**/**</include>
                    </includes>
                </resource>
            </resources>
    </build>
    
#集群场景化方案# #Session共享#
QQ扫一扫交流

标题:Session共享问题

作者:古道长亭

声明: 欢迎加群交流!

如有帮助,欢迎多多交流 ^_^

微信打赏

支付宝打赏

Http
分布式调度问题
  • 文章目录
  • 站点概览
古道长亭

古道长亭

Always remember that your present situation is not your final destination. The best is yet to come.

226 日志
57 分类
104 标签
GitHub Gitee
友情链接
  • 古道长亭的BOOK
  • JAVA学习
标签云
  • Mysql
  • 搜索引擎
  • Mybatis
  • 容器
  • 架构
  • 消息队列
  • Flink
  • Sharding sphere
  • 流处理
  • 缓存
© 2019 - 2024 京ICP备19012088号-1
0%