博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web集群环境中的session同步几种方法
阅读量:5962 次
发布时间:2019-06-19

本文共 1349 字,大约阅读时间需要 4 分钟。

在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果 session不同步的话,一个登录用户,一会是登录状态,一会又不是登录状态。所以本文就根据这种情况给出三种不同的方法来解决这个问题:

一,利用数据库同步session

1,用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。

2,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要有这张表,并且这张session表的数据表要实时同步。

说明:用数据库来同步session,会加大数据库的负担,数据库本来就是容易产生瓶颈的地方,如果把session还放到数据库里面,无疑是雪上加霜。上面的二种方法,第一点方法较好,把放session的表独立开来,减轻了真正数据库的负担

二,利用cookie同步session

session是存放在服务器端的,cookie是存放在客户端的,怎么实现同步呢?方法很简单,就是把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了 session把它放到cookie里面了,你访问被分配到web服务器B,这个时候,web服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的 sessoin同步到web服务器B,这样就可以实现session的同步了。

说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。

三,利用memcache同步session

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

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

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

四,总结

上面三种方法都是可行的

第一种方法,最影响系统速度的那种,不推荐使用;

第二种方法,效果不错,不过安全隐患一样的存在;

第三种方法,个人觉得第三种方法是最好的,推荐大家使用

本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1865737,如需转载请自行联系原作者
你可能感兴趣的文章
如何提高教师的教学成果、学生的学习效果?
查看>>
《从Servlet、Dubbo、Mybatis聊聊责任链究竟怎么用 》
查看>>
新股前瞻|深耕IT界17年,伊登软件仅是个“中间商”
查看>>
dba_tables 和 dba_segments 表中块的区别
查看>>
Forefront TMG日志记录功能
查看>>
PIE SDK栅格数据的创建
查看>>
JVM | Java程序如何执行
查看>>
date 设置时间
查看>>
vs2017 + Python3.6 +Django1.11 连接mysql数据库
查看>>
速达3000 数据库备份文件分析
查看>>
MyBatis 通过包含的jdbcType类型
查看>>
链路与介质
查看>>
让puppet agent同步变得更加随机和离散
查看>>
SharePoint 2013 部署 Part 2
查看>>
SCN转换
查看>>
软件开发模式对比(瀑布、迭代、螺旋、敏捷)
查看>>
unity3d uGUI中世界坐标与屏幕坐标实际运用
查看>>
基于keepalived主从模型实现Nginx的高可用
查看>>
一个完整的微服务系统,应该包含哪些功能?
查看>>
oracle 单实例 RAC架构 及RAC启动流程
查看>>