我们有许多 Windows Server 虚拟机,用于 .NET 和 Java 开发和 QA。我发现 Azure 很有吸引力,原因显而易见,但主要是因为它有机会减少花在环境维护上的非生产性时间。
从功能上讲,在清理了部分应用程序的系统 ID 问题(许可等)后,一切正常,但性能有些欠缺:
我们的系统在 Hyper-V 或 ESXi 上运行时需要大约 2 分钟来构建解决方案,但 Azure A3 机器需要最多需要 12 分钟才能完成相同的构建资源监视器显示机器
大部分时间都处于读取磁盘的IO等待状态。
我是否应该做些不同的事情,或者我应该期望在所有情况下本地机器都能获得更好的性能?
答案1
Azure VM 的大小取决于其 RAM 和 CPU 核心,但所有大小的 VM 都明显缺乏存储性能,无论在 VM 上投入多少核心和内存,这始终是主要原因。
两种解决方案:
- 对于正常使用,只需将尽可能多的数据磁盘连接到您的 VM,并在客户系统中将它们配置为 RAID 0;I/O 限制在磁盘级别,因此磁盘越多 = I/O 越多。使用这些磁盘进行实际工作,不要将除操作系统以外的任何东西放在系统磁盘上(无论如何,这是最佳做法)。此策略没有额外费用,因为 Azure 存储是根据实际使用的空间计费的:虚拟磁盘的数量及其外观大小根本不重要。(*)
- 如果你真的需要磁盘性能,使用优质仓储。
(*) 如果您担心使用 RAID 0,请不要担心。这些是虚拟磁盘,其完整性已由底层存储层保证。RAID 0 仅用于将它们分组到单个逻辑卷中,以获得更好的性能。
答案2
Azure 是一项共享服务。您应该预料到,性能会根据您正在运行的虚拟机管理程序的负载(您完全无法控制)以及无数其他因素(您也无法控制)而随机变化。
如果性能(和一致性)至关重要,请在您自己的硬件上托管您自己的环境。
答案3
您不应该将 C 盘用于以下应用程序:
C 盘针对启动时间进行了优化,而不是针对高 IO。
由于每个磁盘都受到 IOPS 限制(通常为 500/磁盘),因此您可以使用其中的许多磁盘(A3 上最多 8 个),也可以使用配备 SSD 的 d 系列机器(D3:12000IOPS)。请注意,您必须使用 d 驱动器不保证数据持久化拥有 SSD 速度:
http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations
或者您可以支付 $$$ 并使用高级存储 blob(5000 IOPS 每月约 100 美元)来获得持久存储。
答案4
大约 6 个月前,我们将整个生产环境迁移到了 Azure。我们有一个构建服务器,每天运行多个构建,根据构建过程中各个构建任务的持续时间,我可以告诉您“性能”相当稳定。我还可以确认您的发现,不使用多核的进程(例如运行单元测试)在 Azure VM 上的运行速度比在本地开发 PC 上慢 6 倍。
简而言之,当您在单核上运行进程时,您的本地计算机的性能始终优于 Azure VM。我认为 Azure 更适合处理涉及多个核心的任务(例如数据库或 Web 服务器),因为您可以根据需要轻松地增加/减少核心。