Lambda与SNS的节流行为

4
阅读SNS FAQ中有关Lambda函数重试行为的部分时,我遇到了以下声明:
Q:如果订阅端点不可用会发生什么情况?
Lambda: 如果Lambda不可用,则SNS将每隔1秒重试2次,然后指数回退10次,从1秒到20分钟,最后每20分钟重试38次,在超过13小时的时间内进行50次尝试,然后消息将从SNS中丢弃。
据我所知,Lambda函数实现了自己的重试机制以节流,如Lambda Throttling Bevaviour Documentation中提到的:
异步调用:如果您的Lambda函数被异步调用并被限制,则AWS Lambda会自动在六小时内重试被限制的事件,每次重试之间有延迟。
当函数被限流并出现另一个SNS消息时,到底会发生什么?SNS是否将Lambda视为“可用”,并中止重试机制,使Lambda自动重试,还是会继续尝试传递消息?
1个回答

4

“available”一词指的是SNS联系Lambda服务并提交单个请求以调用函数的能力。

理解这一点的关键在于,您首先需要知道SNS 异步调用Lambda函数,然后您需要了解其含义。

异步调用请求不会向调用者(在此情况下为SNS)提供任何反馈,无论函数是否立即运行或被限制,以及是否成功或引发异常。

SNS >> Lambda: "Hi, run this Lambda function asynchronously, with this payload."
Lambda >> SNS: "Okay, I received your request and will do that as soon as it is possible. Goodbye."

调用者(SNS)不关心后续的具体细节。成功发出请求后,SNS已经完成了该消息的处理,现在由Lambda服务立即调用函数和/或参与记录在文档中的Lambda重试行为。每条消息SNS只会联系一次Lambda服务。当无法联系时,Lambda就不“可用”了。这种情况应该非常少见……但如果SNS无法联系,那么SNS将执行SNS FAQ中描述的行为——尝试提交请求以调用函数。一旦完成,SNS的角色就完成了,其余部分由Lambda服务处理。在SNS/Lambda集成中,每个消息都是独立处理的,SNS尽快将每个消息交接出去,而SNS并不知道随后是否被限流。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接