BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ScaleUpがIISのファイルアップロードに関する多くの制限を緩和する

ScaleUpがIISのファイルアップロードに関する多くの制限を緩和する

ブックマーク

原文(投稿日:2010/05/05)へのリンク

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を使用しており、既存のアプリケーションを修正することなく使うことができたのだという。

この記事に星をつける

おすすめ度
スタイル

BT