iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么解决分布式session问题
  • 705
分享到

怎么解决分布式session问题

2024-04-02 19:04:59 705人浏览 安东尼
摘要

本篇内容介绍了“怎么解决分布式session问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sessio

本篇内容介绍了“怎么解决分布式session问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

session说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过。session 这个词,其实是一个抽象的概念,它不像 Cookie  那样有着明确的定义。当大多数程序员谈论 session 的时候,可能指的是服务端存储数据的 session 对象,例如,用户登录成功之后把用户信息存储在  session 中,类似于这样的程序。

Session["UserName"] = new User();  public class User{     public int UserId {get ;set ;}     public string UserName {get ;set;}  }

而在计算机中,尤其是网络应用中,session 被定义为“会话”,可以把它看做客户端和服务端的一条通道连接,同一个用户的请求使用同一个 session  会话。在大多数应用中,主要用于用户的识别,通俗来讲,服务端可以通过 session 来记录每一个用户的状态信息。那我们就以最常用的服务端 session  对象来啰嗦几句

单机 session

session  是存储在服务端的,这是一个很重要的概念。这意味着它需要占用服务器的内存,并且它需要一种释放的机制来保证服务器内存不会被撑爆(例如 LRU)。

在项目初期,为了快速上线,服务器的部署很多情况下只有一台服务器,记录用户的登录状态普遍使用 session  机制。请不要说这样做不合理,至少在项目初期这种做法是最简单而且最快速的方案。随着项目的不断迭代升级,用户量的不断增加,你会发现单机系统成为了项目的最大性能瓶颈,这个时候多数架构师会选择水平扩展方案。

其实说到底,系统性能的提升都围绕着一个“分”字,无论是数据库的分库分表,还是现在兴起的微服务,始终在围绕着一个领域进行切分

当单机的 session 机制进行水平扩展就面临着必须要要解决的问题:session 的亲和性(粘性)要怎么样去解决?

分布式 session

一个单机系统扩展为一个分布式系统,就会面临着分布式 CAP 理论中 AP 和 CP 的选择

谈到分布式 session 的一致性问题,其实主要是要解决用户 session 的亲和性,同一个用户的请求怎么样才能保证到达正确存储 session  信息的服务器呢?

session 复制

最初的方案是采用 session 复制方案,整体的流程非常简单:假设现在有三台服务器,当一个 session 在其中一台服务器上被创建,则同时把这个  session 复制到其他两台服务器上。这样当用户的请求无论到达哪台服务器,都会有相应的 session 数据。

这种方案的优势在于服务器可以任意水平扩展,每个服务器都保留着所有的 session 信息,当加入一台服务器只需要把所有的 session  信息复制过去即可。但是劣势更加明显

  • 每个服务器上都保存着全部的 session 信息,服务器占用的资源大大增加。

  • session 同步需要占用网络带宽,最重要的是如果采用的异步复制方式,数据会有短暂性的不一致,可能会导致用户访问失败。

session 复制的方案现在已经很少有人使用了

负载均衡方案

当一台服务器扩展为多台服务器,目前最常用的方案是在流量的入口添加负载均衡器,大体的部署图是这样的

怎么解决分布式session问题

image

如果负载均衡器能够利用某种手段来实现 session 的粘性就能实现分布式 session。目前主流的 Nginx 可以根据“hash_ip”算法将同一个  IP 的请求固定到某台服务器,这样来自于同一个 ip 的 session 请求总是请求到同样的服务器。

这种方式比 session 同步方式要好很多,每台服务器只存储对应的 session  数据,这大大节省了内存资源,而且服务器之间没有数据同步过程。当有新服务器加入的时候,只需要修改负载均衡器的配置即可,这样很方便就支持了服务器水平扩展。但是,同时也面临着一些不足

服务器重启意味着对应的 session 信息丢失,这在一些重要的业务场景中是不允许的

服务器的水平扩展需要修改负载均衡器的配置,修改之后可能会导致之前的 session 重新分布,这样会导致一部分用户路由不到正确的 session

session 剥离

现在应用更广泛的分布式 session 技术是把 session  数据彻底从业务服务器中剥离,单独存储在其他外部设备中,而这些外部设备可以采用主备或者主从,甚至集群的模式来达到高可用。比如现在最常用的方案是把 session  数据存储在 Redis 中,虽然从 redis 读写 session 数据需要花费一定的网络耗时,但是对于一般的应用来说在可以接受范围之内。

这种方案好处是整体架构更加清晰,也更加灵活,应用的服务器整体扩展能力再也不用考虑 session 的影响,而 session  的问题被转移到外部设备,通常可以利用内存性 NoSQL 来解决性能问题,而这些外部设备一般都会有对应的分布式集群方案,例如  redis,可以利用主从或者哨兵模式甚至集群来提供更大规模的数据支撑能力。

怎么解决分布式session问题

Actor 模型

