分布式SESSION一致性
分布式SESSION一致性
SESSION
是服务器为客户端创建的一个会话,存储用户的相关信息,用以标识用户身份等。在单服务器环境下是不需要考虑会话的一致性的问题的,但是在集群环境下就会出现一些问题,假如一个用户在登录请求时负载均衡到了A
服务器,A
服务器为其分配了SESSION
,下次请求数据时被分配到了B
服务器,此时由于B
服务器不存在此用户的SESSION
,此用户会被重定向到登录页面,这种情况是不合理的业务逻辑,所以需要维护SESSION
的一致性。
解决方案
SESSION 同步
多个服务器之间互相同步SESSION
,即A
服务器生成一个SESSION
信息后同步传输到B
、C
、D
等服务器,同样B
、C
、D
服务器生成SESSION
信息后也需要同步到A
,这样每个服务器之间都包含全部的SESSION
优点
- 大部分应用服务器都提供了
SESSION
复制的功能来实现集群
缺点
SESSION
需要网络传输进行同步,其会占用带宽,并且存在一定的延迟- 一旦某台机器的
SESSION
信息有所变化,必须同步更新所有服务器SESSION
内容 - 每个服务器都会存储全部的用户信息,性能随着服务器增加急剧下降,而且容易引起广播风暴
SESSION 映射
通过将负载均衡服务器进行修改,通过对返回给用户的SESSION ID
或者用户请求的IP
地址进行标记,也就是使用第四层传输层中读取网络层的IP
或者是在第七层中读取HTTP
协议中某些属性来做HASH
,保证对于此用户的请求全部落到同一台服务器上
优点
- 实现相对简单
- 只要分配服务器时均匀,则多台服务器是负载均衡的
缺点
- 一旦某台服务器宕机,则会影响落在此服务器请求上的全部用户
- 负载均衡服务器变为了一个有状态的节点,内存消耗会更大,容灾更麻烦
客户端存储
将数据直接存储到客户端比如Cookie
或请求头中,每次请求客户端自动携带数据信息
优点
- 简单,高效
- 服务端不需要储存标记用户信息
缺点
- 安全性较差,对于敏感信息必须加密
- 每次请求可能携带大量数据,占用外网带宽
- 数据存储在客户端就会存在泄密、篡改、窃取等隐患
后端集中存储
将SESSION
存储在一台单独的服务器中的数据库中,例如Mysql
、Oracle
、SqlServer
、Redis
、Mongodb
等等,各SERVER
服务器需要用户信息时携带SESSION ID
对于集中存储服务器进行请求,进而获取用户信息
优点
- 没有安全隐患
- 可以方便的水平拓展
SERVER
服务器重启不会造成SESSION
丢失
缺点
- 每次请求都增加了一次对于存储服务器的网络请求
- 会对集中存储服务器存在大量请求,数据库压力比较大
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://www.jianshu.com/p/5caed857dc3e
https://www.cnblogs.com/study-everyday/p/7853145.html
分布式SESSION一致性相关推荐
- 分布式Session一致性概述
分布式Session一致性问题 什么是SessionSession 是客户端与服务器通讯会话技术, 比如浏览器登陆.记录整个浏览会话信息 分布式SESSION一致性的问题,分布式SESSION到底如何 ...
- 分布式 Session 一致性解决方案
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 cnblogs.com/SimpleWu/p/10118674.html 推荐: ...
- php分布式session问题,分布式session一致性问题
1,什么是session session 是客户端与服务器通讯会话技术,比如用户登陆,会将登陆之后,将用户信息存入在session中 2,session 的原理 3,简单的session 例子 @Re ...
- 分布式session一致性问题
传统的网站结构(并发量不大,没有session的不一致的问题. 传统的网站结构图: **结论:**从图中可以看出在传统的网站结构中,所有的客户端都连接一个服务器,每个客户端发送过来的请求都被该服 ...
- 4种分布式session解决方案
cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储的数据量小 session是服务器用来存储部分数据信息,保 ...
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloopimport tornado.webfrom myhash ...
- Tornado自定义分布式session框架
Tornado自定义分布式session框架 一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在 ...
- session一致性架构设计极简教程
一,缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文. Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建se ...
- 分布式事务、分布式锁、分布式session
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | cnblogs.com/heqiyoujing ...
最新文章
- qstudio c语言中文网,再整理:Visual Studio Code(vscode)下的通用C语言环境搭建
- printf 格式输出代码大全
- 两个service事务统一_拜托,别再让我优化大事务了,我的头都裂了
- 判断RDD有多少个分区
- centos 修改密码_openstack Train版部署——基于centos系统(四)
- SpringBoot默认日志配置输出级别
- cdh中hue集成hbase_HBase版本 | Cloudera Enterprise 6.2.0发布
- 使用Image.GetThumbnailImage 方法返回缩略图
- hive 操作(五)——常用内置函数
- JavaWeb知识点
- 随机数和随机数种子——学不会找我
- Chapter9:Simulink建模与仿真
- 基于STM32CubeMX在STM32F072C8T6移植Contiki OS
- 利用imageai做一个物体检测系统
- 栈帧 stack frame
- 什么是monitor
- matlab中format使用方法
- 计算机d盘可以格式化吗,能将电脑的D盘直接格式化了吗
- NYOJ 20 吝啬的国度(深搜)
- 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?...