分布式session的落地方案

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 分布式session的落地方案

什么是session?


在网络中,我们称之为会话控制,用于存储特定用户所需要的属性和配置信息。


为什么要使用session?


http属于无状态的协议,无法保存用户的一些相应状态。即在操作的前后,无法判断是否是同一个用户。部分业务需要有关联性,因此需要使用session技术。


什么是集群?什么是分布式?


集群:一堆机子集中在一起进行管理协助运行。


分布式:中心化带来的主要问题是可靠性,若中心节点宕机则整个系统不可用,分布式除了解决部分中心化问题,也倾向于分散负载,但分布式会带来很多的其他问题,最主要的就是一致性。


常用的分布式session解决方案:


1.基于nginx的ip_hash策略来进行负载均衡,那么相同ip的机子,每一次请求的时候,都会被请求到同一机子上。


优点:


配置简单,不用修改后端的程序代码。


缺点:


容易出现单点故障的情况,导致该服务器上边的session全部丢失。


当我们进行水平扩展的时候,增加服务器会发现session失效。因为hash的定位会丢失。

也容易出现单点负载过高的情况。


2.通过对于tomcat里面的cluster配置进行配置,搭建tomcat的集群配置。以及相应的项目开启distributable配置标签。


让tomcat集群进行自动的session一致。


优点:


不用修改后端代码,可以适合用于所有的负载均衡策略。


即使当某一单点出现了故障也能解决。


缺点:


session进行同步的时候,占用内存和内网的带宽。


而且session的复制会有一定的延迟。当用户量增加的时候,会有较为严重的影响。


3.通过使用Session的集中统一管理


借助一些mysql,redis,mongodb这些数据库来进行处理,将相应的session存入这些地方。


通常会采用这一方案来进行实施。


接下来这个案例主要是通过实操来演示如何进行分布式session处理的:

首先是依赖配置:


这里我使用的springboot版本是1.5.6.RELEASE


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
复制代码


然后是application.properties配置部分信息:


spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
# 连接池最大连接数
spring.redis.jedis.pool.max-active=100
spring.redis.jedis.pool.max-wait=-1ms
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
#session的存储方式
spring.session.store-type=redis
复制代码


最后加入一个配置类:


package com.sise.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
import org.springframework.session.web.http.HttpSessionStrategy;
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
        return new HeaderHttpSessionStrategy();
    }
}
复制代码


一段请求接口,用于测试使用:


@RequestMapping(value = "/saveSession")
public void saveSession(HttpServletRequest request){
     request.getSession().setAttribute("user"+System.currentTimeMillis(),new Date());
    System.out.println("session存储成功!");
}
复制代码


通过测试请求该接口之后,再去查看redis里面的情况:


网络异常,图片无法展示
|


此时session已经被存储在了redis里面了。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
25天前
|
NoSQL 算法 关系型数据库
分布式 ID 详解 ( 5大分布式 ID 生成方案 )
本文详解分布式全局唯一ID及其5种实现方案,关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式 ID 详解 ( 5大分布式 ID 生成方案 )
|
1月前
|
存储 缓存 NoSQL
分布式架构下 Session 共享的方案
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求、系统架构和性能要求等因素,选择合适的 Session 共享方案。同时,还需要不断地进行优化和调整,以确保系统的稳定性和可靠性。
|
1月前
|
SQL NoSQL 安全
分布式环境的分布式锁 - Redlock方案
【10月更文挑战第2天】Redlock方案是一种分布式锁实现,通过在多个独立的Redis实例上加锁来提高容错性和可靠性。客户端需从大多数节点成功加锁且总耗时小于锁的过期时间,才能视为加锁成功。然而,该方案受到分布式专家Martin的质疑,指出其在特定异常情况下(如网络延迟、进程暂停、时钟偏移)可能导致锁失效,影响系统的正确性。Martin建议采用fencing token方案,以确保分布式锁的正确性和安全性。
46 0
|
2月前
|
存储 NoSQL Java
使用springSession完成分布式session
本文介绍了如何使用 `spring-session` 实现分布式 Session 管理,并提供了将 Session 存储在 Redis 中的具体配置示例。通过配置相关依赖及 Spring 的配置文件,可以轻松实现 Session 的分布式存储。示例中详细展示了所需的 Maven 依赖、Spring 配置及过滤器配置,并给出了启动项目后在 Redis 中查看 Session 数据的方法。
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
存储 运维 安全
多云网络部署存在挑战,F5分布式云应用简化方案解读
多云网络部署存在挑战,F5分布式云应用简化方案解读
52 0
|
4月前
|
消息中间件 编译器 C++
分布式篇问题之TCC方案中的Try阶段主要问题如何解决
分布式篇问题之TCC方案中的Try阶段主要问题如何解决
|
4月前
分布式篇问题之集群(Cluster)模式主控节点的高可用性问题如何解决
分布式篇问题之集群(Cluster)模式主控节点的高可用性问题如何解决
|
4月前
|
存储 运维 监控
在Spring Boot中集成分布式日志收集方案
在Spring Boot中集成分布式日志收集方案
|
5月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot中的分布式缓存方案

热门文章

最新文章

下一篇
无影云桌面