8

我受到一个软件的限制,该软件在每个程序运行实例中使用一个内核。它将运行 SQL Server 工作队列并将结果存入服务器。因此,我运行的实例越多,整个项目完成的速度就越快。我已经使用过 Azure VM,并且可以通过两种方式加速该过程。

1) 我可以在单个核心 VM 上运行应用程序,克隆该 VM 并在我认为有必要的数量上运行它,以充分加快工作速度。

或者

2)我可以在一个 8 核 VM 上运行该应用程序 8 次,...再次克隆该 VM 并在我认为有必要的数量上运行它以充分加快工作速度。

我在测试中注意到,添加 8 个单核 VM 和 1 个 8 核 VM 的速度提升大致相同。假设这是真的,那么单核机器在价格上会更好吗?

定价有点神秘,无论是真正的 cpu 使用时间,还是什么。使用 1 个 8 核方法会更容易一些,因为启动机器并将它们关闭需要时间,但我想这可以自动化。

从某些定价页面看来,多单核 VM 方法的成本似乎更低?

附带问题:那么我是否可以喜欢一些 power shell 脚本来继续添加某个图像的虚拟机并运行应用程序,然后在我接近完成时开始关闭它们?生成虚拟机后,是否有某种方法可以启动应用程序,而无需远程访问每个虚拟机并运行它?

4

3 回答 3

12

我会争辩说,在其他条件相同的情况下,这段代码确实受 CPU 限制,并且不会从在同一台机器上运行多个进程所提供的任何内存共享中受益,您应该选择单核机器而不是多核机器。

原因:

隔离故障域

在可能的情况下,横向扩展而不是向上扩展更好,因为它自然地隔离了故障。如果您的一个小节点崩溃,那只会影响一个进程。如果一个大节点崩溃,多个进程就会宕机。

负载均衡

与任何多租户系统一样,Windows Azure 是一种共享资源。这意味着您可能会与其他工作负载竞争 CPU 周期。拥有小型虚拟机让您有更好的机会将它们分布在数据中心中的物理服务器上,这些物理服务器在配置机器时具有最佳资源情况(您需要确保在再次启动虚拟机之前停止并取消分配虚拟机以允许Azure 结构放置算法以选择最佳主机)。如果您使用大型 VM,则不太可能找到具有最佳争用的合适主机来容纳许多虚拟内核。

虚拟处理器调度

调度虚拟 CPU 与调度物理 CPU 有何不同尚未得到广泛理解,但值得一读。要记住的主要事情是,像 VMware ESXi 和 Hyper-V(运行 Azure)这样的管理程序将多个虚拟核心安排在一起而不是单独安排。因此,如果您有一个 8 核 VM,则物理主机必须同时有 8 个物理内核空闲,才能允许虚拟 CPU 运行。虚拟内核越多,主机在任何给定时间拥有足够物理内核的可能性就越小(即使 7 个物理内核空闲,VM 也无法运行)。这可能会导致一种矛盾的效果,即随着更多虚拟 CPU 内核添加到虚拟机中,虚拟机的性能会变得更差。http://www.perfdynamics.com/Classes/Materials/BradyVirtual.pdf

简而言之,单台 vCPU 机器比 8 个 vCPU 机器更有可能获得物理处理器的份额,其他条件相同。

我同意定价基本相同,除了存储许多小型 VM 的存储成本比大型 VM 少一些。但 Azure 中的存储远低于计算成本,因此可能不会影响任何经济规模。

希望有帮助。

于 2013-07-18T01:00:50.450 回答
5

计费

根据Windows Azure 虚拟机定价详细信息,虚拟机按分钟(挂钟时间)收费。价格按小时费率(60 分钟)列出,并根据 VM 运行半小时的总分钟数计费。

2013 年 7 月,1 个小型 VM(1 个虚拟核心)的成本为 0.09 美元/小时;8 个小型 VM(8 个虚拟内核)的成本为 0.72 美元/小时;1 个超大型 VM(8 个虚拟内核)的成本为 0.72 美元/小时(与 8 个小型 VM 相同)。

虚拟机大小和性能

VM 的大小不仅在内核数和 RAM 上有所不同,而且在网络 I/O 性能方面也有所不同,从 Small 的 100 Mbps 到 Extra Large 的 800 Mbps。

超小型 VM 在 CPU 和 I/O 功率方面相当有限,并且不适合您所描述的工作负载。

对于问题中描述的单线程、I/O 绑定应用程序,超大型 VM 可能具有优势,因为每个请求的响应时间更快。

还建议对每个内核运行 2、4 或更多进程的工作负载进行基准测试。例如,小型 VM 中的 2 或 4 个进程和超大型 VM 中的 16、32 或更多进程,以在 CPU 和 I/O 负载之间找到适当的平衡(前提是您使用的 RAM 不超过可用的 RAM)。

自动缩放

自动缩放虚拟机直接内置在 Windows Azure中。它可以基于 CPU 负载或 Windows Azure 队列长度。

另一种选择是使用专门的工具或服务来监控服务器之间的负载,并根据需要运行 PowerShell 脚本来添加或删除虚拟机。

自动运行

您可以使用 Windows 调度程序在 Windows 启动时自动运行任务。

于 2013-07-15T20:38:30.373 回答
2

定价是“机器的正常运行时间(以小时为单位) * VM 大小/小时的速率 * 实例数”

例如,您有一个运行一个月(30 天)的 8 核 VM(超大型)(30 * 24) * 0.72$ * 1= 518.4$

对于 8 个单核,它将是 (30 * 24) * 0.09 * 8 = 518.4$

所以我怀疑是否会有任何价格差异。使用较小的机器和“向外扩展”的优势之一是您可以更精细地控制可伸缩性。一台超大型机器会比 2-3 台小型机器消耗更多的闲置资金。

是的,您绝对可以编写脚本。假设它们是 IaaS 机器,您可以将脚本添加到 Windows 启动,如果在 PaaS 上您可以使用“启动任务”。 参考

于 2013-07-15T20:38:54.703 回答