当前位置: 首页 > news >正文

【转】多台服务器共享session问题

多台服务器共享 session 问题

现在的大型网站中,如何实现多台服务器中的 session 数据共享呢?

当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者 ip)访问时被分配到不同的服务器上,假设在 A 服务器登录,如果在 B 服务器拿不到用户的登录信息 session。这时访问到 B 服务器时就出现未登录情况。

所以如何对于这种情况做到共享 session 至关重要。

以下给出一些解决方案:(来源网络以及自己的一些见解)

1、通过数据库 mysql 共享 session

  • a、采用一台专门的 mysql 服务器来存储所有的 session 信息。
    用户访问随机的 web 服务器时,会去这个专门的数据库服务器 check 一下 session 的情况,以达到 session 同步的目的。

    • 缺点
      依懒性太强,mysql 服务器无法工作,影响整个系统;
  • b、将存放 session 的数据表与业务的数据表放在同一个库。
    如果 mysql 做了主从,需要每一个库都需要存在这个表,并且需要数据实时同步。

    • 缺点
      用数据库来同步 session,会加大数据库的负担。
      数据库本来就是容易产生瓶颈的地方,如果把 session 还放到数据库里面,无疑是雪上加霜。
      上面的二种方法,第一点方法较好,把放 session 的表独立开来,减轻了真正数据库的负担 。
      但是 session 一般的查询频率较高,放在数据库中查询性能也不是很好,不推荐使用这种方式。

2、通过 cookie 共享 session

  • 把用户访问页面产生的 session 放到 cookie 里面,就是以 cookie 为中转站。

    当访问服务器 A 时,登录成功之后将产生的 session 信息存放在 cookie 中;

    当访问请求分配到服务器 B 时,服务器 B 先判断服务器有没有这个 session,

    如果没有,在去看看客户端的 cookie 里面有没有这个 session,

    如果 cookie 里面有,就把 cookie 里面的 session 同步到 web 服务器 B,这样就可以实现 session 的同步了。

    • 缺点
      cookie的安全性不高,容易伪造、客户端禁止使用cookie等都可能造成无法共享session。

3、通过服务器之间的数据同步 session

  • 使用一台作为用户的登录服务器,当用户登录成功之后,会将 session 写到当前服务器上,我们通过脚本或者守护进程将 session 同步到其他服务器上,这时当用户跳转到其他服务器,session 一致,也就不用再次登录。

    • 缺点
      速度慢,同步session有延迟性,可能导致跳转服务器之后,session未同步。
      而且单向同步时,登录服务器宕机,整个系统都不能正常运行。

4、通过 NFS 共享 Session

  • 选择一台公共的 NFS 服务器(Network File Server)做共享服务器,所有的 Web 服务器登陆的时候把 session 数据写到这台服务器上,那么所有的 session 数据其实都是保存在这台 NFS 服务器上的,不论用户访问那太 Web 服务器,都要来这台服务器获取 session 数据,那么就能够实现共享 session 数据了。

    • 缺点
      依赖性太强,如果NFS服务器down掉了,那么大家都无法工作了,
      当然,可以考虑多台NFS服务器同步的形式。

5、通过 memcache 同步 session

  • memcache 可以做分布式,如果没有这功能,他也不能用来做 session 同步。他可以把 web 服务器中的内存组合起来,成为一个"内存池",不管是哪个服务器产生的 session 都可以放到这个"内存池"中,其他的都可以使用。

    • 优点
      以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。
    • 缺点
      memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

6、通过 Redis 共享 session

  • Redis 与 memcache 一样,都是将数据放在内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
  • 根据实际开发应用,一般选择使用memcache或redis方式来共享session.

相关文章:

【转】多台服务器共享session问题

多台服务器共享 session 问题 现在的大型网站中,如何实现多台服务器中的 session 数据共享呢? 当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者 ip)访问时被分配到不同的服务器上…...

页面置换算法的模拟实现及命中率对比

页面置换算法是用于管理计算机内存中页面(或页面框)的一种策略。常见的页面置换算法包括FIFO(先进先出)、LRU(最近最少使用)、LFU(最少使用)等。以下是一个简单的页面置换算法模拟实…...

说一说ajax的请求过程?

AJAX(Asynchronous JavaScript and XML)是一种通过在后台与服务器进行异步通信的技术,用于实现页面的局部更新和动态加载数据。下面是 AJAX 请求的一般过程: 1:创建 XMLHttpRequest 对象:在 JavaScript 中…...

leetcode 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释&…...

ubuntu 安装 gnome 安装 xrdp

先安装xrdp 更新 apt-get sudo apt-get update && apt-get upgrade安装图形包 apt-get install xubuntu-desktop安装 xrdp apt-get install xrdp安装 xfce4 apt-get install xfce4配置 xfce4 Add xfce to the xfce desktop window manager autorun by fixing the …...

微信小程序——后台交互

目录 后台准备 pom.xml 配置数据源 整合mtbatis 前后端交互 method1 method2 后台准备 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org…...

