当前位置: 首页 > 科技观察

分布式系统中会话共享的五种方法

时间:2023-03-19 19:33:23 科技观察

1。基于NFS的会话共享NFS是NetFileSystem的缩写,最早由Sun开发,用于解决Unix网络主机间的目录共享。这个方案最容易实现,不需要过多的二次开发,只需要将共享目录服务器挂载到各个频道服务器的本地session目录即可。缺点是NFS依赖复杂的安全机制和文件系统,并发效率低。高,尤其是session等读写并发较高的小文件,由于共享目录服务器的io-wait过高,最终会拖累前端WEB应用的执行效率。2.基于数据库的session共享首选当然是大名鼎鼎的Mysql数据库,推荐使用内存表Heap来提高session操作的读写效率。这个方案比较实用,相信大家也广泛使用。它的缺点是session的并发读写能力取决于Mysql数据库的性能。同时需要自己实现session清除逻辑,定时更新和删除数据表中的session记录,当并发度过高时,容易出现表锁。虽然我们可以选择带行级锁的表引擎,但是我们不得不否认用数据库来存储Session还是有点大材小用。3、基于cookie的session共享对于我们来说可能比较陌生,但是在大型网站中还是很常用的。其原理是将站点所有用户的session信息加密序列化,以cookie的形式植入根域名(如:.host.com)下。该域名对应的所有cookie内容的特征都会被传输,从而实现用户基于cookie的session在多个服务之间的共享访问。该方案的优点是不需要额外的服务器资源;缺点是由于http协议头的置信长度限制,只能存储一小部分用户信息,需要对基于cookie的session内容进行安全的加解密(例如使用DES,RSA等明文的加解密;以及MD5、SHA-1等算法的防伪认证),同时也会占用一定的带宽资源,因为浏览器会在http头部附加本地Cookie向服务器请求当前域名下的任意资源时。4、基于Memcache的Session共享由于Memcache是??基于Libevent多路异步I/O技术的内存共享系统,简单的Key+Value数据存储方式使得代码逻辑紧凑高效,因此在并发方面占据绝对优势处理能力,目前我体验过的项目已经达到了平均2000次/秒的查询,服务器CPU占用率还不到10%。另外值得一提的是,Memcache在内存哈希表中独有的Expires数据过期淘汰机制与Session过期机制不谋而合,降低了删除过期Session数据的代码复杂度。与“基于数据库的存储方案”相比,仅这一块逻辑就对数据表造成了巨大的查询压力。5、基于Redis的session共享