3

我正在研究使用 Lambda@Edge 将从外部源生成的事件放入内部 SQS 队列中。lambda 只需要在必要时对其进行转换,放下手,然后离开。我希望这尽可能快,所以我的问题是,除了 SQS 之外,使用 SNS 是否有好处,还是应该只使用 SQS?

换句话说,给定这两种配置,对于最终用户来说,一种性能会更好吗?

A) 请求进入 Lambda@Edge,lambda 转换请求并将事件发送到 SNS,SNS 将事件发送到 SQS。

B) 请求进入 Lambds@Edge,lambda 转换请求并将事件直接放入 SQS。

编辑:

我说的是跨区域。

4

1 回答 1

4

如果按照此处所述进行配置,跨区域的 SNS 到 SQS 将显着加快。

最佳配置是在每个AWS 区域中创建一个同名的 SNS 主题,并将您的 SQS 队列(可能只是一个队列,在一个区域中)订阅所有这些主题。

当 Lambda@Edge 触发器正在运行时,该代码会在离查看器最近的区域中运行,并且process.env.AWS_REGION会告诉您每次调用的区域。

使用此信息初始化 SNS 客户端,并将消息发送到该区域中的 SNS 主题。SNS 将立即接受消息,但会以异步方式(从您的角度)跨区域将其传递到 SQS 队列——因此它不会阻止您的函数完成。直接从 Lambda 触发函数发出任何跨区域请求,无论是向 SQS 还是 SNS 都会增加您的延迟。

于 2018-11-08T03:04:30.113 回答