【问题标题】:Azcopy Java SDK is slowAzcopy Java SDK 很慢
【发布时间】:2018-09-12 22:45:00
【问题描述】:

我使用 Azcopy Java Sdk 将文件从本地传输到 blob,与 cli 相比,它需要更多时间(几乎是两倍)。对于 1GB 文件,cli 需要 8 秒,并发请求计数 1 的 SDK 需要 40 秒和 20 秒。超过 2 秒,我没有看到传输时间有任何改善。有什么方法可以提高使用 sdk 的性能。请找到我正在使用的代码 sn-p。

CloudStorageAccount storageAccount = null;
CloudBlobContainer container = null;
CloudBlockBlob blob = null;
BlobRequestOptions blobRequestOptions = new BlobRequestOptions();
blobRequestOptions.setConcurrentRequestCount(6);
storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
container = blobClient.getContainerReference("content");
blob = container
   .getBlockBlobReference(sourceFile.getName());
blob.uploadFromFile(sourceFile.getAbsolutePath(), null, blobRequestOptions, null);  

Edit1:我正在尝试使用以下代码上传,它需要 20 秒,而 azcopy cli 需要 8 秒

  blob.setStreamWriteSizeInBytes(100 * 1024 * 1024);

【问题讨论】:

    标签: java sdk azure-storage azcopy


    【解决方案1】:

    Azycopy 和 Azure 存储 SDK 执行相同的职责,但是 AZcopy 比 SDK 有一些优势。

    Azcopy:

    AzCopy 默认在两个存储端点之间异步复制数据。因此,复制操作在后台使用备用带宽容量运行,就 blob 的复制速度而言,没有 SLA,AzCopy 会定期检查复制状态,直到复制完成或失败。

    /SyncCopy 选项可确保复制操作获得一致的速度。 AzCopy 通过将要复制的 Blob 从指定源下载到本地内存,然后将它们上传到 Blob 存储目标来执行同步复制。

    Java SDK

    我们 Java 库中的所有 blob 下载 API 都是同步的。在下载完成之前,该方法不会终止。一般来说,Java 6(我们使用的版本)不支持异步方法。 希望这会有所帮助!

    快速上传大量 Blob

    要快速上传许多 Blob,请并行上传 Blob。 这比使用并行块上传一次上传单个 blob 更快,因为它将上传分散到存储服务的多个分区。单个 blob 仅支持 60 MB/秒(约 480 Mbps)的吞吐量。在撰写本文时,美国的 LRS 帐户支持高达 20 Gbps 的入口,这远远超过单个 blob 支持的吞吐量。 AzCopy 默认并行执行上传,建议用于此场景。

    来源:

    https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy https://github.com/Azure/azure-storage-java/issues/95 https://docs.microsoft.com/en-us/azure/storage/common/storage-performance-checklist#subheading22

    【讨论】:

    • 如果 SDK 本质上是同步的,我可以,我更关心性能,如果 AzCopy cli 的性能比 SDK 高 200%,我可以从我的java 应用程序而不是使用 SDK,在做出决定之前,我只想知道是否有任何方法可以提高 SDK 的上传性能
    • 嘿,AzCopy 和 Java SDK 使用完全相同的逻辑:并行上传块。我很惊讶听到有区别。只是想确保您在同一台机器、相同的文件源和相同的 blob 存储帐户上进行测试? HTTP 与 HTTPS 的性能也可能不同。您在这两种情况下都使用 HTTPS 吗?在我之前的经验中,由于 .NET Core 和 Framework 中的一些效率低下,Java SDK 的性能优于 AzCopy,这将在 .NET Core 2.1 中得到解决。回覆。优化吞吐量,唯一的参数是并发连接数和块大小。
    • 感谢您的回复。请在编辑中找到代码。我正在尝试上传 100MB 块。请提出一种实现更好性能的方法。我正在使用相同的文件、相同的机器、相同的 blob 和 HTTPS。
    猜你喜欢
    • 2020-01-17
    • 2011-06-30
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多