码迷,mamicode.com
首页 > 其他好文 > 详细

session分布式存储

时间:2015-07-04 00:45:22      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

分布式Session共享

使用Tair(key-value)存储session(其他:使用memcached存储session)
 

高并发下分布式问题

透明处理存储介质的故障转移
动态增删节点,减小“缓存颠簸”问题
保证数据在各个节点的分布均衡
Session 序列化和反序列化
 

BASE 策略

Eric A. Brewer 在 1988 年提出的 BASE 策略,即 Basically Available、Soft state、和Eventually consistent。
互联网大多数应用更强调可用性,即牺牲高一致性,获得可用性或可靠性。
 

Hash取模算法

基于 memcache 的 Hash取模算法(hash() mod n,hash() 取用户ID,n为节点数) 实现的分布式 Session 方案,就属于基本可用:
第一,如果节点发生故障,该节点上的所有用户 Session 丢失,系统无法自恢复。
第二,如果系统压力突然增大,需要临时增加机器节点。按照 Hash取模的算法,在增加机器节点的这一时刻,大量缓存无法命中(其实还都存在之前的节点上),导致大范围的缓存穿透,压力会直接打到数据库上。
第三,根据 LRU 缓存失效算法,memcache 里存储的 key/value 有可能被踢出,用户 Session 容易丢失。
 

一致性哈希算法

【基于一致性哈希算法的 memcache 解决方案 】
1)一致性哈希帮我们解决的是,当机器节点减少时,缓存数据能进行最少重建
2)还能解决 Session 数据的分布均衡问题。
3)当机器节点宕机,这部分数据必然丢失。由于节点数目变化,有可能对部分没有丢失的数据也要重建。
但上面的方案都解决不了“一个节点失败后,它所存储的 Session 如何由其他节点获取以便接替失效节点,实现集群的容错(Failover)”。
 

ZooKeeper 集群

【基于 ZooKeeper 集群的分布式 Session 方案】【http://my.oschina.net/mn1127/blog/210282】
要解决基于 memcache 方案的数据丢失问题,可以引入持久化存储介质 ZooKeeper(下面简称 ZK)。
依托于 ZK 的一致性复制(在多个副本间保证数据的强一致性)和容错能力,结合上面的 MSM 思想,
由 ZK 负责 session 数据的存储,而我们自己实现的 session manager 将负责 session 生命周期的管理
技术分享
 
 

微软系的解决方法

ASP.NET 有自己的分布式 Session 解决方案,Session State Server ,即 web.config 里指定 sessionState 的 mode 为“StateServer”即可。
郑昀既可以在 web.config 里指定一个 State Server :
技术分享
也可以实现 System.Web.IPartitionResolver 的接口,自行决定如何构造 Session State Server 连接字符串,从而支持一组 State Servers。
郑昀也可以用 sessionState 的 partitionResolverType 属性设定即可:
技术分享
微软的这个解决方案缺点是,Session State 中的序列化和反序列化对象将成为主要性能消耗之一,最好使用基本类型来存储所有的 Session State 数据。

 

session分布式存储

标签:

原文地址:http://www.cnblogs.com/lsx1993/p/4619979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!