1. 通过组播的方式进行集群间的共享,

优点:web容器自身支持,配置简单,适合小型网站。

缺点:当一台机器的上的session变更后会将变更的数据以组播的形式分发给集群间的所有节点,对网络和所有的web容器都是存在开销。集群越大浪费越严重。不能做到线性的扩展。



2. 利用共享存储来共享Session数据

所有的Web服务器都把session数据写到共享存储介质上,也都要来这台服务器获取session数据,通过这样的方式来实现Session数据的共享。

        优点:网络开销较小。

缺点:受制于存储设备的依赖,如果存储设备down掉,就无法工作了,要做好主备同步等一些容灾措施。另外,当访问量过大时,磁盘的IO也是一个非常大的问题。



3.利用Memcache或则redis来存储共享Session数据

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

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

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

      本人更偏向于redis



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

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