1

私の Azure ロールは、合計約 700 メガバイトの一連のディレクトリとして出荷される巨大なネイティブ ライブラリに依存しています。ライブラリは、年に 1 回程度の更新です。現在の解決策は、ツリー全体を 1 つの .zip ファイルに圧縮してから、チャンクに分割して Blob Storage にアップロードすることです。ロール インスタンスが開始されると、チャンクが 1 つずつダウンロードされ、それらが順番に 1 つのファイルに保存され、元の .zip が復元されます。unzip次に、Info-ZIPプログラムを使用して .zip を解凍します。

現在、ダウンロードには約 25 秒かかりますが、解凍には 2 ~ 4 分かかる場合があり、十分な速度ではありません。unzip.exeプロセスごとのパフォーマンス カウンターを調べたところ、消費する CPU 時間は 25 % 以下であるように見えるため、I/O が重いことが問題である可能性があります。.zip をディスクから読み取る必要があり、抽出されたデータをディスクに書き込まれます。私は、より迅速な展開を可能にするライブラリをパック (およびアンパック) するための他のアプローチを探しています。

コードを Azure で実行するときにライブラリをできるだけ速く展開するには、どうすればライブラリをパックできますか?

4

2 に答える 2

1

長時間実行されるインストール (この場合は約 5 分ですが) は、VM ロールを使用する完全な理由です。カスタム イメージ (これらのライブラリを含む) を作成してアップロードし、そのイメージをインスタンスのイメージとして使用します。ドキュメントを見ると、運用環境の展開に VM ロールを使用しないでください - http://msdn.microsoft.com/en-us/library/windowsazure/gg433107

代替手段は Cloud Drive です。これは、インスタンスで NTFS ドライブとしてマウントするページ BLOB です。ここでの問題は、単一のインスタンスのみがクラウド ドライブをマウントできることです (複数のインスタンスは実際にはサポートされていません)。

私が提案すること:

  1. 必要なライブラリを含むローカル マシンに VHD を作成します。
  2. それをページ BLOB としてストレージ アカウントにアップロードします
  3. ネットワークの遅延を回避するためにすべてのファイルを保持できるように、キャッシュが十分な大きさであることを確認してください (詳細: CloudDrive.InitializeCache Method )
  4. インスタンスごとにスナップショットを作成し、そのスナップショットを Cloud Drive としてマウントします。これは、複数のインスタンスで「同じ」クラウド ドライブを使用できるようにするための回避策です。(詳細: CloudDrive.Snapshot メソッド)

別の解決策として、VHD を LocalResource にダウンロードし、diskpartを使用して(スタートアップ タスクで) マウントすることもできます。

注: VHD ファイルは、ファイルをパッケージ化する別の方法だと思います。

于 2012-07-30T10:31:51.143 に答える
0

25% の CPU は通常、ボックスに 4 つのコアがあり、そのうちの 1 つが 100% 使用されていることを意味します。通常、データの圧縮はシングルスレッドです。

だからあなたはCPUバウンドです。

各チャンクを個別に圧縮して、個別に解凍できます。そのように作業を分割すると、並列化が可能になります。これにより、おそらく 3 倍から 4 倍のスピードアップが得られます。

さらに高速化する必要がある場合は、QuickLZ などの高速な圧縮ユーティリティを探す必要があります。

于 2012-07-30T10:23:58.920 に答える