【问题标题】:Does lambdas execute operations in sequence.?lambdas 是否按顺序执行操作。?
【发布时间】:2018-04-03 19:10:08
【问题描述】:

我们正在考虑为我们的项目使用亚马逊网络服务。其中上游流将消息推送到 kinesis 中,然后这些消息将被馈送到 lambdas 中,这些消息在处理之前将按顺序排列。据我了解,AWS lambda 将根据消息量水平扩展。我们每秒有 400 条消息量,这意味着 AWS lambda 将响应消息量,并将在单独的容器上实例化新进程以利用并行性,为了实现并行性,必须妥协排序。因此,如果订购的 10 条消息命中 lambda 函数并且一个函数比另一个函数花费更多时间,AWS 将在某个容器中预置一个新函数来服务请求。

在所有这些过程之后,最终输出是否正常? 任何帮助表示赞赏。 谢谢。

【问题讨论】:

  • 最终输出是什么? Dynamodb、rds 等
  • 最终输出将存储在 SQS 上
  • Lambda 不保证 FIFO 用于响应事件的函数执行,当然也不保证 Lambda N 对 SQS 的写入将在 Lambda (N+1) 对 SQS 的写入之前。更不用说 Lambda 重试的潜在影响。
  • 嗨jarmod,我从你的观点理解是lambda不保证函数执行的顺序,第n个函数执行的结果不一定在第N+1个函数之前。

标签: amazon-web-services aws-lambda amazon-kinesis-firehose


【解决方案1】:

如果您使用的是 Amazon Kinesis,那么您可以使用 Data Transformation 在每个传入记录上触发 AWS Lambda 函数。

这允许在继续通过 Firehose 之前转换或删除记录。因此,记录可以由 Lambda 处理,同时保持相同的顺序。最终数据可以传送到 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 或 Splunk。

如果您的应用程序直接使用来自 Amazon Kinesis 的记录(而不是通过 Firehose),那么您的应用程序将按顺序使用记录。

【讨论】:

  • 简而言之:案例1:当kinesis firehose作为流和转换工具使用时,它对记录进行批处理并在这些记录上调用异步labmda函数,并继续进行后处理并将数据转发到目的地。这种异步处理不会破坏消息的顺序吗?案例 2:当 Kinesis STREAMS 用作源时 - 在这种情况下,由于消息的顺序仅在每个分片上维护,并且在订阅时使用 lambda 函数来读取一批记录,是异步处理的记录。如果是,我们不要取消订购?
  • 您是正确的,Kinesis Streams 记录排序是按流保留的。这就是生产者应该发送一个分区键来保持相关记录有序的原因。如果您要求所有记录井井有条,那么您只能使用一个流,这会影响可用吞吐量。希望您能找到一种并行处理记录的方法,否则您的处理可能会落后于传入记录的速度。
  • 谢谢约翰,但我的问题是关于 lambda 执行,我想知道 Lambda 处理的这批记录是按接收顺序返回还是异步返回,然后按分区键排序 - 由 firehose自己发送到目的地。
  • 嘿@Sal 你能找到解决方案吗?我们现在面临着类似的情况,我们的消息需要按顺序处理。用例是change 数据包可能首先到达,然后是process 数据包。但在执行时,不能保证 process 会先做。因此,我们最终得到陈旧的结果。任何见解都会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多