Enabling Fast, Reliable, and Super-Scalable Uploads in ASP.NET, ASP, and PHP applications

Uploads have always historically been a major pain point for web applications, due to poor performance, spotty reliability, and framework-specific limitations. As more and more websites rely on social networking, user generated content, and in general storing data in the cloud, the ability to support reliable and scalable uploads is rapidly becoming more critical than ever.

After working with many clients to help solve these problems, LeanServer is announcing ScaleUP - a breakthrough web upload solution for the Microsoft IIS platform that finally enables fast, reliable, and super-scalable HTTP uploads to any web application.

Making uploads work

We designed ScaleUP to power uploads in some of the largest web sites in the world – such as myspace.com’s media farm that handles over 25M photo, song, and video uploads a day – while significantly reducing server costs.

ScaleUP is unique in that it is able to fundamentally replace the platform’s upload process, enabling upload reliability and scalability characteristics that existing upload managers simply could not attain.

As a result, ScaleUP allows any existing ASP.NET, ASP, PHP, or other IIS 7.0 compatible application to achieve:

  • Up to 20x faster upload speeds [1]
  • Reliable uploads of unlimited size (4Gb+)
  • Reduced application impact (no thread starvation, lower disk usage, etc)
  • Scaling to THOUSANDS of active uploads on a single server
  • Full support for streaming, filtering, server-side progress reporting, and other common upload features [1]
  • Transparent support for ASP, ASP.NET, PHP, and any other IIS 7.0-compatible application (regardless of framework upload limitations)

To make this happen, we had to fundamentally redesign the platform’s upload process, leveraging the IIS 7.0 low level extensibility layer to handle request uploads with our own high-performance upload engine.

Here are some of the challenges that ScaleUP addresses:

Upload thread starvation. Uploads block application threads, causing thread starvation and destroying application performance at even medium load. This affects any application, be it ASP, ASP.NET, PHP, or even an IIS 6.0 ISAPI extension – and any third party upload manager built for ASP.NET or previous versions of IIS.

Upload size limitations. Uploads on ASP.NET/IIS have been limited to 2Gb/4Gb, and typically much less due to resource impact of handling large uploads.

Severely limited scalability. Thread starvation and heavy resource impact of handling uploads today prevents handling more than a small number of active uploads per server. In production, many sites quickly experience dropping upload speeds, quickly followed by errors and timeouts.

Making it work for any existing application. We wanted to provide excellent upload support to any existing ASP.NET, ASP, PHP or other IIS 7.0 compatible application, regardless of framework-specific limitations, and without cumbersome browser plugins.

You can read more about these challenges, and the history of the upload support in the Microsoft web platform, in my Brief History of Web Uploads post.

Definitely check out the results for yourself on www.leanserver.com/scaleup. Here are a few excerpts from some of our load tests, showing ScaleUP scaling to 5,000 active uploads while delivering up to 20x faster sustained upload speeds and completely eliminating application instability.

ScaleUP enables up to 20x faster sustained upload speeds
ScaleUP delivers more than 20x upload speeds while scaling to 1K uploads [1]

ScaleUP improves application reliability by eliminating upload-caused thread exhaustion
ScaleUP helps keeps application response times healthy all the way to 5,000 active uploads [2]

Why it works

There are dozens of available upload IIS and ASP.NET upload components that provide upload processing features, and client plugins that support progress reporting and retries, but neither could previously address the core upload limitations imposed by the platform. All of these components receive uploads from the ASP.NET or IIS API, which imposes the aforementioned performance limitations.

The secret behind ScaleUP is its use of the IIS 7.0’s native extensibility layer to completely replace the platform’s upload handling with its own high-performance preload engine. This allows it to eliminate the pre-existing upload limitations, while allowing any existing IIS-compatible application to handle web uploads with virtually no application changes.

At the heart of ScaleUP’s upload engine is fully asynchronous request preload, which eliminates thread starvation and enables us to fully take advantage of multi-core power provided by today’s servers.

The entire engine is fully asynchronous from reading network data, to parsing multipart/form-data uploads, streaming entity filters, and disk storage. Internally, we use advanced Windows performance technologies like async unbuffered IO, advanced cache management and pretty much every IIS 7.0 trick in the book to significantly boost upload throughput, and reduce resource usage on the server.

ScaleUP's Architecture

This architecture allows us to handle hundreds of uploads without using more than a few threads, and completely isolate the impact of large, slow, or many uploads from the application. The result is a lot faster and more reliable uploads, and a lot less application impact.

In addition to performance, ScaleUP is designed to be flexible and facilitate many common upload processing scenarios including progress reporting, streaming, filtering, and so on.

We are currently making ScaleUP commercially available to a limited number of customers, to make sure we can work closely with them in deploying ScaleUP and observe its impact. To learn more, see more performance results, and evaluate it for your application, check out http://www.leanserver.com/scaleup.

This marks the first public release of one of our performance tools, and we are going to be making more publicly accessible shortly. If you are interested in learning what betas we have going on now – or have a tough scalability problem you’d like solved - let us know on http://www.leanserver.com/.

Best Regards,

Mike Volodarsky
Founder/CTO
LeanServer



