使用AWS按需运行长Java进程

时间:2018-12-19 17:22:22

标签: java amazon-web-services

我想使用AWS上的Java应用程序处理大型csv(数百万行),并将结果写入另一个csv中。

该应用程序打包在一个jar中,并且可以通过一些shell命令java -jar myJar.jar -option1 -option2运行。

取决于用户上载csv并触发应用程序的情况,可以随时调用该应用程序。

  • 我首先想到的是在 s3 上上传csv,并在每次上传时触发 lambda函数。该lambda运行jar(也存储在s3上),然后将结果写入 s3

问题:它适用于小型文件,但是lambda函数在执行时间,RAM,CPU和临时文件存储方面受到限制。实际上,它们是为短流程而制造的。

  • 另一种解决方案是运行 ec2 集群,并让应用等待触发器。

问题:即使集群处于空闲状态,运行集群也需要为此付费。

是否有一种解决方案可以运行此jar,而无需在自定义AWS技术中对其等效代码进行编码?

编辑:回答评论

  • “实时”需求是由最终用户触发的,他们将等待显示结果。几分钟是个好主意,我将尝试@stdunbar建议的ec2解决方案,以了解其进展。
  • 我知道1M很小,并且上述lambda / s3解决方案在5M行csv上效果很好。但是我正在寻找可以扩展的解决方案,在本地运行jar时将花费数小时,而我们再也无法在本地运行它了。 (我仍处于实验阶段,并且是有关云解决方案的完整初学者)

1 个答案:

答案 0 :(得分:1)

您可以通过多个部分来使其更有效地工作并节省资金。

需要编码:

  • 如果不是绝对需要一次/一起处理整个1M线,请尝试将其分成较小的部分。
  • 编写一个对CSV创建有反应的Lambda,Lambda代表您生成EC2,然后将作业发送到EC2进行处理(我相信相当不错的配置工作)

需要较少的编码:

  • 您不需要运行整个EC2集群,只需一个小实例即可随着工作量的增加而扩展,与下面的解决方案相同
  • 选择Elastic Beanstalk。他们为您进行自动缩放,您只需上传.jar

请注意,最大的Lambda功能非常强大,目前具有3000MB的RAM和同等的CPU能力,它使您只需15分钟即可完成任务。要保持一个T2.Medium(4Gb RAM,2vCore)每月24/7运行,您的费用约为38美元

或全部:

  • 您可以保留一个处于睡眠状态/已停止的EC2实例,这会使您花费很少的空闲/等待实例。 Lambda可以启动实例。自动缩放将上下缩放实例数量。经过一段时间的CPU空闲,Cloudwatch可以将最终实例重新设置为“已停止”