分布式系统如何保证session一致性?

154 2月之前 Session 分布式 一致性

答案

分布式系统session保存:

  • mysql
  • cookie
  • redis或memcache
  • 文件

主要方式是就是所有app应用都操作同一个位置的session,存哪都行,

具体还要看业务量,比如业务量大,可能会采用缓存集群,业务量小可能单台机器的文件就能存了

答案解析

利用MySQL数据库同步session
  • sessionid 还是利用cookie机制存储到客户端,但session数据却存放在MySQL服务器上。
  • 缺点:依赖性太强,Mysql无法工作了影响所有的Web服务器,最影响系统速度。
利用cookie同步session

缺点:

  1. 用户禁用cookie或者cookie泄露,存在安全隐患。
  2. 浏览器对单个cookie的数据量大小限制为4K左右,因此会存在数据量的限制问题。
  3. 影响带宽性能,降低了页面的访问速度。在高访问量的情况下,用户每次请求时,都要将客户端cookie中的session数据发送到服务器,要占用较多的带宽,进而影响访问速度,服务器带宽成本增高。
利用memcache、redis同步session
  • 推荐使用redis内存数据库,因为它比memcache支持更多的数据类型,且支持内存数据备份到磁盘。
  • 缺点:memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。
使用硬件设备
  • 这个算是比较成熟的解决方案了,使用类似BIG-IP的负载设备来实现资源共享,那么就能够又稳定又合理的的共享Session了,目前很多门户网站采用这种方式。
  • 缺点:很明显,贵,不过对于专业或者大型应用来讲,是比较合理并且值得的。