0

我正在运行我在 .Net 框架中构建的优化模型(使用 Google.OrTools)。当我在本地运行时,应用程序以超过 99% 的 CPU 运行,因此我的团队决定将此应用程序移动到 Azure ScaleSet,我有一个 VM,并且我配置为扩展到 10 个 VM。我面临的问题是仅在我的主 VM 中 CPU 相同 >99%,即使添加了新 VM(按比例放大),这些 VM 上的 CPU <1%。我现在对在 Azure 中使用 ScaleSet 感到困惑。

在上述情况下,我认为该工作尚未与其他 VM 共享。我该如何解决这个问题?

请注意,我正在使用控制台应用程序运行我的应用程序,并且此作业与数据库和 Drive 的连接并不频繁,此作业是一个纯粹的数学问题。

4

3 回答 3

1

客户将使用 Azure VMSS 作为前端(或后端池)。

Azure VMSS 自动缩放功能减少了随着客户需求随时间变化而监视和调整规模集的管理开销。

Azure VMSS 将使用 Azure负载均衡器将流量路由到所有 VMSS 实例,这样所有实例的 CPU 使用率都是一致的。

如果您的服务在没有其他请求或其他连接的情况下运行,CPU 使用率为 99%,这意味着您应该将该 VM 调整为较大的大小。

于 2018-01-30T03:14:00.350 回答
1

首先,您的偏好和预算并不能决定您的工作负载是否可以横向扩展而不是纵向扩展。

Azure 规模集包括一些后端 VM 和负载均衡器。负载均衡器将请求分发到后端服务器。

如果 Azure 规模集由多个独立的请求组成,则你的工作负载可以利用它。这种工作负载的典型示例是 Web 服务器。在 Azure 规模集上运行这种工作负载通常不需要对代码进行任何更改。

如果您有一个可以分解为可以独立处理的更小的部分的请求,您可能能够在规模集上运行您的工作负载。要使这种并行处理工作,您可能必须重写一些代码。负载均衡器会将这些较小的部分视为多个请求。

其他提高数学成绩的方法包括

  • 使用不同的、更合适的语言,
  • 在 GPU 而不是 CPU 上运行您的代码,或者
  • 利用第三方系统,例如 Wolfram Mathematica。

我敢肯定还有其他方法。

于 2018-01-30T11:03:50.563 回答
0

假设您在实验室中有 10 台物理机器。您将如何拆分此任务以在所有机器上运行得更快?

规模集是 VM 的集合。要使用规模集和自动缩放,您的计算密集型作业需要可并行化。例如,如果您可以将其拆分为许多子任务,那么规模集中的每个 VM 都可以请求一个子任务,计算它,将结果发送到某处进行聚合,然后请求另一个任务。

以下是在规模集中的 1000 个 VM 上运行的计算密集型任务的示例:https ://techcommunity.microsoft.com/t5/Microsoft-Ignite-Content-2017/The-journey-to-provision-and-manage-一千个虚拟机应用程序/td-p/99113

于 2018-01-30T20:59:13.437 回答