关于并发文件上传的设计

1,系统端对外暴露API层,使用SpringMVC来设计,协议是HTTP。

当大量文件需要上传时,考虑到互联网传输的这一段速度是比较慢的,例如同时有

A,B,C,D,E,F,G    这几个Client在传输,如果每个都耗时10S

那么显而易见,这些client的连接都在保持住10S时间。这个本身没有任何问题,问题出现在下面

2,在1的前提下,如果API层后面,将文件传输到DFS采用的是同步机制,如下链路:

A(client)------>API---------->DFS     同步

那么不只是A到API这边要保持10S的连接,从API到DFS也将要同样保持10S的连接。

那么问题来了,如果DFS还要同时提供大量的读操作,而且几个简单的写操作一直这么占用连接“长达”10S

系统性能损失太大。解决方案如下

3,从客户端到API层无需太多修改,而是修改API到DFS这一段,从同步变为异步,即等待A client发送过来的数据完全弄完以后再一次性写入到DFS里面

当然这里面也需要有个地方需要选择,A client上来的文件先写到 API的内存?还是硬盘?还是别的存储?

API到DFS 采用线程池,还是额外起动进程扫描,还是通知进程扫描。。。。

要考虑的问题不少,但是总体思路已经解决!

时间: 2024-11-09 02:16:10

关于并发文件上传的设计的相关文章

怎样用PHP实现文件上传

在WebDev站点上经常看到的一个问题是关于文件上传的.在这篇文章里我将解释如何用PHP实现文件 上传. 设计上传表格 我们主要的目标是完成文件从本地计算机上传到服务器上去.为了做到这一点,我们需要做一个表 格,允许用户选择一个文件并可以提交它.下面是一个例子: <HTML> <HEAD> <TITLE>文件上传表格</TITLE> </HEAD> <BODY> <TABLE> <FORM ENCTYPE="

基于jquery的多文件上传

1.文件上传前台设计 说到前台设计,还真的有些不知道怎么讲好,还是老样子,直接上图来的直接,在此也说明下:本人不擅长做PS,所以很多素材(图片)都是网上寻找的,这个上传程序可以上传各种文件,至于哪些?我没数过,我不介意你数一数,我就用简单的图片上传来演示吧,附带预览功能. 还没有上传的时候的界面(有点丑,莫嫌弃) 要开始上传时: 这个时候鼠标上移的时候,可以对文件进行操作(删除掉误选的照片和查看文件名) 上传时的图片(由于本人是用js模拟上传,所以上面的总的进度条不会动,完整的程序完全没有问题)

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

统一通用文件上传、下载、预览、编辑组件设计

一直以来,无数个项目有这样的需求,然而每个项目做起来都自己开发一套,于是想自己设计实现这样一个组件,实现文件的统一存储. 上传.下载.预览.编辑功能,接口统一,对开发人员完全透明.思路如下: 1.采用统一数据库存储文件元数据信息,文件与业务数据关联信息 2.集成uploadify.Huploadify,html5和flash双内核文件上传 3.集成weboffice,word文档在线编辑 4.集成flexpaper.pdfjs, html5和flash双内核word文档在线查看 5.集成flow

JavaScript File API应用——如何设计和实现文件上传组件

(1)精简"带进度条文件上传组件"的设计与实现 XMLHttpRequest第二版为我们提供了便利的progress事件,通过为xhr.upload.onprogress指定处理函数,可以快速制作进度条,JQuery插件参考代码如下: (function($) { $.fn.uploader = function(userOptions) { var options = { id : "uploader", url : "uploadAction.acti

PHP设计超级好用的文件上传处理类一 (37)

<?php class FileUpload { private $filepath; //指定上传文件保存的路径 private $allowtype=array('gif', 'jpg', 'png', 'jpeg'); //充许上传文件的类型 private $maxsize=1000000; //允上传文件的最大长度 1M private $israndname=true; //是否随机重命名, true false不随机,使用原文件名 private $originName; //源文

【原创】用JAVA实现大文件上传及显示进度信息

用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息. 而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息. 优点:使用框架内置对象可以很方便的

Webwork 学习之路(七)文件上传下载

Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现,在本篇博文中总结记录如下. 1. 包装 Request 请求 每次客户端请求 Action 时,都会调用 WebWork 调度类 ServletDispatcher.service()方法. 具体过程请参照: http://www.cnblogs.com/java-cl

文件上传控件-如何上传文件-文件夹层级结构

4GB以上超大文件上传和断点续传服务器的实现 随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的PHP或者Java程序来实现基本的上传功能,然而在实际使用中会发现,这些基于脚本语言实现的上传功能模块性能很弱,一是不支持2GB以上的内容上传:二是无法支持断点续传:三是效率极低,单台服务器最多支持几十个并发上传连接. 当前我们要搭建一个运营级的视频服务