多台服务器共享session问题

多台服务器共享session问题

在现在的大型网站中,如何实现多台服务器中的session数据共享呢

    当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者ip)访问时被分配到不同的服务器上,假设在A服务器登录,如果在B服务器拿不到用户的登录信息session。这时访问到B服务器时就出现未登录情况。

    所以如何对于这种情况做到共享session至关重要。

   以下给出一些解决方案:(来源网络以及自己的一些见解)

  1.通过数据库mysql共享session

     a.采用一台专门的mysql服务器来存储所有的session信息。

      用户访问随机的web服务器时,会去这个专门的数据库服务器check一下session的情况,以达到session同步的目的。 

      缺点就是:依懒性太强,mysql服务器无法工作,影响整个系统;

    b.将存放session的数据表与业务的数据表放在同一个库。如果mysql做了主从,需要每一个库都需要存在这个表,并且需要数据实时同步。

    缺点:用数据库来同步session,会加大数据库的负担,数据库本来就是容易产生瓶颈的地方,如果把session还放到数据库里面,无疑是雪上加霜。上面的二种方法,第一点方法较好,把放session的表独立开来,减轻了真正数据库的负担 。但是session一般的查询频率较高,放在数据库中查询性能也不是很好,不推荐使用这种方式。

2.通过cookie共享session

   把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。

   当访问服务器A时,登录成功之后将产生的session信息存放在cookie中;当访问请求分配到服务器B时,服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个session,如果cookie里面有,就把cookie里面的sessoin同步到web服务器B,这样就可以实现session的同步了。 

   缺点:cookie的安全性不高,容易伪造、客户端禁止使用cookie等都可能造成无法共享session。

3.通过服务器之间的数据同步session

  使用一台作为用户的登录服务器,当用户登录成功之后,会将session写到当前服务器上,我们通过脚本或者守护进程将session同步到其他服务器上,这时当用户跳转到其他服务器,session一致,也就不用再次登录。

  缺陷:速度慢,同步session有延迟性,可能导致跳转服务器之后,session未同步。而且单向同步时,登录服务器宕机,整个系统都不能正常运行。

4.通过NFS共享Session

  选择一台公共的NFS服务器(Network File Server)做共享服务器,所有的Web服务器登陆的时候把session数据写到这台服务器上,那么所有的session数据其实都是保存在这台NFS服务器上的,不论用户访问那太Web服务器,都要来这台服务器获取session数据,那么就能够实现共享session数据了。

  缺点:依赖性太强,如果NFS服务器down掉了,那么大家都无法工作了,当然,可以考虑多台NFS服务器同步的形式。

5.通过memcache同步session

  memcache可以做分布式,如果没有这功能,他也不能用来做session同步。他可以把web服务器中的内存组合起来,成为一个”内存池”,不管是哪个服务器产生的sessoin都可以放到这个”内存池”中,其他的都可以使用。 

  优点:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。 

  缺点:memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。 

6.通过redis共享session

  redis与memcache一样,都是将数据放在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

   根据实际开发应用,一般选择使用memcache或redis方式来共享session.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112992.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SQL索引排序[通俗易懂]

    SQL索引排序[通俗易懂]只有聚集索引SQL查询才会按照索引排序

    2022年10月21日
  • matlab画圆的命令_matlab画矩形和matlab画圆「建议收藏」

    matlab画圆的命令_matlab画矩形和matlab画圆「建议收藏」今天在用MATLAB编程的时候,用到了已知圆心和半径,画圆的程序,上网搜了一下,主要有下面两种,在这里总结一下:(这里我都是放在函数中做的,想画多个圆的话可以加个for循环调用一下函数,或者直接用向量做都是可以的,在这里我不在多说)第一种:function[]=circle(x,y,r)rectangle(‘Position’,[x-r,y-r,2*r,2*r],’Curvature’,…

  • idea 2020年3 激活码_通用破解码

    idea 2020年3 激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Java IO流处理 面试题汇总

    Java IO流处理 面试题汇总说明:本节内容来源于网络汇总输入输出流是相对于内存而言的!1、面试题汇总(1)java中有几种类型的流?字符流和字节流。字节流继承inputStream和OutputStream,字符流继承自InputSteamReader和OutputStreamWriter。(2)谈谈JavaIO里面的常见类,字节流,字符流、接口、实现类、方法阻塞答:输入流就…

  • ArcGIS二次开发基础教程(09):叠加分析

    ArcGIS二次开发基础教程(09):叠加分析ArcGIS二次开发基础教程(09):叠加分析缓冲区分析的概念及原理请查看帮助文档http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/how-buffer-analysis-works.htm缓冲区分析//实现对图层中所有点要素进行缓冲分析IGraphicsContainergraphicsConta…

  • windows程序设计第五版_程序设计中三种基本结构

    windows程序设计第五版_程序设计中三种基本结构WNDCLASS结构参数及其用法WNDCLASS是一个由系统支持的结构,用来储存某一类窗口的信息,如ClassStyle,消息处理函数,Icon,Cursor,背景Brush等。也就是说,CreateWindow只是将某个WNDCLASS定义的窗体变成实例。结构WNDCLASS包含一个窗口类的全部信息,也是Windows编程中使用的基本数据结构之一,应用程序通过定义一个窗口类确定窗口的属性基…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号