【分布式】分布式session
来源:互联网 发布:阿里云ecs上传文件 编辑:程序博客网 时间:2024/05/16 06:00
http协议的无状态性催生了cookie技术,也就是用cookie来记录会话信息。如果服务器需要记录该浏览器的信息,就会在http响应头部加上一个setCookie字段,浏览器接收到这个http响应,就会在本地保存cookie信息,然后再下一次访问该站点的时候在http请求首部加上cookie的信息,这样服务器就可以跟踪会话信息了。
session是另一种记录会话信息的机制,但是本质上,session技术仍然是借助cookie技术来实现的,session会把会话信息保存在服务器端,具体是保存在一个逻辑上类似map的结构,服务器会为每一个浏览器设置一个key,然后该浏览器的所有会话信息就会保存在这个key为关键字的map中,然后服务器会把这个key通过cookie传递给浏览器,浏览器在后面的访问中携带该cookie即可。
session的具体实现方式,大致有三类:
1.基于文件,每一个key和对应的会话信息都是一个文件,这种方式比较稳定,但是操作起来麻烦;
2.基于缓存,即放在服务器的内存中,这种方式虽然操作很简单,速度快,但是存储大小受限于服务器内存,而且一旦断电,会丢失所有会话信息;
3.基于cookie,也就是伪session,把会话信息放在了cookie中。
在分布式系统中session会有什么问题?主要是seesion共享问题。假设用户登录了以后,那么用于处理登录的机器A在自己的机器上设置了session,但是用户后续的购物操作被转发到了机器B,这时B机器并没有用户的session信息,所以用户仍需登录。
所以,必须让其他机器也得到session信息才可以。
解决的方法:
1.进程同步,当一个机器需要记录session时,除了在自己机器上记录,还要通过网络方式把session传递给其他的机器,这种办法回增加集群的压力,不是很好。
2.使用cookie,也就是session用cookie来实现,Flask的session机制就是这样实现的,我开始想做一个demo,用ningx负载均衡了两个机器上的flask应用,最后只在一台上设置session,最后另一台也可以得到,上网查询了才知道是flask框架的session机制问题。
3.创建一个集中的session服务,所有其他服务的session业务都需要从该服务中获取。目前来看方案3最好,便于管理,而且解决了共享问题,模块化,将应用与session的实现解耦。一般大公司貌似采用的是方案3。
参考过:
http://blog.csdn.net/xyw591238/article/details/51644315
- 【分布式】分布式session
- 分布式Session
- 分布式session
- 分布式 session
- 分布式session
- 分布式Session
- 分布式session
- 分布式session实现原理
- 分布式session处理方案
- 分布式session处理方案
- 分布式Session管理
- session分布式共享
- 分布式Session存储方案
- zookeeper分布式session
- redis 分布式 session容器
- 分布式Session与cookie
- Session::Run() 分布式版本
- 分布式session共享
- 宏定义和别名在Windows编程上的应用
- mysql优化-表的优化与列类型的选择
- 设计模式——状态模式
- 无穷小微积分落地生根在中国,我们要有数学基础理论的自信!
- 算法课程Leetcode作业第四周技术博客
- 【分布式】分布式session
- Predictive modeling, supervised machine learning, and pattern classification — the big picture
- 170930 逆向-Reversing.kr(Twist)
- 读《断舍离》山下英子
- unable to load dll 'gdiplus.dll' in docker
- Java三大主流框架概述
- sparkstreaming中通过kafka sample api实现directstream源码分析
- windows编译pycaffe
- Windows命令行查看文件的MD5