Почему загрузка из BLOB-объектов Azure занимает так много времени? - PullRequest
4 голосов
/ 08 сентября 2011

В моей веб-роли Azure OnStart() Мне нужно развернуть огромную неуправляемую программу, от которой зависит роль.Ранее программа сжималась в ZIP-архив размером 400 мегабайт, разбивалась на файлы по 20 мегабайт каждый и загружалась в контейнер для хранения больших двоичных объектов.Эта программа не меняется - после загрузки она может оставаться такой же целую вечность.

Мой код выполняет следующие действия:

CloudBlobContainer container = ... ;
String localPath = ...;
using( FileStream writeStream = new FileStream(
             localPath, FileMode.OpenOrCreate, FileAccess.Write ) )
{
     for( int i = 0; i < blobNames.Size(); i++ ) {
         String blobName = blobNames[i];
         container.GetBlobReference( blobName ).DownloadToStream( writeStream );
     }
     writeStream.Close();
}

Он просто открывает файл, затем записывает в него частиодним.Прекрасно работает, за исключением того, что это занимает около 4 минут при запуске от одного ядра (очень маленький) экземпляр.Что означает среднюю скорость загрузки около 1,7 мегабайт в секунду.

Это меня беспокоит - кажется, слишком медленно.Должно ли это быть так медленно?Что я делаю неправильно?Что я мог сделать вместо этого, чтобы решить мою проблему с развертыванием?

Ответы [ 3 ]

6 голосов
/ 08 сентября 2011

В дополнение к тому, что сказал Ричард Эстбери: Экземпляр Extra Small имеет очень небольшую долю пропускной способности, которую дает даже Small.Вы увидите ок.5 Мбит / с на очень маленьком и ок.100 Мбит / с для малого (от малого до очень большого - около 100 Мбит / с на ядро).

3 голосов
/ 08 сентября 2011

Очень маленький экземпляр имеет ограниченную производительность ввода-вывода. Вы пробовали пойти на сравнительный экземпляр среднего размера?

0 голосов
/ 08 сентября 2011

В некоторых специальных тестах, которые я проводил в прошлом, я обнаружил, что нет никакой заметной разницы между загрузкой 1 большого файла и попыткой параллельной загрузки N меньших файлов. Оказывается, что пропускная способность сетевого адаптера обычно является ограничивающим фактором, независимо от того, что и что большой файл будет так же легко насыщать его, как и многие меньшие. Обратное не верно, кстати. Вы получаете выгоду, загружая параллельно, а не по одному за раз.

Причина, по которой я упоминаю об этом, заключается в том, что вы, похоже, должны использовать здесь 1 большой zip-файл и что-то вроде Bootstrapper . Это будет 1 строка кода, которую вы сможете скачать, распаковать и, возможно, запустить. Более того, он не будет делать это более одного раза при перезагрузке, если вы не заставите это сделать.

Как уже правильно отметили другие, пропускная способность сетевого адаптера в экземплярах XS значительно меньше, чем даже в экземпляре S. Вы увидите намного более быструю загрузку, немного увеличив размер виртуальной машины.

...