【问题标题】:Start-AzureStorageBlobCopy vs AzCopy: which one takes lesser timeStart-AzureStorageBlobCopy 与 AzCopy:哪一个需要更少的时间
【发布时间】:2018-06-02 08:01:03
【问题描述】:

我需要将 vhds 从一个订阅移动到另一个订阅。我想知道哪一个是更好的选择:Start-AzureStorageBlobCopyAzCopy

哪一个需要更少的时间?

【问题讨论】:

    标签: azure azure-storage azure-powershell


    【解决方案1】:

    他们两个都将花费相同的时间,因为他们所做的只是启动Async Server-Side Blob Copy。他们只是告诉服务开始将 blob 从源复制到目标。实际的复制操作由 Azure Blob 存储服务执行。复制 blob 所需的时间取决于许多因素,包括但不限于:

    • 来源和目的地位置。
    • 源 blob 的大小。
    • 加载存储服务。

    【讨论】:

    【解决方案2】:

    在不指定选项 /SyncCopy 的情况下运行 AzCopy 并运行 PowerShell 命令 Start-AzureStorageBlobCopy 应该花费相同的持续时间,因为它们都使用服务器端异步复制。

    如果您想跨区域复制 blob,最好考虑在执行 AzCopy 时指定选项 /SyncCopy 以实现一致的速度,因为数据的异步复制将在所说的服务器后台运行您可能会在“复制”操作中看到不一致的复制速度。

    如果指定了 /SyncCopy 选项,AzCopy 将首先将内容下载到内存,然后将内容上传回 Azure 存储。为了获得更好的 /SyncCopy 性能,您应该在其区域与源存储帐户相同的 VM 中运行 AzCopy。除此之外,VM 大小(决定带宽和 CPU 核心数)也可能会影响复制性能。

    更多信息,请参考Getting Started with the AzCopy Command-Line Utility

    【讨论】:

    • 很好解释。谢谢:)
    【解决方案3】:

    他们不会花费相同的时间。

    我尝试从一个帐户复制到另一个帐户,结果有很大差异。

    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 Mb 和大约 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
    

    有谁知道它为什么如此不同?

    【讨论】:

    • 这是一个有意义的比较。欣赏你的努力。我也很想知道原因。
    • 也许 MSFT 的某个人可以解释一下?
    • 两者之间的区别很可能是AzCopy 运行的是批量模式,而Start-AzureStorageBlobCopy 是串行运行,因为将 blob 逐个管道化,发送请求以启动传输。即Get-AzureStorageBlob | Start-AzureStorageBlobCopy。这意味着许多单独的网络请求会触发副本。目前尚不清楚Start-AzureStorageBlobCopy 是否可以接受像AzCopy 这样的批量数组传输。
    【解决方案4】:

    在大多数情况下,AzCopy 可能比Start-AzureStorageBlobCopy 更快,因为您启动复制的方式会减少对 Azure API 的调用:

    • [AzCopy]1 次调用整个容器(不考虑 blob 数量)

    • [Start-AzureStorageBlobCopy] 由于容器中的 blob 数量,调用了 N 次。

    最初我认为两者似乎会在 Azure 端触发相同的异步副本,但在客户端这将是直接可见的,正如@Evgeniy 在他的回答中发现的那样。

    在容器场景中的 1 blob 中,理论上两个命令会同时完成。

    *编辑(可能的解决方法):我能够通过以下方式大大减少我的时间:

    1. 删除控制台输出和
    2. 使用-ConcurrentTaskCount 开关,在我的例子中设置为100。现在将其缩短到 5 分钟以内。

    【讨论】:

      【解决方案5】:

      AzCopy 提供异步复制服务所缺乏的 SLA。 AzCopy 旨在实现最佳性能。使用/SyncCopy 参数可以获得一致的复制速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 2011-01-12
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多