搞开发的一定听到Session同步,但至于搞没搞过就是另一回事了。
像Sina,Sohu这些门户网站,日访问量岂止数万,但没人的网站为什么不会崩溃?但咱一个个的小站,日访问量敢上万,乖乖吧,服务器绝对会暴掉。为什么门户网站会没事,只因他们做的集群,做了负载均衡,做了缓存,做了静态生成,做了缓存;但他们做的这些的技术后,Session如何实现同步呢?
本文来分析下,常用的几种Session同步技术:
一,利用数据库同步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不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。
四:总结
上面三种方法都是可行的
第一种方法,最影响系统速度的那种,不推荐使用;
第二种方法,效果不错,不过安全隐患一样的存在;
第三种方法,个人觉得第三种方法是最好的,推荐大家使用
像门户网站一般都会选择第三种方法去实现,好处就不用说了,不过难度就是于Memcache的配置,如果是做大站的话,还是建议使用第三种方法,短暂的付出换来长期的稳定,何乐而不为呢?
分享到:
相关推荐
在此情况下,Oracle Universal Installer 没有将安装信息完全注册到注册表中,但文件可能已经被复制到 Oracle 目录中,因此可手工卸载这些文件并重新启动安装。 二、单独组件的卸载 这种卸载就是将系统中已经安装...
- 开启半同步复制。 ```sql set global rpl_semi_sync_slave_enabled=on; ``` - 启动复制。 ```sql start slave; show slave status\G ``` **小结**:以上两种方法适用于不同场景下的主从复制问题解决,...
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,可以使用简单的XML或注解进行配置和原始映射,将接口及Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 **对象与...
设置复制操作的变动日志大小(ChangeLogSize)参数 设置复制操作的同发脉冲(PulseConcurrency) 参数 使用服务器管理器强制触发同步事件 申请完全同步事件 设定不同的复制频率 对访问全局资源的理解 理解高级委托关系...
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常...
- **CSS管理**:管理集群同步服务(Cluster Synchronization Services),确保集群节点之间的同步。 - **管理工具SRVCTL** - **管理实例**:使用SRVCTL工具启动、停止和管理数据库实例。 - **管理监听程序**:配置...
§14.4.3 ALTER SESSION语句的OPTIMIZER_GOAL参数 174 §14.4.4 关于提示的改变目标 174 §14.5 基于代价优化器(CBO) 174 §14.5.1 CBO结构调整 175 §14.5.2 CBO需求 175 §14.5.3 使用CBO 176 §14.5.4 CBO访问...
端口镜像技术可将一个端口的数据复制到另一个端口,常用于故障排除和监控。 - **2.6.2 端口镜像常用配置命令** ```bash configure terminal monitor session 1 source interface GigabitEthernet 1/0/1 ...
- **操作数据**:使用Session和Transaction进行数据的增删改查。 **12.4 测试Hibernate应用** - **部署到服务器**:将Hibernate应用部署到应用服务器。 - **测试应用**:通过单元测试或集成测试验证Hibernate应用...