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一样,但指纹不一样).又如中国人,每个中国人有自己的身份证.对于计算机,很多时候,也需要为每一份数据生成 ...
随机推荐
- XamarinSQLite教程在Xamarin.Android项目中使用数据库
XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...
- H5与Native交互之JSBridge技术
一.原理篇 下面分别介绍IOS和Android与Javascript的底层交互原理 IOS 在讲解原理之前,首先来了解下iOS的UIWebView组件,先来看一下苹果官方的介绍: You can us ...
- java课程作业一,传入字符串求和
设计思想:在命令行下以字符串形式输入几个数字,使用Double类的静态方法valueof传入字符串得到相应的数值型变量,一个for即可将所有的字符串转化为数值型相加. 程序流程图: 源代码: publ ...
- BZOJ.4199.[NOI2015]品酒大会(后缀数组 单调栈)
BZOJ 洛谷 后缀自动机做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 显然只需要考虑极长的相同子串的贡献,然后求后缀和/后缀\(\max\)就可以了. 对于相同子串,我们能想 ...
- Sql的行列(纵横表)转换
1.行转列: 表结构和数据: DROP TABLE IF EXISTS `kj`; CREATE TABLE `kj` ( `姓名` ) DEFAULT NULL, `课程` ) DEFAULT NU ...
- [CC-MINXOR]XOR Minimization
[CC-MINXOR]XOR Minimization 题目大意: 有一个长度为\(n\)的数列\(A_{1\sim n}\).\(q\)次操作,操作包含以下两种: 询问\(A_{l\sim r}\) ...
- win7生成ssh key配置到gitlab
测试服务上使用ip访问gitlab,比如http://192.168.0.2/,创建用户并登陆后创建一个项目,比如git@gitlab.demo.com:demo/helloworld.git 如果想 ...
- Stack [NOIP模拟] [组合数学经典]
Description栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你已经知道栈的操作有两种: push 和 pop ,前者是将一个元素进栈,后者是将栈顶元素弹出.现 ...
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)
http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...
- 最长递增子序列( LIS)
LIS LIS的优化说白了其实是贪心算法,比如说让你求一个最长上升子序列把,一起走一遍. 比如说(4, 2, 3, 1, 2,3,5)这个序列,求他的最长上升子序列,那么来看,如果求最长的上升序列,那 ...