ScaleUp 解除了大量 IIS 的文件上传限制

  • Abel Avram
  • 侯伯薇

2010 年 5 月 23 日

话题:.NET语言 & 开发架构

LeanServer公司创建了名为ScaleUp的 IIS 7.0 的扩展程序,它解决了与文件上传相关并且困扰微软 web 平台的一些问题。 据它的作者所说,ScaleUp 提高了上传速度、支持不受限的上传文件大小,将每台服务器同时支持的上传数提升到上千个,并且包含了进度报告、流传输和过滤等等。

一直以来,ASP 和 ASP.NET 在上传文件方面都存在问题。 最开始的时候,开发者无法从 POST 信息中提取文件,除非他编写了自定义的代码来解析 post 并取得文件的数据。 ASP.NET 引入了 FileUpload 控件,它会同步地将 POST 数据载入到内存中,解析数据以从中提取文件,然后将其存储在磁盘上,从而提升了上传的效率。 这个解决方案有很多问题,最严重的就是它对内存的快速分块会导致 OutOfMemory 异常,因为在传送到磁盘之前,整个文件都会被放在内存中。 ASP.NET 2.0 做出了更多的改善,包括磁盘缓冲方法,这会将任何超过 80KB 的文件都存储到磁盘上。 然而,还是存在一些限制:

  • 上传的文件最大只能有 2GB(ASP.NET),或者 4GB(IIS)
  • 每个上传都会使用一个线程,这导致线程数量紧张
  • 磁盘缓冲对性能有很严重的负面影响
  • 无法以流模式上传,并且没有进度报告

ScaleUp 声称解决了上述所有问题。 框架的特性可以保证:

  • 更快地上传,会是原有速度的 20 倍
  • 对上传文件的大小没有限制
  • 每台服务器同时可以上传上千个文件
  • 提供了进度报告、流传输和过滤的特性
  • 跨服务器对上传过程的企业级性能监控

之前微软 IIS 的 PM,同时也是现在 LeanServer 的 CTOMike VolodarskyScaleUp 的工作方式做出了说明:

ScaleUp 的秘密在于它使用 IIS 7.0 的本地扩展层,用它自己的高性能的预载入引擎替换了 IIS 平台的上传处理程序。 这使得它可以解除之前存在的上传限制,同时允许所有现存的与 IIS 兼容的应用程序可以处理 web 上传,而不需要在应用程序中做任何本质性的改变。

ScaleUp 上传引擎的核心支持完全地异步请求预载入(asynchronous request preload),这解决了线程紧张的问题,并且让我们能够完全利用当前的服务器所提供的多核优势。

整个引擎在读取网络数据、解析多部分 / 格式数据上传、流模式实体过滤以及磁盘存储方面都完全是异步的。 在内部,我们会使用高级 Windows 性能技术,像异步无缓存的 IO、高级缓冲区管理以及很多书中可以极大提升上传流量,并降低服务器上的资源使用量的 IIS7.0 技巧。

当前 ScaleUp 已经被 MySpace 使用,来处理每天两千五百万次上传,他们说在安装了 IIS 扩展之后,已经减少了上传服务器的数量。 ScaleUp 可以用在 ASP、ASP.NET 和 PHP 应用程序中,并且能够用在现存的应用程序中而不需要修改。

查看英文原文:ScaleUp Addresses Many of IIS’ File Uploading Limitations

.NET语言 & 开发架构