分布式session的4种解决方案

2023-10-27

分布式session的4种解决方案

1、cookie和session
cookie和session都是用来跟踪用户身份信息的会话方式。
cookie存储的数据保存在本地客户端,用户获取容易,但安全性不高,存储数据小。
session存储的数据保存在服务器,用户不易获取,安全性较高,存储数据较大。
通常情况下,服务器将用户信息通过session的方式保存在服务器,然后将sessionId返回给客户端cookie,客户端进行下次请求时,就可在cookie中带上sessionId,服务器通过sessionId,就可以在服务器内存中找到对应的session对象,获取当前用户的信息。

流程可如下所示:
在这里插入图片描述
2、背景介绍
传统项目中,单服务器场景,服务器的session对象保存在本地内存,浏览器的每次请求都会打到该服务器上,所以,只要session没过期,一定能够获取到session对象。

但在多服务器场景,或微服务项目中,一个工程有多个实例。浏览器的多次请求,经过nginx反向代理后,有可能就会请求到不同的服务器上。场景如下所示:
在这里插入图片描述
3、解决方案
3.1、session复制
session同步,让集群下的服务器进行session同步,一种传统的服务器集群session管理机制,常用于服务器不多的集群环境。

集群下,进行session同步的服务器的session数据是相同的,任何一台服务器挂掉,都不会丢失用户的session数据。

但是,session同步是通过广播的方式来异步同步session,会通过网络进行数据传输。当服务器越来越多时,session同步会占用大量带宽,并且每台服务器需要存储的session数据也越来越大,占用大量服务器内存。

所以,session同步策略一般适用于集群服务器不多的场景。
3.2、客户端存储(不推荐)
直接将session数据存储到浏览器的cookie中,浏览器在发起请求时,通过cookie将session数据发送给客户端。因为cookie不安全,易获取,所以通常用来存储一些不敏感的信息。

但是,由于cookie不安全,且每次http请求,都会携带存储在cookie中的完整用户信息,会增大网络传输开销,并且cookie有存储大小限制。所以基本上不会使用这种方式。

3.3、Hash一致性
修改nginx的负载均衡配置,设置为ip-hash策略,将客户端与服务器进行绑定,让来自同一ip的请求,全都转发到同一台服务器。

此方案配置简单,但有一台服务器挂掉之后,该服务器上的session信息将全部丢失,与该服务器绑定的客户端,必须得重新登录。并且在进行水平扩展时,会重新对客户端ip进行hash操作,部分ip会被重新映射服务器。

# 配置负载均衡服务器组名称和地址
upstream web_server {
    ip_hash;
    server 192.168.12.36;
    server 192.168.12.37;
    server 192.168.12.38;
}
 
# nginx路由配置
server {
    listen       8080;
    server_name  localhost;
    location / {
        proxy_pass http://web_server;
    }
}

3.4、基于Redis的分布式session(推荐)
将集群下所有服务器的session都存储到redis集群中。

直接使用Spring封装的Spring Session,引入相关依赖,使用简单,session数据保存在redis中,无缝接入,无安全隐患;且Redis也可做主从集群架构,方便管理。唯一的缺点是,服务器需要与Redis做一次网络交互,多了点网络开销。
在这里插入图片描述

3.4.1、引入相关依赖
<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session</artifactId>
</dependency>
 
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.4.2、Java 配置

@Configuration
@EnableRedisHttpSession 
public class Config {
	@Bean
	public LettuceConnectionFactory connectionFactory() {
		return new LettuceConnectionFactory(); 
	}
}

