发布到 SNS Topic/SQS 订阅的延迟?
Latency on publishing to SNS Topic/SQS Subscription?
我们目前正在 Amazon 的 AWS 上实施分布式 Spring 启动微服务架构,我们使用 SNS/SQS 作为我们的消息系统:
事件由 Spring 引导服务使用 Spring Cloud AWS 发布到 SNS FIFO 主题。该主题将事件移交给订阅该主题的多个 SQS 队列,然后这些队列依次被不同的消费者服务使用(再次 Spring 使用 Spring Cloud AWS 启动)。
一切都按预期进行,但有时我们的生产服务延迟非常高。
我们的产品尚未发布(我们目前正在测试中),这意味着我们的产品流量非常非常低,即每天只有几条消息。
不幸的是,我们发现在长时间不活动(通常长达 6 秒,但也可能高达 60 秒)后将消息传递给订阅者之前,延迟非常高。之后事情会大大加快,下一条消息发送到该主题的消息传递时间降至 100 毫秒以下。
在 AWS 中打开 SNS 主题日志显示,第一条消息的大部分延迟都花在了事物的 SNS 部分,其中 SNS dwellTime
与我们在中看到的延迟大致相关消息传递。 Spring Cloud AWS 看起来不错。
这是意料之中的事吗?空闲 SNS FIFO 主题是否有类似“冷启动”的时间(如使用 AWS lambda 时所见)?一旦我们增加负载并使话题升温,这种延迟是否会消失?还是我们遗漏了什么配置?
我们使用的是相当标准的 SQS 订阅,顺便说一句,没有适当的订阅限制。 Fargate ECS 集群上的 Spring 引导服务 运行。
似乎 AWS 以某种方式停用了未使用的 SNS 主题。我们现在正在做的是,我们每十分钟向主题发送一条“虚拟”Keep-Alive 消息,这使 dwellTime
对我们来说相当低 (<500ms)
我们目前正在 Amazon 的 AWS 上实施分布式 Spring 启动微服务架构,我们使用 SNS/SQS 作为我们的消息系统:
事件由 Spring 引导服务使用 Spring Cloud AWS 发布到 SNS FIFO 主题。该主题将事件移交给订阅该主题的多个 SQS 队列,然后这些队列依次被不同的消费者服务使用(再次 Spring 使用 Spring Cloud AWS 启动)。
一切都按预期进行,但有时我们的生产服务延迟非常高。
我们的产品尚未发布(我们目前正在测试中),这意味着我们的产品流量非常非常低,即每天只有几条消息。
不幸的是,我们发现在长时间不活动(通常长达 6 秒,但也可能高达 60 秒)后将消息传递给订阅者之前,延迟非常高。之后事情会大大加快,下一条消息发送到该主题的消息传递时间降至 100 毫秒以下。
在 AWS 中打开 SNS 主题日志显示,第一条消息的大部分延迟都花在了事物的 SNS 部分,其中 SNS dwellTime
与我们在中看到的延迟大致相关消息传递。 Spring Cloud AWS 看起来不错。
这是意料之中的事吗?空闲 SNS FIFO 主题是否有类似“冷启动”的时间(如使用 AWS lambda 时所见)?一旦我们增加负载并使话题升温,这种延迟是否会消失?还是我们遗漏了什么配置?
我们使用的是相当标准的 SQS 订阅,顺便说一句,没有适当的订阅限制。 Fargate ECS 集群上的 Spring 引导服务 运行。
似乎 AWS 以某种方式停用了未使用的 SNS 主题。我们现在正在做的是,我们每十分钟向主题发送一条“虚拟”Keep-Alive 消息,这使 dwellTime
对我们来说相当低 (<500ms)