我公司的需求非常简单:我们有一个多线程的.Net计算程序,该程序读取许多Gb的二进制文件,处理大量的计算,并将结果存储到SQL Server数据库中。我们希望在云上执行此操作,以在最短的时间内执行此重复任务。因此,我们直接进入了云/网格/集群计算领域。

我认为在此主题上将有大量资源和许多可用的替代方法。我只是被惊呆了,以弄清楚我是多么的错误。
尽管安装/运行EC2实例轻而易举,但要找到一种相对简单直接的方法来并行化和聚合这些EC2实例的处理能力并不容易。亚马逊客户服务一直在躲避,我只是无法从他们那里得到具体答案。

我发现utilify听起来很有希望。它是由alchemi人开发的。
但是,documentation link损坏了,当我联系支持人员时我没有回复我的电子邮件,因此这不是很令人放心。

我们选择Amazon而不是Azure,因为AMI是直接的无缝VM(无需“捆绑”应用程序或其他),并且因为EBS是更“方便”的存储,因为它是“真实”文件系统。另一方面,Azure似乎可以将HPC用于Windows,而AWS仅提供基于Linux的AMI。

任何帮助和建议都值得欢迎

编辑:
.Net应用程序是多线程的,由数百名并行工作的异步工作人员组成。

最佳答案

Amazon EC2本质上是基础架构即服务系统(IaaS),这意味着EC2将为您提供硬件和操作系统,但不会为您解决网格计算问题。这与Windows Azure相反,后者是一个平台即服务(PaaS)系统,要求使用不同的体系结构,在该体系结构中,您的应用程序分为不同的角色(Web角色,辅助角色等),可以轻松地将其扩展为网格。有关IaaS vs PaaS的更多详细信息,请参见此问题。

在Azure与EC2上进行部署的区别恰恰是因为Azure要求您比EC2进行更大范围的思考。如果要在EC2上进行扩展,则必须自己进行操作或使用其Elastic Bean Stalk(目前仅在Apache Tomcat上支持Java)。

至于如何设计系统,我的建议是找到一种方法来将问题分解为可以在单独的机器上处理的块,并将消息加载到描述如何执行工作的队列中。然后,您将让EC2实例或Azure角色将工作从队列中拉出,执行所需的计算,然后将结果直接存储在目标中或将结果发送到输出队列,然后将结果聚合。这是执行网格计算而不完全重新设计MapReduce之类的最简单方法。您仍然需要担心如果VM在提交结果之前就死了会发生什么,但是可以通过在提交结果之前不删除Queue条目来进行管理。

10-01 23:09
查看更多