3.4.3、Redis配置

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式session的4种解决方案 的相关文章

  • dubbo分布式服务

    架构 节点角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次调和调用时间的监控中心 Container 服务运行容器 调
  • 区块链学习笔记(六)——区块链的分类

    文章目录 一 强调 二 公有链 联盟链 私有链 1 公有链 2 联盟链 3 私有链 总结 一 强调 先做一下重复强调 区块链技术是集分布式存储 点对点传输 共识机制 加密算法 数据区块等概念于一体的新兴技术集合 二 公有链 联盟链 私有链
  • Hi3516全系统类型烧录教程

    烧录资料下载 https gitee com hihope iot docs tree master HiSpark AI Camera Developer Kit Software tools 第一步 安装好hitool usb 烧写的驱
  • 微服务框架

    微服务框架 1 SOA思想 面向服务的架构 SOA 是一个组件模型 它将应用程序的不同功能单元 称为服务 进行拆分 并通过这些服务之间定义良好的接口和协议联系起来 接口是采用中立的方式进行定义的 它应该独立于实现服务的硬件平台 操作系统和编
  • 在centos在部署分布式文件存储系统Minio

    docker部署以及详细文档自取 链接 https pan baidu com s 14NhCk1SQZEHqzMubpUD0eQ 提取码 xyxy 0 应用场景 电商网站 海量商品图片 视频网站 海量视频文件 网盘 海量文件 社交网站 海
  • java脚本引擎Groovy实战

    前言 互联网时代随着业务的飞速发展 不仅产品迭代 更新的速度越来越快 个性化需求也是越来越多 如何快速的满足各种业务的个性化需求是我们要重点思考的问题 我们开发的系统如何才能做到热部署 不重启服务就能适应各种规则变化呢 实现业务和规则的解耦
  • 非常详细的小程序搜索历史功能

    前言 我们在进行一些项目开发时 很有可能会涉及到在搜索框中搜索某一个词条 从而进行相应的检索 在这里就会出现一个优化功能 我们在搜索后的某一个词条 我希望能够显示在历史记录中 这样一个小的tip 可以给用户带来更高的使用体验 历史记录并不会
  • Redis 分布式缓存

    分布式缓存 单点 Redis 的问题及解决 数据丢失 实现Redis数据持久化 并发能力 搭建主从集群 实现读写分离 存储能力 搭建分片集群 利用插槽机制实现动态扩容 故障恢复能力 利用哨兵机制 实现健康检测和自动恢复 RDB RDB全称R
  • 快速部署Ceph分布式高可用集群

    快速部署Ceph分布式高可用集群 Ceph简介 Ceph是一个PB EB级别的分布式存储系统 可以提供文件存储 对象存储 和块存储 它可靠性高 易扩展 管理简便 其中对象存储和块存储可以和其他云平台集成 一个Ceph集群中有Monitor节
  • 2023测试工程师核心软技能「情绪管理」

    大家好呀 我是小码哥 我之前经常提到一句话 大多数时候所谓的 技术之玻璃天花板 其实只是缺乏软技能而已 所以粉丝朋友们 我们除了需要关注技术 更需要注重软技能的提高 关于软技能相关的文章 之前写过学习方法 职业规划 时间管理 项目管理 团队
  • 分布式数字身份DID简介(五)DID的应用

    在上一篇文章中 我们给出了一种零知识证明的方法 解决用户身份属性的隐私问题 下面我们再来谈谈基于DID技术 我们都能在什么场景去应用 01 无密码安全登录 这个使用场景大家应该都很熟悉了 就类似于微信扫码登录 当我们要注册或者登录一个网站时
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • AI分布式训练:DDP (数据并行)技术详解与实战

    编者按 如今传统的单机单卡模式已经无法满足超大模型进行训练的要求 如何更好地 更轻松地利用多个 GPU 资源进行模型训练成为了人工智能领域的热门话题 我们今天为大家带来的这篇文章详细介绍了一种名为 DDP Distributed Data
  • Kafka基础—3、Kafka 消费者API

    一 Kafka消费者API 1 消息消费 当我们谈论 Kafka 消费者 API 中的消息消费时 我们指的是消费者如何从 Kafka 主题中拉取消息 并对这些消息进行处理的过程 消费者是 Kafka 中的消息接收端 它从指定的主题中获取消息
  • 网站被攻击了怎么恢复?如何在被攻击后第一时间接入高防恢复正常访问?

    网站受到攻击的原因是多种多样的 包括技术漏洞 人为疏忽 社会工程学等各种因素 保护网站的安全需要综合运用技术手段 当网站遭到攻击时 以下几个步骤可以帮助恢复网站的正常运行 1 分析攻击 首先要确认网站被攻击的类型和程度 以确定所需的恢复步骤
  • 使用 Helm Chart 部署分布式 GreptimeDB

    GreptimeDB 作为云时代基础设施的时序数据库 从第一天开始就积极拥抱云原生技术 将数据库部署在 Kubernetes 上可以提供可伸缩性 自愈能力和简化的部署和管理 从而为应用程序提供了强大的弹性和可靠性 Helm 是一个用于管理
  • 网站被攻击了怎么恢复?如何在被攻击后第一时间接入高防恢复正常访问?

    网站受到攻击的原因是多种多样的 包括技术漏洞 人为疏忽 社会工程学等各种因素 保护网站的安全需要综合运用技术手段 当网站遭到攻击时 以下几个步骤可以帮助恢复网站的正常运行 1 分析攻击 首先要确认网站被攻击的类型和程度 以确定所需的恢复步骤
  • 考虑极端天气线路脆弱性的配电网分布式电源配置优化模型【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 【复现】遗传算法求解分布式电源选址定容问题并考虑环境因素研究【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 【复现】遗传算法求解分布式电源选址定容问题并考虑环境因素研究【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现