3D模型如何添加表面贴图?

1、模型表面贴图介绍 模型表面贴图&#xff08;Texture Mapping&#xff09;是一种将纹理映射到三维模型表面的技术&#xff0c;用于增加模型的细节和真实感。它通过在模型的每个表面点上应用纹理坐标&#xff0c;并将纹理像素与模型的对应点进行匹配&#xff0c;使得模型表面…...

C语言之函数详解

目录 函数的定义 函数的调用 变量的存储类型 auto自动变量 extern外部变量 static静态变量 register寄存器变量 函数的定义 在C语言中&#xff0c;函数是一段可重复使用的代码块&#xff0c;用于执行特定的任务。函数的定义包括函数的声明和函数体两个部分。 函数的声…...

华纳云:mysql创建触发器报错的原因及解决方法是什么

在 MySQL 中创建触发器时可能会出现错误&#xff0c;这些错误通常是由于多种原因引起的&#xff0c;包括语法错误、权限问题、表结构问题等。以下是一些常见的创建触发器报错的原因和相应的解决方法&#xff1a; 1. 语法错误&#xff1a; 原因&#xff1a; 创建触发器的SQL语句…...

C++笔记之初始化二维矩阵的方法

C笔记之初始化二维矩阵的方法 —— 2023年5月20日 上海 code review! 文章目录 C笔记之初始化二维矩阵的方法一.常见方法1. 使用数组2. 使用向量3. 使用数组的动态分配4. 使用嵌套的 std::vector 并使用resize方法5. 初始化固定大小的 std::array 二.C中使用vector初始化二维矩…...

ArrayList与List的层级关系及ArrayList解析

List与ArrayList的关系 List List是一个接口&#xff0c;不能直接实例化。如果要使用必须去实例化List的实现类——ArrayList和LinkedList站在数据结构的角度看&#xff0c;List就是一个线性表。常见的线性表&#xff1a;顺序表、链表、栈、队列等 线性表 线性表是n个具有相…...

智慧公厕设备选型攻略,打造智能化便利生活体验

智慧公厕设备的选型对于打造智能化便利生活体验起着至关重要的作用。在不断提升城市品质的背景下&#xff0c;智慧公厕已成为城市建设中的一项重要内容。在选购智慧公厕设备时&#xff0c;我们需要考虑到不同版本的功能要求&#xff0c;确保公厕设备的质量和性能。本文以智慧公…...

TCP 协议的可靠传输机制是怎样实现的?

TCP 协议是一种面向连接的、可靠的、基于字节流的传输层协议。 1 它通过以下几种方法来保证数据传输的可靠性&#xff1a; 检验和&#xff1a;TCP 在发送和接收数据时&#xff0c;都会计算一个检验和&#xff0c;用来检测数据是否在传输过程中发生了错误或损坏。如果检验和不匹…...

Antv G6入门之旅--combo图

目录 什么是AntV G6 G6 的特性 G6 文档 安装 1 在项目中使用 NPM 包引入 2 在 HTML 中使用 CDN 引入 使用 Step 1 创建容器 Step 2 数据准备 Step 3 创建关系图 Step 4 配置数据源&#xff0c;渲染 React 中使用 G6 Combo图 什么是AntV G6 G6 是一个图可视化引擎…...

聊聊分布式架构09——分布式中的一致性协议

目录 01从集中式到分布式 系统特点 集中式特点 分布式特点 事务处理差异 02一致性协议与Paxos算法 2PC&#xff08;Two-Phase Commit&#xff09; 阶段一&#xff1a;提交事务请求 阶段二&#xff1a;执行事务提交 优缺点 3PC&#xff08;Three-Phase Commit&#x…...

探索流视频的发送

1.网络连接 2.主设备将某处视频开始的视频数据发送给从设备。 之前有读取本地视频并播放的demo,所以可以先测试网络连接的问题。 先用模拟器进行模拟吧。方便进行测试。 是的&#xff0c;可以使用Android设备使用上述库或框架来构建实时Web应用程序。虽然这些库和框架在Java服…...

[ACTF2020 新生赛]Include 1

题目环境&#xff1a;超链接&#xff0c;点进去看看你能找到flag吗&#xff1f;除了这些网页什么都没有&#xff0c;但是不当紧&#xff0c;因为我们有一双善于发现的眼睛&#x1f440;F12瞅瞅无&#xff0c;并无其他等等URL看了吗&#xff1f;发现存在一个参数file&#xff0c…...

教师必备宝藏,强烈推荐

亲爱的教师朋友们&#xff0c;你们是不是在为学期末成绩查询而头疼呢&#xff1f;一学期下来&#xff0c;成堆的试卷和成绩单&#xff0c;还有学生家长的各种咨询&#xff0c;让人应接不暇。现在&#xff0c;我给你们分享一个教师必备的宝藏&#xff0c;让你们的成绩查询工作变…...

「北大社送书」学习MATLAB—从算法到实战

