10

我使用 Azure .NET SDK 2.6 创建了一个具有单个辅助角色的全新云服务。RoleEntryPoint 几乎是空的。

由于创建虚拟机,第一次需要一段时间。我的期望是以下发布尝试会快得多。事实证明,它至少需要 5 分钟。在 VS 中检查部署活动日志,我看到:

20:17:06 - Checking for Remote Desktop certificate...
20:17:07 - Applying Diagnostics extension.
20:17:29 - Preparing deployment for AzureCloudService2 - 15/05/2015 20:17:03...
20:17:29 - Connecting...
20:17:29 - Verifying storage account ...
20:17:30 - Uploading Package...
20:17:51 - Updating...
20:19:59 - Instance 0 of role WorkerRole1 is ready
20:20:00 - Starting...
20:20:19 - Initializing...
20:20:19 - Created web app URL: ...
20:20:19 - Complete.

为什么更新这个应用程序需要 2 分钟?有没有办法加快这个速度?

4

2 回答 2

5

考虑到以下情况,2 到 4 分钟更新 Azure 部署并不算多:

  1. 它包括上传包
  2. 包在内部被复制了几次,直到它到达您的实例
  3. 我们有效地将包作为另一个磁盘安装到机器上
  4. 验证一切正常
  5. 切换您的应用程序以从新安装的磁盘运行(意味着停止旧的,启动新的)
  6. 卸载包含旧包的旧磁盘
  7. 通知一切正常

这是对实际情况的过度简化。所有这些都是异步发生的,如果每个项目需要 15-20 秒,你就会明白我的观点。

如果您想要更快的部署,您可以做一些事情:

  1. 如果您有大文件,请缩小包的大小。最好在启动时从存储中下载你的大依赖,而不是将它们捆绑在包中
  2. 如果它是 WebRole 并且您想快速测试更新,您可以启用 WebDeploy 作为部署的一部分,然后在 VS 中执行正常的“发布..”工作流。当你从 VS 发布你的包时,它只是一个复选框。之后需要几秒钟来更新文件。请注意,对于要保留的更改,您必须通过完全重新部署来更新云包,否则如果实例重新映像,您将丢失所做的更改。这基本上只是为了开发。
  3. 如果它是 WorkerRole,您可以将负载拆分为 WorkerRole 的 EntryPoint 从存储中下载、解压缩和执行的进程(简单的 .exe)。如果您有更新的版本,您只需将新包上传到存储。您的 workerrole 只是监视存储中是否有较新版本的软件包,然后下载它、解压缩并在杀死旧的 .exe 文件后运行新的 .exe 文件。

希望能帮助到你。

于 2015-05-16T02:08:55.627 回答
1

关闭 MSBuild 输出。

在 Visual Studio 中转到Options > Projects and Solutions > Build and Run. 将两个 MSBuild 项目选项都设置为安静。

当我这样做时,我发现部署时间大大减少。

于 2018-11-18T00:04:37.933 回答