[1] Streaming and filtering currently available only in .NET.
[2] Simulated load test involving 3Mb, 50Mb, 200Mb, and 1Gb uploads and application requests, performed on a DELL PowerEdge T300 with 16Gb of RAM and 2Gbit dedicated test network.
[3] Simulated load test involving 3Mb uploads and application requests, performed on a DELL PowerEdge T300 with 16Gb of RAM and 2Gbit dedicated test network.

Published 04 May 10 05:39 by Mike Volodarsky

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# IIS 7.0 Server-Side : Brief History of Web Uploads said on May 4, 2010 5:43 PM:

PingBack from http://mvolo.com/blogs/serverside/archive/2010/05/04/Brief-History-of-Web-Uploads.aspx

# LeanServer Official Blog said on May 4, 2010 5:46 PM:

Tools for a leaner web

# LeanServer Official Blog said on May 4, 2010 5:50 PM:

Tools for a leaner web

# mako said on May 5, 2010 4:28 AM:

Nice approach to solve the upload problem. Currently I'm working on some public project where I use async processing of file upload (and the file processing). To achive the goal I use a custom architecture (Three tier architecture based on MVP design pattern).  My question is that how Scale UP software would be scalable to be used in such architecture? I mean that I want to divide the business logic, from View. For example, I want to process file saving and other related operatios in business logic not in the View layer. Thx in advance.

# Mike Volodarsky said on May 5, 2010 12:05 PM:

Hi Mako,

First and foremost, ScaleUP will enable much more efficient preload of the upload, eliminating this process as a bottleneck for your application.

Second, you can also chose to process the file asynchronously as it is preloaded using ScaleUP's asynchronous streaming support, instead of having to do it after the upload has completed (which is the way you have to do it now). This can reduce the processing time and in some cases dramatically reduce resource overhead of file upload processing (e.g. if you dont end up saving the file to disk).

Regards,

Mike

# mako said on May 5, 2010 2:28 PM:
Thx for the answers. Is there a trial version of ScaleUp? (And how can I get it if there is )
# Mike Volodarsky said on May 5, 2010 4:15 PM:

Definitely, send us an evaluation request on www.leanserver.com/scaleup/eval.

You can also read more about the features and functionality on www.leanserver.com/scaleup.

The evaluation package includes detailed docs and samples for adding ScaleUp to existing apps.

Regards,
Mike

# Ed said on September 10, 2010 10:52 AM:
I have sent in a request for a trial version on leanserver.com and have not had any response. We are very interested in evaluating this product for use in our applications. Are you still answering requests for trial version on the website?
# Mike Volodarsky said on September 14, 2010 3:07 AM:

Hi Ed,

Sorry about that.  We are still accepting requests, please shoot us a mail at scaleup@leanserver.com or use the online evaluation request form at www.leanserver.com/scaleup.

Regards,

Mike

# said on February 21, 2011 2:15 PM:

scaleup sounds really impressive, the graphs seem to indicate that scaleup really dominates the competition. well done, can't wait to test it out.

# said on April 29, 2011 4:46 AM:

Chaussures Nike Sale: http://www.maxpascher.com

Leave a Comment

(required) 
(optional)
(required) 
Enter the code you see below


About Mike Volodarsky

For the past 5 years, I was the core Program Manager for Microsoft ASP.NET 2.0 and IIS 7.0 products. I drove the design and development of the IIS 7.0 web server core, the IIS FastCGI support, the AppCmd command line tool, the ASP.NET Integrated pipeline, and other special projects around server security, performance, and scalability. Now, I am working on my own on cutting edge web server tech on top of the Microsoft IIS platform, and continue blogging about it here.

About me



Until 2008, I was the core server Program Manager for the IIS 7.0 and ASP.NET 2.0 products at Microsoft.


View Michael Volodarsky's profile on LinkedIn


This is my company. We build expert performance and scalability tech for web applications on the Windows Server stack.
LeanServer Sentinel: Explore and instantly diagnose your production ASP.NET applications Sentinel beta starts on August 3rd! Register now!


Writings



TechNet Magazine
>Top 10 Performance Improvements in IIS 7.0

MSDN Magazine
>IIS 7.0: Build Web Server Solutions with End-To-End Extensibility
>IIS 7.0: Enhance Your Apps with the Integrated ASP.NET Pipeline
>IIS 7.0: Explore The Web Server For Windows Vista And Beyond
>Design and Deploy Secure Web Apps with ASP.NET 2.0 and IIS 6.0
>Fast, Scalable, and Secure Session State Management for Your Web Applications


Tools and Modules

LeechGuard
IconHandler 2.0
DirectoryListing
HttpRedirection
IIS Auth for Wordpress
iisschema.exe
PortCheck.exe v2.0

Popular Posts

- ASP.NET 2.0 Breaking Changes on IIS 7.0
- Develop IIS7 modules and handlers with .NET
- Troubleshoot IIS7 errors like a pro
- Troubleshooting 503 / "service unavailable" errors
- Troubleshooting "server not found" errors
- Create IIS7 sites, applications, and virtual directories
- Run Ruby on Rails with IIS FastCGI
- VS Debugging of ASP.NET applications on Windows Vista
- Stop hot-linking with IIS and ASP.NET

Tags

Search

Go

This Blog

Archives

Good IIS Blogs

Disclaimer

These postings are provided as is with no warranties, and confer no rights. The views expressed in this blog are entirely my own.

Syndication