【问题标题】:Tracking a message on multiple AWS SQS queues跟踪多个 AWS SQS 队列上的消息
【发布时间】:2020-03-07 15:20:46
【问题描述】:

我有大约 3 个采用以下形式的 AWS Lambda 函数:

  • Lambda 函数 1:从 SQS 队列读取并将消息放入 SQS 队列(传入和传出消息格式不同)
  • Lambda 函数 2:从 Lambda 函数 1 读取消息,并将消息放入 SQS 队列(传入和传出消息格式不同)
  • Lambda 函数 3:从 Lambda 函数 3 读取消息,并更新存储。

涉及3个队列,每个队列中的消息格式(结构)不同,但是它们有一个uniqueId,它们是相同的,可以用来相互关联。这么多的问题是,在 SQS 上或其他一些工具中是否有任何方法可以跟踪消息,我特别关注的是:

  • 消息进入队列的时间
  • 消息被 Lambda 函数处理的时间

我的问题是 3 个 Lambda 函数在几毫秒内单独执行,但端到端执行所花费的时间太长,我怀疑消息在传输过程中花费的时间太长。

我愿意接受任何其他关于优化的想法。

【问题讨论】:

  • 我认为sqs and x-ray 可能会有所帮助。可能必须将 annotations 添加到您的 uniqueId 的 X 射线片段中,以便您以后可以过滤掉您想要的消息。
  • 谢谢,我确实看到了,但这意味着我现在需要更改我的代码以包含这些额外的标题?
  • 是的。我的脑海中没有这一切的全貌,但这是我首先要考虑的事情。或者,您可以为每个 lambda 中的每条消息添加一个时间,并手动检查从第一个 lambda 到最后一个 lambda 所需的时间。
  • “太长了”有多长?也许还有其他原因,例如您是在延迟消息还是在使用延迟队列?

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

AWS Step Functions 专为在 Lambda 函数之间传递信息和编排整个流程而设计。

但是,您需要更改编写函数的方式以利用 Step Functions。

由于您唯一真正的愿望是探索为什么需要“太长时间”,那么 AWS X-Ray 应该是收集这些信息的好方法。它可以通过每个流程端到端跟踪单个事务。我认为这只是包含一个库并激活 X-Ray 的问题。

见:AWS Lambda and AWS X-Ray - AWS X-Ray

或者,只需开始在日志文件中进行一些手动调查。日志显示每个函数运行所需的时间,因此您应该能够确定所花费的时间是否在特定的 Lambda 函数内,或者时间是否在之间花费函数,等待它们触发。

【讨论】:

  • 我实际上更关心的是消息在队列之间移动所花费的时间。不幸的是,AWS 文档似乎没有提供一个很好的例子。我需要在消息本身中包含一个额外的 MessageAttribute 吗?
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 2021-12-07
  • 2022-11-22
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多