最近又一个新的问题出现,有客户反映登录后导航菜单树的根分组信息偶尔会出现当前用户加载其它用户数据的现象,应用程序运行环境是四台WebLogic服务器节点,由F5做负载均衡;
前端采用的是ExtJS框架+Ajax技术,业务逻辑代码均采用Servlet实现;
在了解了情况后,首先进行了代码排查,未发现问题;
由于用户的登录信息是保存在Session中的,所以任何用户读取菜单分组信息都是通过相同的URL地址进行请求,考虑会不会是F5有对相同的URL请求有缓存,于是单独写了一个测试程序,同时模拟3个用户登录,对此URL地址做并发请求1000次,结果发现这三个用户中的两个用户的请求回应中确实有4~5 次的回应结果是另外一个用户的菜单分组信息;
我所了解的缓存一般都是通过请求URL地址去匹配的,于是我将URL参数进行了变化,即每次请求的URL都加上一个随即数,用于区别为不同的请求,重新执行了模拟登录并发操作,结果还是一样!
这是怎么回事儿呢,现在想脱离F5(此设备由其它厂商维护,不请楚具体设置),采用直接向WEB应用做并发测试,于由公司的服务器都是普通的PC,并发大了就无响应了,正在积极解决此问题!
在这里发贴是想请教各位,有没有遇到过此类问题的?帮兄弟分析一下,给个思路!
问题补充
gaofei_upc 写道
suninformation 写道
最近又一个新的问题出现,有客户反映登录后导航菜单树的根分组信息偶尔会出现当前用户加载其它用户数据的现象,应用程序运行环境是四台WebLogic服务器节点,由F5做负载均衡;
前端采用的是ExtJS框架+Ajax技术,业务逻辑代码均采用Servlet实现;
在了解了情况后,首先进行了代码排查,未发现问题;
由于用户的登录信息是保存在Session中的,所以任何用户读取菜单分组信息都是通过相同的URL地址进行请求,考虑会不会是F5有对相同的URL请求有缓存,于是单独写了一个测试程序,同时模拟3个用户登录,对此URL地址做并发请求1000次,结果发现这三个用户中的两个用户的请求回应中确实有4~5 次的回应结果是另外一个用户的菜单分组信息;
我所了解的缓存一般都是通过请求URL地址去匹配的,于是我将URL参数进行了变化,即每次请求的URL都加上一个随即数,用于区别为不同的请求,重新执行了模拟登录并发操作,结果还是一样!
这是怎么回事儿呢,现在想脱离F5(此设备由其它厂商维护,不请楚具体设置),采用直接向WEB应用做并发测试,于由公司的服务器都是普通的PC,并发大了就无响应了,正在积极解决此问题!
在这里发贴是想请教各位,有没有遇到过此类问题的?帮兄弟分析一下,给个思路!
前端采用的是ExtJS框架+Ajax技术,业务逻辑代码均采用Servlet实现;
在了解了情况后,首先进行了代码排查,未发现问题;
由于用户的登录信息是保存在Session中的,所以任何用户读取菜单分组信息都是通过相同的URL地址进行请求,考虑会不会是F5有对相同的URL请求有缓存,于是单独写了一个测试程序,同时模拟3个用户登录,对此URL地址做并发请求1000次,结果发现这三个用户中的两个用户的请求回应中确实有4~5 次的回应结果是另外一个用户的菜单分组信息;
我所了解的缓存一般都是通过请求URL地址去匹配的,于是我将URL参数进行了变化,即每次请求的URL都加上一个随即数,用于区别为不同的请求,重新执行了模拟登录并发操作,结果还是一样!
这是怎么回事儿呢,现在想脱离F5(此设备由其它厂商维护,不请楚具体设置),采用直接向WEB应用做并发测试,于由公司的服务器都是普通的PC,并发大了就无响应了,正在积极解决此问题!
在这里发贴是想请教各位,有没有遇到过此类问题的?帮兄弟分析一下,给个思路!
如果是缓存问题的话,使用时间标签试一下,随机数也不能保证不重复吧
使用了前缀进行了区分,不同的用户登录时其前缀不同,不会存在重复的情况,请求的JS测试代码如下:
for (var times=0; times <1000;times++) {
this.times = times;
Ext.Ajax.request({
url :"/app/treeservlet?id=root&node=root&type=first×=_num_" + this.times,
method : "POST",
scope : this,
success : function(response){
AppUtils.Log.debug('加载分组:' + response.responseText);
}
});
}