首页 > 解决方案 > 发布到 SNS 主题/SQS 订阅的延迟?

问题描述

我们目前正在亚马逊的 AWS 上实现分布式 Spring Boot 微服务架构,我们使用 SNS/SQS 作为我们的消息传递系统:

事件由 Spring Boot 服务使用 Spring Cloud AWS 发布到 SNS FIFO 主题。主题将事件移交给订阅该主题的多个 SQS 队列,然后这些队列依次被不同的消费者服务使用(再次使用 Spring Cloud AWS 的 Spring Boot)。

一切都按预期工作,但我们有时会看到生产服务的延迟非常高。

我们的产品还没有发布(我们目前正在测试中),这意味着我们在产品上的流量非常非常低,即每天只有几条消息。

不幸的是,在长时间不活动(通常长达 6 秒,但也可能高达 60 秒)后,在将消息传递给其订阅者之前,我们发现延迟非常高。之后事情会大大加快,下一条消息发送到主题的消息传递时间降至 100 毫秒以下。

在 AWS 中打开 SNS 主题的日志记录显示,第一条消息的大部分延迟都花费在 SNS 部分,其中 SNSdwellTime与我们在消息传递中看到的延迟大致相关。Spring Cloud AWS 看起来不错。

这是预期的吗?空闲 SNS FIFO 主题是否有类似“冷启动”时间的东西(如使用 AWS lambdas 时所见)?一旦我们增加负载并加热话题,这种延迟会消失吗?还是我们错过了配置?

我们正在使用相当标准的 SQS 订阅,顺便说一句,没有适当的订阅限制。Spring Boot 服务在 Fargate ECS 集群上运行。

标签: amazon-web-servicesspring-cloudamazon-sqsamazon-snsspring-cloud-aws

解决方案


似乎 AWS 以某种方式停用了未使用的 SNS 主题。我们现在正在做的是,我们每十分钟向主题发送一个“虚拟”保持活动消息,这dwellTime对我们来说保持合理的低(<500ms)


推荐阅读