有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

考虑到成本和性能,使用AWS调度器的最佳方法是什么

我正在从事一个JAVA项目,该项目将文件上传到AWS S3 bucket。现在我需要每天早上8点在S3中处理这些文件(验证并将数据发送到数据库)。我计划为此使用AWS调度程序。但是我搞不清楚我必须使用什么样的调度程序以及如何使用。我查阅了文档,通过Lambda找到了关于AWS批处理和AWS云监视调度程序的信息。但是我不知道在这个场景中使用AWS调度器的最佳方式是什么。不确定AWS批次是否适用于此。事实上,我也需要考虑成本。 如果你能建议我解决这个问题的最佳方法,我很高兴。也欢迎其他方法

p.S:文件处理将需要15分钟以上。我还需要配置其他几个调度器


共 (2) 个答案

  1. # 1 楼答案

    一种方法(AWS总是有很多)是通过EventBridge,以前是CloudWatch Events和AWS Lambda。我以前从未使用过AWS批处理

    编码并部署AWS Lambda函数。在Lambda中,您访问S3存储桶,验证数据,并将数据发送到数据库

    如果打开AWS控制台,请转到Lambda功能。接下来添加触发器并选择EventBridge

    现在您可以创建一个新规则。要使其每天早上8点运行,您的计划表达式为cron(0 8 * * ? *)

    要记住的一些事情:

    • 别忘了Lambda的跑步时间永远不会超过15分钟
    • 计划表达式使用UTC而不是本地时间。DST是一个问题
  2. # 2 楼答案

    我在这里提出的解决方案是

    1. 使用Clouwatch规则在上午8点触发lambda。(例如:SchedulerLambda)
    2. SchedulerLambda不会处理任何文件,它会在“已定义”位置列出文件
    3. 对于每个文件,SchedulerLambda将向主题发送SNS消息
    4. SNS有一个SQS订阅
    5. SQS有一个Lambda触发器(例如:FileProcessorLambda)
    6. FileProcessorLambda将按批处理(最大值为10)。您可以根据您的用例调整批处理的数量
    7. FileProcessorLambda完成一个文件后,它还将跟踪DynamoDB的状态。它重试并随时恢复的原因

    注:此处的设计优先考虑成本、扩展、维护和设计(松耦合)

    注意:这里的假设是处理一个文件(单个文件)的时间不超过15分钟,这是lambda的限制。如果文件的处理时间超过15分钟,则上述解决方案将不起作用。如果您确认,我可以给出另一个解决方案