【问题标题】:What would be a good way to pack a huge set of files so that they can be deployed on Azure fast?打包大量文件以便它们可以快速部署在 Azure 上的好方法是什么?
【发布时间】:2012-07-27 23:45:56
【问题描述】:

我的 Azure 角色依赖于一个庞大的本机库,该库作为一组目录提供,总大小约为 700 兆字节。图书馆每年更新一次。当前的解决方案是将整个树打包成一个 .zip 文件,然后将其拆分为块并上传到 Blob 存储中。当角色实例启动时,它会一一下载块并将它们按顺序保存到单个文件中,从而恢复原始 .zip。然后使用 Info-ZIP unzip 程序解压缩 .zip。

现在下载大约需要 25 秒,但解包可能需要 2-4 分钟,而且速度还不够快。我查看了每个进程的性能计数器,看起来unzip.exe 消耗的 CPU 时间不超过 25%,因此问题可能是 I/O 繁重 - 必须从磁盘读取 .zip,然后提取数据需要写入磁盘。我正在寻找一些其他方法来打包(和解包)库,以加快部署速度。

如何打包库,以便在我的代码在 Azure 上运行时尽快解包?

【问题讨论】:

    标签: performance deployment azure zip packaging


    【解决方案1】:

    长时间运行的安装(即使在您的情况下大约需要 5 分钟)是您使用 VM 角色的完美理由。您构建自定义图像(包含这些库),上传它并将该图像用作您的实例的图像。现在,如果您查看文档,则不应将 VM 角色用于生产部署 - http://msdn.microsoft.com/en-us/library/windowsazure/gg433107

    另一种选择可能是云驱动器。这是您在实例中作为 NTFS 驱动器挂载的页 blob。您在这里遇到的问题是只有一个实例可以挂载云驱动器(不支持多个实例)。

    我的建议:

    1. 在本地计算机上创建包含所需库的 VHD
    2. 将其作为页 blob 上传到您的存储帐户
    3. 确保缓存足够大,以便它可以容纳所有文件以避免网络延迟(更多信息:CloudDrive.InitializeCache Method
    4. 为每个实例创建一个快照并将该快照装载为云驱动器。这是一种能够在多个实例上使用“相同”云驱动器的解决方法。 (更多信息:CloudDrive.Snapshot Method

    另一种解决方案可能是将 VHD 下载到 LocalResource 并使用 diskpart(在启动任务中)安装它。

    注意:我认为 VHD 文件是另一种打包文件的方式。

    【讨论】:

    • 提前创建一个 vhd 以附加到正在运行的实例是一个好主意,因为在启动时不需要解压缩任何内容。从时间上看,创建页 blob 快照可以忽略不计。只要您对只读快照没问题,此解决方案应该适合您。
    【解决方案2】:

    25% CPU 通常意味着你的机器有 4 个内核,其中一个内核使用率为 100%。压缩数据通常是单线程的。

    所以你受 CPU 限制。

    您可以单独压缩每个块,以便单独解压缩它们。像这样拆分工作允许并行化。您可能会因此获得 3 到 4 倍的加速。

    如果您需要更快,则需要寻找更快的压缩实用程序,例如 QuickLZ。

    【讨论】:

    • 我有一个“小”单核实例。
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2021-10-30
    相关资源
    最近更新 更多