当前位置: 首页 > 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;又踩个…...

为AI智能体项目选择稳定且多模型的后端API供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为AI智能体项目选择稳定且多模型的后端API供应商 在开发AI智能体或自动化工作流时&#xff0c;工程师们面临的核心挑战之一是如何为…...

【Gin】中间件练习题

路由组中间件题目描述 创建一个 /admin 路由组&#xff0c;给它单独加一个鉴权中间件&#xff0c;其他接口不受影响。规则&#xff1a;请求头带 token: admin123 才允许访问否则返回 401 无权限输出示例无 token&#xff1a;{"code":401,"msg":"无权限…...

NotebookLM化学辅助实战手册(附ACS期刊PDF解析模板+分子式自动标注插件)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;NotebookLM化学研究辅助概述 NotebookLM 是 Google 推出的基于人工智能的文档理解与知识协作工具&#xff0c;专为研究者设计&#xff0c;支持对 PDF、TXT 等格式的科学文献进行语义索引、跨文档推理与可追溯问…...

国网智能电表解决方案:从HPLC通信到远程费控的架构与实战

1. 项目概述&#xff1a;从一块电表到一套能源数据中枢如果你家里最近换了新电表&#xff0c;或者从事与园区、工厂能源管理相关的工作&#xff0c;大概率会接触到一种外观更简洁、带液晶屏、还能远程抄表的智能电表。这背后&#xff0c;就是国网电能表解决方案的落地体现。它早…...

3篇6章5节:基于 stat_slab () 函数的高血压临床数据可视化

在现代医学研究,传统 “均值 标准差”“箱线图” 等统计表达,往往会丢失数据的分布形态、双峰特征、组间重叠等关键信息,无法适配真实世界临床数据的复杂特征。而 R 语言 ggdist 包的 stat_slab() 函数,作为分布可视化体系的核心底层工具,不仅能实现样本数据的完整分布呈…...

STM32与PS2手柄的无线交互:从硬件对接到按键解析

1. 认识PS2手柄与STM32的无线交互 第一次接触PS2手柄和STM32的对接时&#xff0c;我完全被这个经典游戏手柄的通信协议吸引了。你可能不知道&#xff0c;这个2000年推出的手柄至今仍在嵌入式领域发光发热&#xff0c;主要得益于它简单的通信协议和稳定的性能。我实测过市面上常…...

京东滑块验证码JS逆向实战:从接口分析到轨迹加密

1. 京东滑块验证码逆向分析入门 第一次接触京东滑块验证码逆向时&#xff0c;我也被那一堆加密参数搞得头晕眼花。但经过多次实战后&#xff0c;我发现只要掌握几个关键点&#xff0c;就能轻松破解这个看似复杂的验证系统。滑块验证码的核心逻辑其实很简单&#xff1a;系统通过…...

Java OCR实战:精准提取与解析身份证信息

1. 为什么选择Java OCR处理身份证信息&#xff1f; 在企业级应用开发中&#xff0c;身份证信息录入是个高频需求场景。传统人工录入不仅效率低下&#xff0c;还容易出错。我去年参与过一个政务系统改造项目&#xff0c;工作人员每天要处理300张身份证照片&#xff0c;手动录入的…...

WeChatExporter终极指南:三步破解iOS微信数据备份的技术迷思

WeChatExporter终极指南&#xff1a;三步破解iOS微信数据备份的技术迷思 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而懊恼不已&…...

ESP32项目编译后,如何看懂Output里的内存占用(DRAM/IRAM/Flash详解)

ESP32项目编译后内存占用分析&#xff1a;从DRAM到Flash的深度解读 当你在VSCode中按下编译按钮&#xff0c;看到终端输出那一连串内存占用数据时&#xff0c;是否曾感到困惑&#xff1f;这些数字背后隐藏着ESP32内存架构的秘密&#xff0c;也直接关系到你的项目性能和稳定性。…...