Actor 模型解决这种用户粘性问题会更加优雅,它天生就自带了对象识别功能,简单来说,同一个 key 的请求,总能到达正确的 actor  实例,这不是我们想要的结果吗?而且 actor 模型下不用加就能处理并发问题,为什么没人用呢?而且采用 acotr  模型就可以利用进程内缓存的形式,比请求局域网 redis 的网络延迟要低很多。

“怎么解决分布式session问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么解决分布式session问题

本文链接: https://www.lsjlt.com/news/84709.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么解决分布式session问题
    本篇内容介绍了“怎么解决分布式session问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sessio...
    99+
    2024-04-02
  • Java分布式系统中session一致性问题怎么解决
    小编给大家分享一下Java分布式系统中session一致性问题怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1....
    99+
    2023-06-14
  • 在SpringBoot中怎么使用Spring Session解决分布式会话共享问题
    本篇内容介绍了“在SpringBoot中怎么使用Spring Session解决分布式会话共享问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2023-06-16
  • dubbo分布式事务问题怎么解决
    Dubbo是一个分布式服务框架,本身并不提供分布式事务的解决方案。但是,可以通过一些其他的方式来解决Dubbo分布式事务问题,以下是...
    99+
    2023-10-27
    dubbo
  • redis分布式锁释放问题怎么解决
    在Redis中实现分布式锁时,可以使用以下两种方式解决锁释放的问题: 设置锁的过期时间:在获取锁时,设置一个过期时间,超过该时间...
    99+
    2023-10-27
    redis
  • Hibernate session问题怎么解决
    这篇文章主要介绍“Hibernate session问题怎么解决”,在日常操作中,相信很多人在Hibernate session问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate s...
    99+
    2023-06-17
  • 详解Java分布式系统中session一致性问题
    业务场景 在单机系统中,用户登陆之后,服务端会保存用户的会话信息,只要用户不退出重新登陆,在一段时间内用户可以一直访问该网站,无需重复登陆。用户的信息存在服务端的 session 中...
    99+
    2024-04-02
  • 怎么解决python-redis-lock分布式锁的问题
    本篇内容介绍了“怎么解决python-redis-lock分布式锁的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题背景在使用cele...
    99+
    2023-06-25
  • Java Spring Boot分布式事务问题怎么解决
    这篇文章主要讲解了“Java Spring Boot分布式事务问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Spring Boo...
    99+
    2023-07-02
  • 怎么解决redis中分布式session不一致性
    这篇文章主要讲解了“怎么解决redis中分布式session不一致性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决redis中分布式session不...
    99+
    2024-04-02
  • 使用Spring Session管理分布式会话时遇到的反序列化问题怎么解决
    这篇文章主要介绍“使用Spring Session管理分布式会话时遇到的反序列化问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“使用Spring Sess...
    99+
    2024-04-02
  • 如何解决redis分布式锁的问题
    这篇文章主要为大家展示了“如何解决redis分布式锁的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决redis分布式锁的问题”这篇文章吧。分布式锁在...
    99+
    2024-04-02
  • 解决python-redis-lock分布式锁的问题
    python-redis-lock 官方文档 不错的博文可参考 问题背景 在使用celery执行我们的异步任务时,为了提高效率,celery可以开启多个进程来启动对应的worke...
    99+
    2024-04-02
  • redis实现分布式session的解决方案
    目录一、首先Session二、分布式Session补充:一、首先Session Session 是客户端与服务器通讯会话技术, 比如浏览器登陆、记录整个浏览会话信息。session存...
    99+
    2024-04-02
  • Nginx+resin session问题该怎么解决
    Nginx+resin session问题该怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。测试环境:server1   服务器上安装...
    99+
    2023-06-16
  • redis怎么实现分布式session
    Redis可以通过以下几步来实现分布式session:1. 创建一个Redis服务器集群:可以使用Redis Sentinel或Re...
    99+
    2023-09-20
    redis
  • Spring Boot/Spring Session/Redis的分布式Session共享如何解决
    本篇文章为大家展示了Spring Boot/Spring Session/Redis的分布式Session共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。分布式Web网站一般都会碰到集群s...
    99+
    2023-05-31
    springboot spring session redis
  • 分布式任务调度xxl-job问题解决
    目录前言xxl-job简介功能如下快速入门2.1 初始化“调度数据库”2.2 编译源码2.3 配置部署“调度中心”2.4 配置部署&l...
    99+
    2024-04-02
  • Seata分布式事务出现ABA问题解决
    目录前言从源码中定位原因如何处理小结前言 兄弟们,最近处理了一个seata的issue,关于seata分布式事务长期回滚失败后,突然回滚成功了: 这个问题的出现需要以下两个契机: ...
    99+
    2022-11-13
    Seata分布式事务ABA Seata 分布式
  • Spring Boot集成Seata怎样解决分布式事务问题
    Spring Boot集成Seata怎样解决分布式事务问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。seata 简介Seata 是 阿里巴巴2019年开源的分布式事务解...
    99+
    2023-06-05
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作