随机推荐

  • 解决 Docker Desktop for Mac 下载镜像缓慢的问题

    Docker 的版本是 19 03 5 Docker 默认的下载仓库是官方的 hub docker com 但是在国内的话速度会很慢 国内的话也有很多的镜像 网易 USTC 阿里云等 并且现在 Docker 官方针对中国区推出了镜像加速服务
  • airpodspro窃听模式_AirPodsPro怎么切换模式

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 AirPodsPro切换模式的方法如下 1 长按任意一侧的airpods pro耳机上的压力感应器 直到听到轻微的切换提示音 即可切换降噪与通透模式 2 前往控制中心 长按
  • c语言多线程访问一个变量_多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了...

    前言 多线程并发问题 基本是面试必问的 今年刚刚毕业准备找实习的同学或者经历过最近一段时间面试的朋友们 相应你们应该都有一个相同的问题被问到 那就是多线程与高并发 因为最近和腾讯 阿里包括字节和京东等一线大厂的面试负责人朋友在聊天的时候 他
  • 当前页面的video只播放一个

    nextTick function 当前页面的video只播放一个 var videos document getElementsByTagName video for var i videos length 1 i gt 0 i func
  • Vue开源框架-vue-element-admin-任务列表项目

    vue element admin是一个vue开源框架 可以很方便的进行前端开发 主页 介绍 vue element admin 搭建框架 复制项目 git clone b study https github com five3 vue
  • 《SLAM十四讲》ch7中g2o实验出现Could NOT find CSPARSE

    在做ch7中g2o部分的实验时 出现错误 Could NOT find CSPARSE missing CSPARSE INCLUDE DIR CSPARSE LIBRARY CMake Error The following variab
  • 万物互联课程笔记

    万物互联简介 Internet的四个阶段 连接 gt 网络化经济 gt 协作体验 gt 万物互联 IOE是什么 人员 流程 数据 事物 IOE会影响企业的五个核心优先任务 客户体验 创新 员工工作效率 资产利用率 供应 网络组件 设备 介质
  • 【C语言技巧】51单片机支持printf打印

    以新唐单片机 N76E003AT20 为例 首先初始化串口1 这里是modbus测试中摘取的一部分 适当删减 注意 要增加以下两个头文件才能使用 include stdio h sprintf相关函数支持的头文件 include
  • Redis主从及哨兵模式配置教程

    提示 以下是本篇文章正文内容 下面案例可供参考 本文环境 CentOS7 3 Redis 5 0 7 一 Redis主从配置 1 主从搭建服务器情况 IP 角色 redis版本 192 168 223 131 主 Redis 5 0 7 1
  • C++判断输入结束的简单方法(从键盘输入+从文件读入)

    判断输入结束的简单方式 1 从键盘输入 1 最简单的方式 while cin gt gt a 当想结束时只需 换行 输入Ctrl Z 回车 此时cin gt gt a的返回值为false 例1 初始化字符数组 include
  • MySQL validatequery_Druid配置参数详解-validationQuery

    Druid配置参数详解 validationQuery Druid是一个由阿里开源的数据库连接池 Druid的配置非常丰富 但是设置不当会对生产环境造成严重影响 网上Druid的资料虽多 但大部分都是互相复制粘贴 有很多不准确甚至完全错误的
  • response.setContentType()的作用及参数

    response setContentType MIME 的作用是使客户端浏览器 区分不同种类的数据 并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据 例如web浏览器就是通过MIME类型来判断文件是GIF图片 通过MIM
  • SpringBoot 日志正确使用方式,这样才优雅!

    一 日志重要吗 程序中的日志重要吗 在回答这个问题前 笔者先说个事例 笔者印象尤深的就是去年某个同事 收到了客户反馈的紧急bug 尽管申请到了日志文件 但因为很多关键步骤没有打印日志 导致排查进度很慢 数个小时都没能排查到问题 也无法给出解
  • 基于单片机的七彩音乐喷泉设计

    目录 一 方案流程及技术规格书设计 二 系统硬件电路设计 三 软件编写及调试 四 系统调试测试与分析 前言 随着时代的进步 人们对生活质量的要求也在不断提升 因此 51单片机七彩音乐喷泉系统应运而生 它不仅可以满足人们对舒适环境的追求 而且
  • 安装mariadb启动报错

    报错如下 从这里并看不出什么端倪 7月 07 07 08 16 localhost localdomain mariadb prepare db dir 3287 Please check all of the above before s
  • MySQL添加字段和修改字段的方法

    原文地址 http database 51cto com art 201011 234549 htm MySQL添加字段的方法并不复杂 下面将为您详细介绍MySQL添加字段和修改字段等操作的实现方法 希望对您学习MySQL添加字段方面会有所
  • HBase建表函数createTable的几点说明

    HBase建表函数提供了四个重载函数 分别是 void createTable HTableDescriptor desc void createTable HTableDescriptor desc byte startKey byte
  • ctf.show web3

    打开题目 出现提示 php文件 考虑文件包含漏洞 输入参数 url etc passwd 这个报错界面出来了 说明存在文件包含漏洞 构造url值 php input 使用php协议 使用burp抓包 使用ls命令查看php下的文件 得到文件
  • 认认真真推荐几个高质量人工智能方向的优质原创公众号

    人工智能与计算机编程和数学相关性比较大 网络上的资料比较繁杂 想系统的学习人工智能谈何容易 今天给大家推荐9个原创公众号 这些公众号定期会发些高质量原创 希望可以让你更高效的学习 AI有道 一个值得关注的 AI 技术的公众号 作者红色石头是
  • 分布式session的4种解决方案

    分布式session的4种解决方案 1 cookie和session cookie和session都是用来跟踪用户身份信息的会话方式 cookie存储的数据保存在本地客户端 用户获取容易 但安全性不高 存储数据小 session存储的数据保