分布式Session的主流实现方式和优缺点

一、常见的分布式session实现方式有以下几种

1. 基于数据库的Session共享

2. 基于NFS共享文件系统
3. 基于memcached 的session
4. 基于resin/tomcat web容器本身的session复制机制
5. 基于TT/Redis 或 jbosscache 进行 session 共享。

6. 基于cookie 进行session共享


二、优缺点分析

1.基于数据库的session共享。

原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。

优点:服务器出现问题,session不会丢失。

缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。

2.基于基于NFS共享文件系统

原理:拿出一个服务器,搭建NFS服务器来共享session。保证session的持久化。

优点:用NFS来存储session的缺点是,session过期后可以实现自动清除,必须自己设定回收机制,我们可以利用crontab来定期回收,用用以下shell命令即可:

find /tmp/php_sess -mmin +30 | xargs rm -fr

缺点:如果session量比较大并且所有的session文件都在同一个子目录下的话,那么可能会由此带来很严重的负载问题,甚至导致网站无法使用

3.基于memcached 的session(不提倡)

这里memcached创建者Dormando很早就写过两篇文章,告诫开发人员不要用memcached存储Session。他在第一篇文章中给出的理由大致是说,如果用memcached存储Session,那么当memcached集群发生故障(比如内存溢出)或者维护(比如升级、增加或减少服务器)时,用户会无法登录,或者被踢掉线。而在第二篇文章中,他则指出,memcached的回收机制可能会导致用户无缘无故地掉线。

4.Session Replication 方式管理 (即session复制)

原理:将一台机器上的Session数据广播复制到集群中其余机器上

优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问

缺点:在机器较少,网络流量较小广播式复制到其余机器上,当机器数量增多时候会有一定廷时,带来一定网络开销

5.基于TT/Redis 或 jbosscache 进行 session 共享(倾向于Redis)

所有Web服务器都把Session写入到或则redis,也都从memcache或则redis来获取。

优点:memcache或则redis本身就是一个分布式缓存,便于扩展。网络开销较小,几乎没有IO。性能也更好。

缺点:受制于Memcache的容量(除非你有足够内存存储),如果用户量突然增多cache由于容量的限制会将一些数据挤出缓存,另外memcache故障或重启session会完全丢失掉。所以更偏向于redis。


6. 基于cookie 进行session共享

将用户的session数据全部存放在cookie中,很多大型站点都在这么干。优点是服务器架构也变得简单,每台web服务器都可以很独立。没有网络开销和对磁盘IO,服务器重启也不会导致数据的丢失。缺点,cookie过于庞大会耗费单位页面的下载时间,所以要尽量保持cookie的精简。



你可能感兴趣的:(系统架构)