当前位置: 首页 > 知识库问答 >
问题:

AWS Fargate vs Batch vs ECS用于一天一次的批处理过程

冀嘉木
2023-03-14

我有一个批处理过程,用PHP编写,嵌入到一个Docker容器中。基本上,它从几个webservices加载数据,对数据进行一些计算(在~1h期间),并将计算出的数据发布到另一个webservice,然后容器退出(返回代码为0,如果OK,则返回代码为1,如果进程中的某个地方失败)。在此过程中,会在STDOUT或stderr上写入一些日志。批处理必须每天触发一次。

我想知道用来调度、执行和监视批处理过程的最佳AWS服务是什么:

  • 一开始,我使用的EC2机器带有crontab:这里没有高可用性的函数,所以我决定切换到更多的PaaS方法。
  • 然后,我使用弹性Beanstalk for Docker,带有一个不起作用的Webserver(仅用于回复Healthcheck),容器中有一个Crontab来唤醒我的批处理命令,每天一次。使用自动缩放规则min=1 max=1,我有HA(如果容器崩溃,或者如果VM崩溃,则由AWS重新启动)
  • 但现在,为了提高效率,我决定转到一些ECS服务,并采用一种方法,使EC2实例不需要23/24白白唤醒。所以我尝试了Fargate。
  • 使用Fargate我定义了我的任务(Fargate类型,而不是EC2类型),并在上面配置了所有内容。
  • 我创建一个集群来运行我的任务:我可以“手动运行一次”我的任务,因此我知道每个设置都是正确的。

现在,深入法盖特,我想让我的任务每天执行一次。

>

  • 当我使用ECS的调度任务特性时,它似乎工作得很好:容器准时启动,流程运行,然后容器停止。但是CloudWatch缺少一些度量:没有报告CPUReservation和CPUUVERATILY。此外,无法知道批处理是退出代码为0还是退出代码为1(所有执行停止,状态为“stopped”)。因此,如果容器执行失败,我无法发送CloudWatch警报。

    以下是我的问题:什么是最合适的AWS托管服务来每天触发一次容器,让它运行来完成它的任务,并且有报告功能来跟踪执行(CPU使用情况,批处理持续时间),包括当任务失败时的警报(SNS)?

  • 共有1个答案

    彭浩穰
    2023-03-14

    我们在识别失败的作业时也遇到了同样的问题。我建议您研究一下AWS批处理,在该批处理中,CloudWatch日志中提供了失败作业的日志;看看这里。您还应该考虑的一件事是最终选择的任何解决方案的总拥有成本。法盖特,在这方面,是相当昂贵的。

     类似资料:
    • 我们使用Spring Batch进行一些处理,通过Reader读取一些ID,我们希望通过处理器将它们处理为“块”,然后写入多个文件。但是处理器接口一次只允许处理一个项目,我们需要进行批量处理,因为处理器依赖于第三方,不能为每个项目调用服务。 我看到我们可以为“块”中涉及的所有读取器-处理器-写入器创建包装器,以处理列表<>并委托给一些具体的读取器/处理器/写入器。但这对我来说并不是件好事。像这样:

    • 我使用的是spring批处理,和通常使用的一样,我有读取器、处理器和写入器。 我有两个问题 1>Reader查询所有200条记录(表中记录总大小为200,我给出了pageSize=200),因此它得到所有200条记录,在处理器中,我们需要所有这些记录的列表,因为我们必须将每个记录与其他199条记录进行比较,以便将它们分组在不同的层中。因此我在想,如果我们能在处理步骤中得到那个列表,我就可以操纵它们

    • 我正在尝试将XBee输出的段分组到一个变量中,该变量将它们连接起来。我正在使用Processing来编码和编译。我遇到的问题是输出(println)每隔一个字节就跳过一次(也许这是错误的术语)。因此i=4到11的XBee输出应该如下所示: 0,19,162,0,64,121,230,206(这是由十六进制转换的XBee地址)。

    • 我是Spring Batch的新手。我的要求是我有一个阅读器,它通过Web服务调用/数据库调用获取记录,目前我正在将这些记录写入一个表。现在我需要处理相同的记录(阅读器读取的记录)并写入另一个表。这里要注意的一点是,第二次写入中存储的第二个项目是不同类型的第一次写入。 我需要像下面这样 对于上述相同的工作,我需要事务管理。此外,在步骤2中:-如果可能,我应该使用步骤1中已经读取的数据。

    • 我定义了一个块,提交间隔为10,跳过限制为10。处理器类通过应用一些算术运算来操作字段。其中一条记录(比如第6条记录)在处理器类中发生异常。在此之后,再次处理1到5条记录,跳过第6条记录,处理7到10条记录,并将其写入XML(自定义XML编写器类)。由于处理器处理1-5条记录两次,因此预期字段值计算两次是错误的。您能否建议一种解决方案,让处理器只处理一次记录,只跳过失败的记录,并将处理后的记录写入

    • 关于skip,我有一个非常基本的问题。我正在使用spring示例提供的spring batch simple cli项目,并试图理解跳过行为。它有一个非常基本的示例读取器,可以读取字符串数组(我将其修改为从Hellowworld 1到Hellowworld 10的10个字符串列表中读取),还有一个基本的编写器,可以登录到控制台。writer抛出java。每写一次都有例外。我在作业配置中增加了4个跳