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

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