Старт-AzureStorageBlobCopy vs AzCopy: какой из них занимает меньше времени


Мне нужно переместить VHD из одной подписки в другую. Я хотел бы знать, какой вариант лучше для того же самого: Start-AzureStorageBlobCopy или AzCopy?

Какой из них занимает меньше времени ?

5 4

5 ответов:

Оба они займут одинаковое время, поскольку все, что они делают, - это инициация Async Server-Side Blob Copy. Они просто говорят службе начать копирование blob-объекта из источника в пункт назначения. Фактическая операция копирования выполняется службой хранилища Blob-объектов Azure. Время, которое потребуется для копирования большого двоичного объекта, будет зависеть от ряда факторов, включая, но не ограничиваясь ими:

  • место источника и назначения.
  • размер исходного большого двоичного объекта.
  • нагрузка на службу хранения.

Запуск AzCopy без указания параметра / SyncCopy и запуск команды PowerShell Start-AzureStorageBlobCopy должны занимать одинаковое время, так как они оба используют асинхронное копирование на стороне сервера.

Если вы хотите копировать большие двоичные объекты по регионам, вам лучше указать параметр / SyncCopy во время выполнения AzCopy, чтобы достичь согласованной скорости, потому что асинхронное копирование данных будет выполняться в фоновом режиме серверов, которые, как было сказано, могут быть несовместимыми. скорость копирования среди ваших операций "копирования".

Если указан параметр / SyncCopy, AzCopy сначала загрузит содержимое в память, а затем отправит его обратно в хранилище Azure. Для повышения производительности /SyncCopy предполагается запускать AzCopy в виртуальной машине, регион которой совпадает с исходной учетной записью хранения. Кроме того, размер виртуальной машины (который определяет пропускную способность и число ядер процессора), вероятно, также повлияет на производительность копирования.

Для получения дополнительной информации, см. раздел Начало работы с программой командной строки AzCopy

Они не занимают одно и то же время.

Я пытался скопировать с одного счета на другой и получил огромную разницу.

Start-AzureStorageBlobCopy -SrcBlob $_.Name -SrcContainer $Container -Context $ContextSrc -DestContainer $Container -DestBlob $_.Name -DestContext $ContextDst --Verbose

Это занимает около 2,5 часов.

& .\AzCopy.exe /Source:https://$StorageAccountNameSrc.blob.core.windows.net/$Container /Dest:https://$StorageAccountNameDst.blob.core.windows.net/$Container /SourceKey:$StorageAccountKeySrc /DestKey:$StorageAccountKeyDst /S

Это занимает несколько минут.

У меня здесь около 600 Мб и около 7000 файлов.

Elapsed time:            00.00:03:41
Finished 44 of total 44 file(s).
[2017/06/22 17:05:35] Transfer summary:
-----------------
Total files transferred: 44
Transfer successfully:   44
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:00:08
Finished 345 of total 345 file(s).
[2017/06/22 17:06:07] Transfer summary:
-----------------
Total files transferred: 345
Transfer successfully:   345
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:00:31
Кто-нибудь знает, почему все так по-другому?

Пример предложения ОАС, который асинхронного ксерокопии не хватает. Пример предназначен для обеспечения оптимальной производительности. Используйте параметр / SyncCopy, чтобы получить согласованную скорость копирования.

В большинстве сценариев AzCopy, вероятно, будет быстрее, чем Start-AzureStorageBlobCopy из-за способа инициирования копирования, что приведет к меньшему количеству вызовов API Azure:

  • [AzCopy]1 вызов для всего контейнера (независимо от количества blob-объектов)

Vs

  • [Start-AzureStorageBlobCopy] N количество вызовов из-за количества больших двоичных объектов в контейнере.

Первоначально я думал, что это будет то же самое, что и оба, по-видимому, запускают одни и те же асинхронные копии на стороне Azure, однако на стороне клиента это будет непосредственно видно как нашел в своем ответе @ Евгений.

В сценарии 1 blob в контейнере теоретически обе команды будут завершены одновременно.

*EDIT (возможный обходной путь): я смог значительно сократить свое время:

  1. удаление вывода консоли и
  2. используя переключатель -ConcurrentTaskCount, установите значение 100 в моем случае. Сократите его до менее чем 5 минут сейчас.