Web集群PHP Session共享解决方案:
1. 基于Cookie的Session共享
把用户相关的Session信息存储到浏览器的Cookie中,也称为客户端Session。
采用Flash Cookie、URL重写的方式传递Session信息的方案也可以归为此类。
缺点:只能够存储字符串、数值等基本类型的数据;Cookie大小存在限制;安全性;带宽及数据解压缩、网络传输性能问题。
2. 基于NFS的Session共享
通过NFS方式来实现各台服务器间的Session共享,各台服务器只需要mount共享服务器的存储Session的磁盘即可,实现较为简单。
但NFS对高并发读写的性能并不高,在硬盘I/O性能和网络带宽上存在较大瓶颈,尤其是对于Session这样的小文件的频繁读写操作。
基于磁盘阵列/SAN/NAS等共享存储的方案道理也类似。
3. 基于数据库的Session共享
把Session信息存储到数据库表(比如mysql的内存表Heap),这样实现不同应用服务器间Session信息的共享.
缺点:由于数据库服务器相对于应用服务器更难扩展且资源更为宝贵,在高并发的Web应用中,最大的性能瓶颈通常在于数据库服务器。因此如果将 Session存储到数据库表,频繁的增加、删除、查询操作很容易造成数据库表争用及加锁,最终影响业务。
4.基于Memcached/Tokyo Tyrant/Redis 等Key-Value DB的Session共享
这种方案的可扩展性高,读写速度快,推荐使用。
Memcached实现PHP Session共享,有memcache和memcached两个扩展可用。
1).使用memcache扩展的配置,在php.ini中修改,
session.save_handler = memcache session.save_path = “tcp://127.0.0.1:11211″
使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,类似这样的:”tcp://host1:port1persistent=1&weight=2,tcp://host2:port2″
2).使用Memcached扩展的配置,在php.ini中修改
session.save_handler = memcached session.save_path = “127.0.0.1:11211,127.0.0.1:11212″
参考资料:无名小站