1

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

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

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

4

2 回答 2

1

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

一个替代方案可能是云驱动器。这是您在实例中作为 NTFS 驱动器挂载的页 blob。您在这里遇到的问题是只有一个实例可以挂载云驱动器(对多个实例没有真正的支持)。

我的建议是:

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

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

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

于 2012-07-30T10:31:51.143 回答
0

25% CPU 通常意味着你的盒子有 4 个核心,其中一个被 100% 使用。压缩数据通常是单线程的。

所以你受CPU限制。

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

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

于 2012-07-30T10:23:58.920 回答