我们公司一个系统大量使用session,请问这样会有什么后果影响?

10-05-25 dcz1001
我们公司的一个系统大量使用了Session,如:操作的业务中查询出来的数据集合都会放入session中,好在在点一个新菜单的时候清理一下session,请问这样系统性能会受什么程度的影响?
         

2
icycrystal4
2010-05-25 17:28
在单机(JVM)环境下性能不会受影响, 如果你的业务访问量比较大, 需要集群环境/分布式时, session复制会导致网络风暴, 也就是说依赖session会使得应用un-scalable

可以考虑SNA-share nothing architecture. (业务)机器与(业务)机器之间应该是相互独立的, 平等的, 彼此不应该通信, 不共享信息.

banq
2010-05-26 08:20
2010年05月25日 16:35 "dcz1001"的内容
系统性能会受什么程度的影响 ...

注意性能和可伸缩性的概念区别:

什么是性能问题?如果你的系统对于一个用户访问还很慢,那就是性能问题;

什么是可伸缩性问题?如果你的系统对一个用户来说是快的,但是在高访问量下就慢了。

所以,你这样做的问题不会带来单机性能问题,会带来可伸缩性问题,就是楼上un-scalable,会使得一个客户端总是粘住一个服务器方法,无法真正实现负载平衡。尽管你硬件用L5或用apache做平衡器。

shangtang004
2010-05-27 11:08
能不能具体点。或给个测试方法

集群环境/分布式下为什么就不行了

banq
2010-05-27 11:31
其实是因为Session + 状态是不可伸缩的。

详细点是这样:如果你在Session中保存一个与该客户端有关的状态,比如状态数值为1,下次该客户端再发一个请求时,需要到自己的Session中寻找这个数值为1的状态。

在分布式环境中有两种办法:

1.如果下次该客户端发出的请求不是访问的是上次请求的服务器,那么他在新服务器中就找不到数值为1的状态,因为被负载平衡器随机分配到新服务器上了。

2.为了让他找到数值1的状态,那么就在这两台服务器之间拷贝Session中的状态,数值1的状态从原来服务器拷贝到新服务器,第二次请求就能在新服务器上找到这个数值为1的状态。但来这样做的问题是:服务器就会耗费负载来处理服务器之间的拷贝,根本没有全心全意处理客户端发出的请求,严重发生风暴堵塞。

猜你喜欢
3Go 1 2 3 下一页