最近的项目中遇到一个奇怪的问题, 我们的文件上传完了之后, 有一个非常大的几率不能够马上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 是一款开源的Flash上传组件,它允许用户在网页上实现多文件上传功能,尤其适用于需要大文件上传或批量上传的场景。这个技术在Web开发中被广泛应用,因为它可以提供比传统HTML表单上传更好的用户体验。...
SWFUpload 是一款开源的JavaScript库,专门用于在网页上实现文件的多选上传,并且支持显示上传进度条,为用户提供更好的交互体验。在这个实例中,我们将探讨如何在VS2012环境下,使用.NET Framework 4.0开发一个基于...
在C# ASP.NET环境中,确保正确处理Multipart/FormData请求是非常重要的,因为这是SwfUpload上传文件所采用的格式。后端代码需要解析这些数据,提取出文件内容并保存到合适的目录下。同时,考虑到安全性,需要对上传...
在IT行业中,文件上传是Web应用中常见的功能之一,尤其在处理大量数据时,批量上传可以显著提高用户效率。"swfupload"是一个流行的JavaScript和Flash混合的文件上传组件,它允许用户实现多文件批量上传。本文将详细...
5. **异步上传**:基于Flash的异步上传方式,使得文件上传不影响用户浏览其他页面,提高了用户体验。 ## 三、使用步骤 1. **引入资源**:首先在HTML页面中引入SWFUpload的JavaScript文件和Flash SWF文件。 2. **...
5. **文件队列管理**:SwfUpload 支持文件队列,用户可以选择多个文件后一次性上传,也可以按需控制文件的上传顺序和取消上传。 **Java 后端处理** 在Java后端,我们需要处理SwfUpload发送的HTTP请求。由于...
在ASP环境中,SWFUpload 可以很好地解决传统ASP上传文件时遇到的大小限制和性能问题。 首先,我们要理解SWFUpload的工作原理。它利用了Adobe Flash技术来绕过浏览器对文件上传大小的限制,因为Flash插件允许上传更...
- **前端验证**:在客户端就能限制上传文件的类型和大小,减轻服务器压力。 - **文件队列**:支持批量上传,文件按队列顺序逐一上传。 - **事件接口**:提供了丰富的事件接口,便于开发人员根据上传进度更新UI、...
SwfUpload 使用Flash插件作为上传的媒介,因为Flash支持文件分块上传和处理大文件的能力,这使得在浏览器环境中实现文件上传进度跟踪成为可能。JavaScript与Flash之间的通信通过ExternalInterface接口实现,...
9. **安全性考虑**:在实现SwfUpload时,必须考虑到安全问题,如防止文件类型攻击、大小限制以防止DoS攻击,以及验证上传文件的来源和内容。 10. **错误处理**:在可能出现错误的地方,如网络中断、文件过大、...
SWFUpload是一个开源的JavaScript库,它允许网页在不依赖Flash插件的复杂交互下实现文件上传功能。这个工具在Web开发中尤其有用,因为它提供了一种方式来处理大文件上传,同时支持多文件选择、进度条显示以及预览...
在实际项目中,通过合理的配置和事件处理,可以轻松实现如"swfUpload上传文件图片(多图片)"这样的需求。在使用SwfUpload时,确保正确引入资源、配置参数并处理好上传过程中的各种事件,就能为用户提供一个高效、...
SWFUpload 使用Flash作为后台上传引擎,因为Flash在当时几乎在所有主流浏览器中都得到了广泛支持,能提供跨平台的兼容性。虽然现在HTML5的File API已经能够实现类似的功能,但SWFUpload仍对一些旧版本的浏览器具有...
SWFUpload通过切割大文件为较小的块来解决这个问题,这些小块可以逐个上传,然后在服务器端进行重组。 首先,我们需要在网页中集成SWFUpload库。这通常涉及到在HTML页面中嵌入SWFUpload的JavaScript和Flash组件。...
`swfupload`是一个流行的JavaScript库,它结合了Flash技术,使得在浏览器端实现高级文件上传功能成为可能。结合Ajax技术,我们可以创建无刷新的用户体验,进一步提升用户交互性。本教程将详细介绍如何利用`swfupload...
SWFUpload是一个开源的Flash组件,它允许网页在不依赖浏览器特定控件(如IE的ActiveX或Firefox的NPAPI插件)的情况下实现文件的上传功能。这个技术结合了Flash的广泛兼容性和JavaScript的灵活性,使得文件上传在多种...
SWFUpload 是一款著名的文件上传组件,尤其在Web开发中被广泛应用。它巧妙地结合了Flash技术和JavaScript,为用户提供了一种高效、用户友好的多文件上传解决方案。在本文中,我们将深入探讨SWFUpload的工作原理、...
SWFUpload是一个流行的JavaScript库,专门用于在网页上实现文件上传功能。它利用Flash技术来克服HTML表单上传文件时的一些限制,如无法多文件选择和进度显示等。本篇文章将深入探讨SWFUpload的工作原理、使用方法...
SWFUpload是一个开源的Flash组件,它允许用户在后台无刷新的情况下进行文件上传,特别适用于大文件上传,同时提供了进度条显示,提升了用户体验。 首先,我们需要了解SWFUpload的工作原理。SWFUpload是基于Adobe ...
用户选择文件后,SwfUpload会将文件数据封装成HTTP请求发送到服务器,同时提供了进度条显示、取消上传、暂停和恢复上传等高级功能。"新增删除功能"可能是指SwfUpload在上传过程中允许用户取消选定的文件,提高上传...