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 的 CTO Mike Volodarsky 对 ScaleUp 的工作方式做出了说明:
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
评论