锁定老帖子 主题:负载均衡引发的线程变量问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-22
hunteagle 写道: 前台是没有显式的将用户ID传入业务层的, 而是将它设置在线程变量中. 现在使用了两个tomcat, 当一个用户线程从一个tomcat转向另一个时, 他就不能操作他的资源了, 因为线程已经不是原来的那个线程, 其中已经没有了用户ID,这相当于是没有登录的状态.
你的这个理解应当是不对的。 1)用户的ID如果保存在线程变量中,那么这个ID是瞬时状态的,下次用户访问,这个线程变量就不存在了。我觉得你可能没有理解你们现在如何保存用户ID的机制,一般来说,最终用户登录的状态数据都是保存在session中的。 2)如果用户ID的确在线程变量中,那么对于是否处于集群环境下,应当是没有区别的。因为A服务器节点上的一个线程的处理,不会转入到B节点上。至于用户第一次访问由A处理,下一次可能由B处理,那完全不是线程的概念。即便没有集群,两次访问也不一定是同一个线程来响应。 |
|
返回顶楼 | |
发表时间:2007-07-23
集群跟线程局部变量怎么扯的上关系??? |
|
返回顶楼 | |
发表时间:2007-07-23
hunteagle 写道: 公司现在打算使用两个tomcat来进行负载均衡, 调试时发现了问题. 以前没有使用负载均衡时,前台是没有显式的将用户ID传入业务层的, 而是将它设置在线程变量中. 现在使用了两个tomcat, 当一个用户线程从一个tomcat转向另一个时, 他就不能操作他的资源了, 因为线程已经不是原来的那个线程, 其中已经没有了用户ID,这相当于是没有登录的状态. 如果要将用户ID作为一个调用参数传入业务层的话, 接口改动将会很大.请问各位有什么好的办法可以解决这个问题, 或者是有其它的折衷的方法可以避免对接口的过大程度的修改? 谢谢! 怀疑对thread理解有误 即使是同一个tomcat两次请求也不能保证用同一个thread,所以每次请求开始时都应该清除thread中自己关心的数据,保证改次请求的数据不受之前request的影响 |
|
返回顶楼 | |
发表时间:2007-07-23
如果只是增加一个tomcat,可以考虑采用session粘连的方式。用户请求以后,一直都会访问同一个tomcat;tomcat本身连集群都不需要做,对应用来说和单台tomcat没有任何区别。
|
|
返回顶楼 | |