Session 在分布式系统中实现方式
##server独立Session
例如以下图所看到的:
server独立Session要求用户的每次请求都必须在同一台应用server上面操作,这就要求负载均衡server每次都能把用户的请求发送到同一个地址的server上面。
第一个用户第一次訪问的1号server。那个在用户的整个会话中都必须由负载均衡server导流到1号server上面。
其它server不会保存1号用户的Session信息。
如今的负载均衡server一般都有这个功能(nginx)
可是假设出现以下的情况
这个时候1号server宕机的情况下,负载均衡server会把1号用户导流到2号或者3号server上面,可是用户在2和3号server上面没有安全的上下文环境。server会通知用户又一次登录。这样用户体验肯定会受到影响。并且非常可能用造成用户的数据丢失。
每台server保留所有Session
每台server保留所实用户的Session这就关系到应用server之间的Session同步问题。实时性要求比較高。
这样的方式能够避免上面server独立Session所遇到的问题,例如以下图所看到的:
长处
这样的方式即使出现第一种情况那么2和3号server上面也保存的1号的Session信息,当出现故障负载均衡server把1号用户导流到2和3号server上面时。server也会发现有1号用户的安全上下文,能够继续訪问并且不须要又一次登录。
缺点
可是这样的方式也有缺点,那就是相应用server的Session同步实时性要求比較高,并且会带来额外的跨带开销。并且当Session之遥有变化时,就须要同步。假设Session里面的信息量比較大。那个会占用相当大的内存消耗。
server共享Session
server共享Session信息:
长处
每一个用户的Session信息都会被存储到应用之外的另外一台server(可能是数据库,也可能是KV存储服务),这样应用server就不用存储每一个用户的Session信息了,节约了非常大的内存开销。
当不同应用server须要用到Session信息的时候就去找共享Sessionserver来获取信息。
这样负载均衡server也就不用把用户固定的分配到一台server上面了,并且也不用server之间来复制Session信息,当Session信息发生改变时,应用server都去共享server改动信息就可以。
缺点
比較依赖于共享server,一旦共享server或者共享server集群出现故障。用户会收到非常大影响
在Cookie中传递Session数据
在Cookie中存放用户信息倒是能排除一个不稳定的因素,可是Cookie在安全方面还是存在隐患。并且Cookie也有长度的限制。
在站点中用到最多的可能就是 应用独享Session 和 集中管理Session的方式。
当中集中管理Session中能够用memcached 做为sessionserver。效率也非常高。当然其它的NoSQL数据库也能够。
大家假设有什么好的建议能够一起学习。
Session 在分布式系统中实现方式的更多相关文章
- 分布式系统中session一致性问题
业务场景 在单机系统中,用户登陆之后,服务端会保存用户的会话信息,只要用户不退出重新登陆,在一段时间内用户可以一直访问该网站,无需重复登陆.用户的信息存在服务端的 session 中,session中 ...
- 【分布式】Zookeeper在大型分布式系统中的应用
一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...
- zookeeper系列(五)zookeeper在大型分布式系统中的应用
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...
- 如何在高并发分布式系统中生成全局唯一Id
月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1. ...
- 分布式系统中一些主要的副本更新策略——Dynamo/Cassandra/Riak同时采取了主从式更新的同步+异步类型,以及任意节点更新的策略。
分布式系统中一些主要的副本更新策略. 1.同时更新 类型A:没有任何协议,可能出现多个节点执行顺序交叉导致数据不一致情况. 类型B:通过一致性协议唯一确定不同更新操作的执行顺序,从而保证数据一致性 2 ...
- 如何在高并发分布式系统中生成全局唯一Id(转)
http://www.cnblogs.com/heyuquan/p/global-guid-identity-maxId.html 又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文, ...
- (转)如何在高并发分布式系统中生成全局唯一Id
又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...
- [ios-必看] WWDC 2013 Session笔记 - iOS7中的多任务【转】
感谢:http://onevcat.com/2013/08/ios7-background-multitask/ http://www.objc.io/issue-5/multitasking.htm ...
- 分布式系统中生成全局ID的总结与思考
世间万物,都有自己唯一的标识,比如人,每个人都有自己的指纹(白夜追凶给我科普的,同卵双胞胎DNA一样,但指纹不一样).又如中国人,每个中国人有自己的身份证.对于计算机,很多时候,也需要为每一份数据生成 ...
随机推荐
- shell脚本中的set -e和set -o pipefail
工作中经常在shell脚本中看到set的这两个用法,但就像生活中的很多事情,习惯导致忽视,直到出现问题才引起关注. 1. set -eset命令的-e参数,linux自带的说明如下:"Exi ...
- DevOps: CLM, RLM, RPM, RPD, BSA, BAA, BMA - WOW!
1. BMC Release Lifecycle Management (RLM) is our suite targeted at managing and automating applicati ...
- 有关python 函数参数
# def foo(x):# print(x)### foo(1)# foo('a')# foo({'a':2}) #形参与实参:# def foo(x,y): #x=1,y=2# return x+ ...
- js变量和函数声明的提升
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo = ...
- C# 使用PrintDocument 绘制表格 完成 打印预览
C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable 经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代 ...
- 如何解决Failed to retrieve MSVC Environment from XXXXXXXX
升级了新版的Qt5.9.3后,本人的电脑也出了这个问题. 最后通过删除了path中的一些错误.多余的环境变量解决了.(删除了一些mysql的环境变量)
- golang单例模式
1.定义:单例对象的类必须保证只有一个实例存在,全局有唯一接口访问. 2.分类: 懒汉方式:指全局的单例实例在第一次被使用时构建. 饿汉方式:指全局的单例实例在类装载时构建. 3.实现: (1)懒汉方 ...
- 潭州课堂25班:Ph201805201 django 项目 第二十一课 文章主页 新闻列表页面功能 (课堂笔记)
新闻列表页功能 1.分析 业务处理流程: 判断前端传的标签分类id是否为空,是否为整数.是否超过范围 判断前端传的当前文章页数是否为空,是否为整数.是否超过范围 请求方法:GET url定义:/new ...
- error LNK2001: unresolved external symbol _main
想运行一个网上下载的opengl离屏渲染(渲染到纹理FBO)的程序,然后一直报错 error LNK2001: unresolved external symbol _main 解决了一下午终于弄明白 ...
- 20172310 实验四 Android程序设计
20172310 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王志 ...