0

主にJavaScriptで構成されたWebサイトが1つあります。IISでホストしました。このWebサイトは、ハードディスク上の特定のフォルダーからの画像を要求し、それらをエンドユーザーに表示します。画像のリクエストは非常に頻繁で高速です。

このディスク読み取り操作のオーバーヘッドを減らす方法はありますか?

ハードディスクの一部をマッピングしてプライマリメモリとして使用するメモリマッピングについて聞いたことがあります。誰かが私が間違っているか正しいかを教えてもらえますか、私が正しい場合、これを行うための手順は何ですか。私が間違っている場合、これに対する他の解決策はありますか?

4

2 に答える 2

1

メモリマッピングは実行可能なアイデアですが、memcachedを使用することをお勧めします。これは別個のプロセスとして実行され、水平スケーリングを可能にし、最も要求の厳しいWebサイトのいくつかで試行およびテストされ、アクティブに展開されます。適切に実装されたmemcachedサーバーは、ディスクアクセスを大幅に減らすことができます。

また、インターネット上の言語を含む多くの言語のバインディングもあります。Javaのソリューションが必要だと思います(ほとんどのタグはその言語に関連しています)。インストールおよびその他の管理タスクについては、この記事をお読みください。また、開始できるコードサンプル(Java用)もあります。

擬似コードの用語では、たとえば、Moon.jpegのリクエストを受け取ったときに実行する必要があるのは、次のとおりです。

String key = md5_hash(Moon.jpeg); /* Or some other key generation mechanism */
IF key IN memcached
   SUPPLY FROM memcached /* No disk access */
ELSE
   READ Moon.jpeg FROM DISK
   STORE IN memcached ASSOCIATED WITH key
   SUPPLY
END

これは非常に大雑把なアルゴリズムです。キャッシュアルゴリズムの詳細については、このWikiの記事を参照してください。

于 2012-03-22T05:04:23.513 に答える
0

間違った方向。IOを低速ディスク(相対)に減らしたい。ファイルを物理メモリにマップする必要があります。単純なシナリオでは、OSはファイルキャッシュを使用してこれを自動的に処理します。Windowsが調整可能なパラメーターを提供しているかどうかを確認するか、少なくとも収集できるパフォーマンスメトリックを確認できます。

私が正しく覚えている場合(数年前)、IISはIISにリンクされたカーネルルーティングドライバーにより静的ファイルを非常に効率的に処理しますが、それがさらにISAPIフィルターなどを通過しない場合に限ります。これに関連する情報はChannel9などでおそらく見つかります。

長期的には、静的アセットをCloudFrontなどのCDNに移動することを検討する必要があります。

他の問題と同じように...問題がありますか?

于 2012-03-22T05:03:52.957 に答える