LeanServerが、ファイルアップロードやMicrosoftのWebプラットフォームを苦しめているいくつかの問題を解決するため、ScaleUpというIIS 7.0の拡張機能を作成した。作者によれば、ScaleUpはアップロードの高速化、無制限のアップロードファイルサイズのサポート、1サーバ当り数千アップロードへのスケールアップ、進捗状況のレポート、ストリーミング、フィルタリングなどを提供する。
ASPやASP.NETはファイルアップロードについて、長い間いくつかの問題を抱えている。当初、POSTメッセージをパースして、ファイル情報を取得するためのカスタムコードを書かないと、POSTメッセージからファイルを取り出すことができなかった。ASP.NETではFileUploadコントロールが導入された。このコントロールは、同期的にPOSTデータをメモリにロードし、データをパースしてファイルを取り出し、それをディスクに保存することによって、ファイルアップロードプロセスを改善した。だが、これにはいくつかの問題があった。最も深刻なものは、すぐにメモリがフラグメント化してしまい、OutOfMemoryExceptionにつながる可能性があることだ。なぜなら、ファイルがディスクに保存される前に、全てのファイルのデータが一度メモり上に保持されるからだ。ASP.NET 2.0では、80KBを超えたアップロードデータをディスクに保存していく、ディスクバッファリングオプションを導入することで、更なる改善が図られた。だが、まだいくつかの制限があった。
- アップロードファイルの最大サイズが2GB(ASP.NET)、もしくは4GB(IIS)だった。
- 1アップロードに対して1スレッド割り当てられていた。これは、スレッド不足を引き起こす。
- ディスクバッファリングはパフォーマンスに深刻な悪影響を及ぼした。
- アップロードはストリームにできず、進捗状況のレポートもなかった。
ScaleUpはこれらの問題を全て解決する。このフレームワークが提供するのは、次のような機能だ。
- 高速なアップロード(最大20倍)
- 無制限のアップロードサイズ
- サーバ当り同時に数千のアップロードができるようにスケールアップ
- 進捗状況のレポート、ストリーミング、フィルタリングといった機能
- 各サーバのアップロードプロセスのパフォーマンス監視
かつてMicrosoftでIISのPMを務めており、現在はLeanServerのCTOであるMike Volodarsky氏は、ScaleUpがどのように動作するのかをこのように話している。
ScaleUPの秘密は、独自のハイパフォーマンスプレロードエンジンを使ってアップロード処理を完全に置き換えるため、IIS 7.0のネイティブ拡張レイヤを使っていることです。これは、既存のアップロード処理制限を取り除くことを可能にします。また、既存のIIS互換のアプリケーションを変更せずに、アップロード処理を行えます。
ScaleUPのアップロードエンジンの中心は、完全な非同期リクエストプレロードです。これはスレッド不足を解消し、今日のサーバが備えているマルチコアの力を活用することができます。
このエンジンは、ネットワークデータの読み込み、アップロードされたデータのパース、ストリーミングエンティティフィルタ、ディスクストレージに対して完全に非同期です。内部的には、非同期アンバッファIOのような高度なWindowsのパフォーマンス技術や高度なキャッシュ管理、アップロードのスループットを向上させ、サーバのリソース消費を提言するための、IIS 7.0のありとあらゆるトリックを活用しています。
現在、ScaleUpはMySpaceで使われており、1日で2500万回のアップロードを処理している。IIS拡張をインストールした後は、アップロードサーバの数を削減したそうだ。また、ASP、ASP.NET、PHPアプリケーションでScaleUpを使用しており、既存のアプリケーションを修正することなく使うことができたのだという。