Aws lambda 处理与使用Sqs和Lambda拆分批处理文件

Aws lambda 处理与使用Sqs和Lambda拆分批处理文件,aws-lambda,batch-processing,amazon-sqs,Aws Lambda,Batch Processing,Amazon Sqs,我想使用S3 SQS Lambda体系结构处理不同的批处理文件,并研究3种可能的设计方法 选项1-一次性将批处理文件作为一个整体处理 文件传递到S3 第一个Lambda将触发并在SQS中创建消息 第二个lambda将触发并立即处理批处理文件 选项2-处理批处理文件,单独处理每条消息 文件传递到S3 第一个Lambda将触发并创建批处理文件中每行的SQS消息,每行对应一条消息 第二个Lambda将触发并一次处理一条消息 选项3-同时处理多条消息的批处理文件 文件传递到S3 第一个Lamb

我想使用S3 SQS Lambda体系结构处理不同的批处理文件,并研究3种可能的设计方法

  • 选项1-一次性将批处理文件作为一个整体处理

    • 文件传递到S3
    • 第一个Lambda将触发并在SQS中创建消息
    • 第二个lambda将触发并立即处理批处理文件
  • 选项2-处理批处理文件,单独处理每条消息

    • 文件传递到S3
    • 第一个Lambda将触发并创建批处理文件中每行的SQS消息,每行对应一条消息
    • 第二个Lambda将触发并一次处理一条消息
  • 选项3-同时处理多条消息的批处理文件

    • 文件传递到S3
    • 第一个Lambda将触发并创建批处理文件中每行的SQS消息,每行对应一条消息
    • 第二个Lambda将触发并一次处理多条消息

  • 我倾向于使用选项3,因为从体系结构、可扩展性、处理/成本的角度来看,它似乎是中间选项,但我希望专家们能提供一些建议,说明他们如何比较这些选项。

    在您对复杂性的需求得到证实之前,我更喜欢简单

    这三个选项在体系结构上看起来都是有效的。但对于不同的条件:

  • 这不需要额外的基础设施来管理。只要一个lambda始终可以在可接受的时间范围内完成一个批次,我始终希望使用此选项。这很简单,也很容易推理
  • 如果可以证明批处理中的每条消息都需要几秒钟的处理时间,并且希望尽快完成批处理,请使用此选项。这是因为你将大量并行地完成这项工作,这将带来额外的复杂性和开销,因此,如果只需要几毫秒来处理一条消息,那么你将不会意识到时间的节省,并且会更好地选择
  • 如果文件中的批大小太大,单个lambda无法及时处理(例如,选项一不合适),并且通过实验发现存在理想的批大小,请使用此选项(例如,在消息数量较少的情况下,拆分和运行lambda的开销占主导地位,但在100条消息的情况下,并行处理的速度会更快)

  • 从选项1开始,这将是快速和容易设置的。如果处理太长,那么你就证明了需要复杂性,并且需要移动到选项2或3。我会考虑选项2是选项3的子集。因此,编写批处理逻辑并进行实验,看看哪一个批次的大小为您提供了性能。ed.

    在你对复杂性的需求得到证实之前,你更喜欢简单

    这三个选项在体系结构上看起来都是有效的。但在不同的情况下:

  • 这不需要额外的基础设施供您管理。只要一个lambda始终可以在可接受的时间范围内完成一个批次,我始终希望使用此选项。它简单且易于推理
  • 如果您可以证明批处理中的每条消息都需要几秒钟的时间,并且您希望尽快完成批处理,请使用此选项。这是因为您将大量并行地完成此工作,这将导致额外的复杂性和开销,因此,如果只需几毫秒就可以处理一条消息,那么您将不会被拒绝将节省的时间和更好的选择
  • 如果文件中的批大小太大,单个lambda无法及时处理(例如,选项一不合适),并且通过实验发现存在理想的批大小,请使用此选项(例如,在消息数量较少的情况下,拆分和运行lambda的开销占主导地位,但在100条消息的情况下,并行处理的速度会更快)
  • 从选项1开始,这将是快速和容易设置的。如果处理太长,那么你就证明了需要复杂性,并且需要移动到选项2或3。我会考虑选项2是选项3的子集。因此,编写批处理逻辑并进行实验,看看哪一个批次的大小为您提供了性能。埃德