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

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

Advertisements
This entry was posted in ASP.NET. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s