我使用两个控制台应用程序(Stage-estimate
,Stage-step
)完成了我的处理,每个应用程序处理磁盘上的文件,文件被组织到文件夹中。每个文件夹代表一个处理步骤,当估计所有文件时,该步骤被视为已完成。
举个例子,我们假设我们在Step 0
,文件夹0
包含以下文件:
文件夹0
包含:
000.data
001.data
002.data
...
999.data
我们有data
个文件,现在我们需要估算它们,我们运行Stage-estimate
个应用程序1000次,结果如下:
文件夹0
包含:
000.data
000.estimate
001.data
001.estimate
002.data
002.estimate
...
999.data
999.estimate
Step 0
现已完成,我们拥有所有data
/ estimate
对。要切换到Step 1
,我们会在每个Stage-step
/ data
对文件上运行estimate
个应用1000次,并将新的1000 *.data
个文件放入文件夹1
。完成Stage-step
申请后,我们的文件夹1
与Step 0
上的文件结构相同:
文件夹1
包含:
000.data
001.data
002.data
...
999.data
从现在开始,这个过程会一直重复,直到它被取消。
应用程序Stage-estimate
进行了一些非常繁重的计算,与Stage-step
应用程序相比,它消耗了99%的整体处理能力。
我计划使用AWS来加快速度。我不想开始发明可以按上述方式调用我的应用程序的特殊批处理文件,我知道有一些特殊的软件可以在调度过程和其他集群相关的东西上做一些高级的工作。
我从未处理过群集计算,我认为应用程序并行化非常好并且适合AWS基础架构。另一方面,我在群集计算领域完成新手,我不知道从哪里开始。我正在处理AWS但是没有任何与集群计算相关的内容,我不知道如何组织我已经描述的流程以及如何使其高效运行,所以如果你指出我正确的方向或者提供有关演示/最佳实践的一些链接。
提前谢谢!
答案 0 :(得分:1)
__________编辑__________
根据您的评论,您可以将第0阶段的所有作业放入队列并开始处理。您还可以使用逻辑检查是否只剩下少量作业并尝试从第1阶段添加新作业。这会加快您的计算速度,为您提供更好的资源使用,但它是可选的,会使您的系统更复杂
我建议您使用SQS(或SWF)存储作业,使用S3存储文件,并使用工作节点的自动缩放点实例。
不幸的是,Lambda目前不支持C ++。 (支持Node.js和Java。)
________原始________
AWS支持您可能考虑的几个概念:
解耦:您可以使用 SQS(简单队列服务)进行作业排队,从而为您提供冗余且容错的作业队列。您可以拥有一组工作实例,这些实例正在从队列中请求作业,运行它们,如果它们已完成,则从队列中删除作业。如果实例在执行作业期间挂起/崩溃,则在超时期限之后,作业将返回到队列,另一个实例将再次执行它。
其他服务是 SWF(简单工作流程服务)。此服务在内部使用SQS队列,使用此服务,您可能需要更少的脚本来将整个工作流程粘合在一起。
冗余存储:我肯定会使用 AWS S3 进行存储,因为它便宜且冗余。第一次阅读后,我认为您不需要任何高级(文件系统)功能。 (例如锁定。)
竞价型实例:对于工作节点,我会使用便宜得多的竞价型实例。如果您需要一个非常快速的答案来解决您的任务,那么这是唯一的问题。 (如果您生成每日报告,则现场实例是完美的解决方案。)
+1:您可以使用 AWS Lambda 功能来运行您的作业。您可以根据S3事件触发lambda函数。例如,您上传了一个新的* .data文件。但Lambda函数运行时间不能太长。但是如果你能够使用lambda函数,那么你的所有环境都只包含S3桶和lambda函数。它们都是AWS托管服务,因此您的系统将非常灵活,容错。我不能说任何有关定价的确切细节,但我认为它会比运行EC2实例更便宜。
摘要:如果您可以并行运行估算,AWS会为您提供大量的功能和速度。 (好钱)特别是如果你的负荷在白天变化。
一个好消息来源:White Paper on ‘Cloud Architectures’ and Best Practices of Amazon S3, EC2, SimpleDB, SQS