MATLAB科学计算从入门到精通 一句话推荐书籍特色内容简介书籍概览 从代码到函数&#xff0c;从算法到实战&#xff0c;从问题到应用&#xff0c;由浅入深掌握科学计算方法&#xff0c;高效解决实际问题。 一句话推荐 科学计算基础入门&#xff0c;高效解决实际问题。 书籍特色…...

clion安装C++远程linux开发并调试 从装centos虚拟机到完美开发调试

下载镜像 阿里云镜像 从vmware上安装虚拟机并提权开放ssh 更新编译环境 一般 gcc gdb 版本都是比较低的&#xff0c;适配不了clion的最低要求。 升级gdb参考博客 升级gcc参考博客 安装CMAKE 官方的源使用wget即可下载 未找到openssl的解决办法 注意版本&#xff0c;又踩个…...

32位MCU轻量级OTA方案设计与实现

1. 项目概述&#xff1a;专为32位MCU设计的轻量级OTA方案在嵌入式设备开发中&#xff0c;固件升级一直是个令人头疼的问题。传统方式需要拆机连接烧录器&#xff0c;对于部署在偏远或密闭环境中的设备简直是场噩梦。上周分享的UART OTA方案获得不少开发者关注&#xff0c;今天带…...

一维dp知识点

1.一维DP的核心&#xff1a;用一维数组 dp[i] 记录状态&#xff0c;通过清晰的递推关系&#xff08;状态转移&#xff09;求解。2. 基础模型&#xff1a;线性递推核心是找到 dp[i] 和 dp[i-1]、dp[i-2] 的关系。爬楼梯&#xff1a;dp[i] dp[i-1] dp[i-2] 最小花费爬楼梯&…...

PhotoScan软件在无人机航测数据处理中的高效应用流程

1. 无人机航测数据处理入门指南 第一次接触无人机航测数据处理的同学可能会觉得这是个高大上的技术活&#xff0c;其实只要掌握了PhotoScan这个神器&#xff0c;处理起来比想象中简单得多。我刚开始接触时也走了不少弯路&#xff0c;现在把最实用的经验分享给大家。 PhotoScan是…...

一个关键词的SEO优化过程中需要注意什么

一个关键词的SEO优化过程中需要注意什么 在数字营销的世界里&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是一个核心的组成部分。其中&#xff0c;关键词优化是SEO策略的关键环节。对于一个关键词的SEO优化过程中&#xff0c;有许多细节需要注意&#xff0c;以确保最…...

深入探索Java JPA中的CriteriaQuery

在Java持久化API(JPA)中,CriteriaQuery 提供了强大的查询功能,允许我们以面向对象的方式构建动态查询。今天我们将通过一个实际的例子,深入探讨如何使用CriteriaQuery来获取特定书籍的最新更新ID。 什么是CriteriaQuery? CriteriaQuery是JPA的一部分,它提供了一种类型…...

日志配置陷阱:Telegraf Windows版本兼容性问题深度解析

日志配置陷阱&#xff1a;Telegraf Windows版本兼容性问题深度解析 Windows系统管理员常面临日志采集配置升级后服务无法启动的困境。Telegraf作为InfluxData开源的指标收集代理&#xff08;Agent&#xff09;&#xff0c;其Windows版本在日志配置变更时可能引发兼容性问题。本…...

从单片机到Linux驱动的技术成长与转型

1. 从单片机到Linux驱动的技术成长之路 刚毕业那会儿&#xff0c;我和大多数电子工程专业的同学一样&#xff0c;怀揣着对技术的无限憧憬。记得大四校招时&#xff0c;我固执地只投递了几家知名大厂的嵌入式开发岗位&#xff0c;甚至在面试时直接报出了远超应届生水平的薪资期望…...

SEO_10个提升网站排名的SEO技巧与实战方法

SEO:10个提升网站排名的SEO技巧与实战方法 在当今数字化时代&#xff0c;网站排名不仅关乎网站的曝光率&#xff0c;更影响到业务的发展。因此&#xff0c;提升网站排名&#xff08;SEO&#xff09;成为了每一个网站主的首要任务。有哪些SEO技巧能够帮助提升网站的排名呢&…...

提升效率:用快马一键生成模块化openclaw控制代码库

最近在做一个机器人项目&#xff0c;需要控制openclaw机械爪完成各种抓取任务。刚开始自己从头写控制代码时&#xff0c;发现光是启动流程就要处理一堆底层细节&#xff0c;比如初始化通信、校准位置、设置默认参数等等&#xff0c;不仅重复劳动&#xff0c;还容易出错。后来尝…...

3个简单技巧让YOLO小目标检测精度提升50%:Ultralytics实战指南

3个简单技巧让YOLO小目标检测精度提升50%&#xff1a;Ultralytics实战指南 【免费下载链接】ultralytics Ultralytics YOLO &#x1f680; 项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics 你是否在为监控视频中远处行人检测不准而烦恼&#xff1f;工业质…...