最近的项目中遇到一个奇怪的问题, 我们的文件上传完了之后, 有一个非常大的几率不能够马上list 出来, 过5-6 S 之后重新刷新又出
来了。这里先介绍下系统的架构
file Meta data DB
SWFUpload ==> app server box ==> File Server
file NFS system
这里需要注意的时候app server 和File service 都是做了负载均衡, 并且在F5的loadbalance 后面的
相关功能的工作流程:
1。进入App 的File list 页面, 去list 当前folder下的最新50 个文件
2。SWFupload(flash upload) 把文件发送到app server
3. app server 做了必要的校验之后, 把文件内容发送到File server 上
4。app server 返回call File service 的文件保存操作的结果给front end的前台
5。front end call ajax to fresh File
问题排查:
1。 首先排查log, 没有看到有什么异常
2。 然后我们怀疑我们的排序代码会不会有什么问题, 仔细阅读代码, 没看到什么异常
3。 用IEhttpAnalyzer 抓包, 发现第一步的1# list 和 第五步的5# list 都被负载均衡F5 foward 到同一台app serser上, 但是第二步
上传操作发送数据到一个和1,5 所不同的App server 上。
4。 再排查发现发现我们File server 直接的的文件同步是异步的, 元数据的缓存在File server 各个server之间的同步是需要一个时间的
。 而且App server 和File server 之间是存在load balance 的session sticky的。这也正解释为什么我们上传完以后不能马上list 到的
问题出现几率不是100%;
5。 再排查的时候我们发现对F5 对浏览器和appserver 之间的session sticky的设置的策略是在cookie 里面记录一个server的id, 下一次的request, F5 根据cookie中的server ID, forward 到前面已经访问过的机器上, 而且在response 中设置这个cookie和在request 分发阶段的读取对app都是透明的。但是问题是SWFupload 有个known issue 是http://demo.swfupload.org/Documentation/#knownissues swfupload 无法读取到浏览器上其他非swupload 所产生的cookie的。 在我们这个案例里面就是第二步的upload request 的时候swfupload 无法得到第一步list 的时候F5 在resposne 的cookie上设置的server id。
解决方案:
找到问题根源, 解决方案就比较简单了, 我们在程序中自己把第一步中cookie 中的server id 读出来, 以参数的形式append 到upload 操作中的url上, 并且修改F5 策略, 分发不仅要要从cooike 中读server id, 还要从url 的参数里面读server id
分享到:
相关推荐
swfupload多文件上传带进度条实例,vs2012开发,net4.0框架,可上传多个文件,上传类型、上传大小、上传数量可控,已测试成功!
swfupload上传文件 上传js使用
SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 * 可以同时上传多个文件; * 类似AJAX的无...
SwfUpload Ext.Net
SWFUpload 异步文件上传 js插件
尽管在web.config文件中设置了maxRequestLength为很大,但还是不能上传大于2M的文件. 所有后来研究了下上传相关知识, 发现swfupload是一个不错的选择. 所以做了一个demo, 分享给大家. 特色: 1)利用javascript+flash...
swfupload 上传 多文件 java 支持多文件上传,只需要在配置文件配置正确即可,后台是,struts2
swfupload 异步上传文件,支持进度条上传
SwfUpload多文件上传 struts1实现控制层
swfupload+ajax实现多文件上传下载删除并将上传文件上传到数据库 带数据库脚本,可以作为单独的上传控件使用,这是在公司要求下开发的上传下载控件
swfUpload上传文件图片(多图片); 导入myeclipse直接运行即可;可扩展;
SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 SWFUpload的主要特点 * 可以同时上传多个...
示例采用swfupload和servlet实现文件的上传下载功能
SwfUpload文件上传demo
swfupload asp版 asp上传大文件,批里上传 上传速度很快,带进度条!!
swfupload多文件上传swfupload多文件上传swfupload多文件上传swfupload多文件上传swfupload多文件上传swfupload多文件上传swfupload多文件上传swfupload多文件上传
SWFUpload多个超大文件上传,可传递参数
最新swfupload文件上传,所用技术swfupload:flash+js
不支持文件自动重命名,上传的文件如果有同名的将提示“上传失败” 不支持中文文件名,上传文件包含中文文件名将自动删去中文字符(我尝试修改源文件中文件名的正则表达式,但是保存文件名出现了乱码,所以放弃了) ...
swfupload多文件上传并带有进度条,实现多文件的上传。显示上传文件的大小