我们有许多用于.NET和Java开发和QA的Windows Server虚拟机。 我发现Azure有吸引力的原因很明显,但主要是为了减less在环境维护上花费非生产时间的机会。
在function上,在清理了一些应用程序(许可等)的系统ID问题之后,一切都很好,但是性能有些不足:
在Hyper-V或ESXi上运行时,我们的系统需要花费大约2分钟的时间来构build解决scheme,但Azure A3计算机最多需要花费12分钟来完成相同的构build 。
资源监视器显示大部分时间机器处于IO等待读取磁盘的状态。
有什么我应该做的不同,或者我应该期望在所有情况下本地机器更好的performance?
Azure虚拟机的大小是基于它们的内存和CPU核心的,但是所有的大小显然都缺乏存储性能,无论虚拟机上有多less核心和内存,它总是成为主要的罪魁祸首。
两种解决scheme
(*)如果您担心使用RAID 0,不要这样做。 这些是虚拟磁盘,它们的完整性已经由底层存储层保证。 RAID 0仅用于将它们分组在单个逻辑卷中,并具有更好的性能。
Azure是一项共享服务。 您应该期望基于您正在运行的虚拟机pipe理程序(您完全无法控制)的负载以及无数其他因素(您无法控制)的无数性能随机性能变化。
如果性能(和一致性)在您自己的硬件上承载您自己的环境至关重要。
您不应该使用您的c驱动器应用程序:
C驱动器针对启动时间进行了优化,而不是针对高IO。
由于每个磁盘都是IOPS节制的(通常为500 /磁盘),因此您可以使用其中的很多(A3上最多8个),也可以使用具有SSD(D3:12000IOPS)的d系列机器。 请注意,您必须使用不保证持久数据具有SSD速度的D盘:
http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations
或者,您可以支付$$$并使用高级存储blob(5000 IOPS〜100 $ / Month)来获得持久性存储。
大约6个月前,我们将整个生产环境迁移到了Azure。 我们有一个每天运行多个构build的构build服务器,并基于从构build到构build的各个构build任务的持续时间,我可以告诉你“性能”是相当一致的。 我还可以确认你的发现,与本地开发PC相比,不使用多核的进程(例如运行unit testing)在Azure虚拟机上运行速度慢大约6倍。
简而言之,当你在一个核心上运行进程时,你的本地机器将总是胜过Azure虚拟机。 我认为Azure更适合处理涉及多个内核的任务(例如数据库或Web服务器),因为您可以根据需要轻松扩展/缩减内核。