amazon-web-services - 发布到 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 集群上运行。
解决方案
似乎 AWS 以某种方式停用了未使用的 SNS 主题。我们现在正在做的是,我们每十分钟向主题发送一个“虚拟”保持活动消息,这dwellTime
对我们来说保持合理的低(<500ms)
推荐阅读
- javascript - 如何开始使用 mocha 对我的 Web 组件进行单元测试?
- python - 从 JSON 数据解释 Python 函数
- python - 编写 Min-Max 缩放函数
- reactjs - 自定义 React 大日历颜色
- ajax - 在 Laravel 中的 post 方法之后,无法通过 Ajax 调用重定向到新路由
- java - 是否可以将 ActionEvent 传递给标签上的“onMouseClick”?
- streamlink - Streamlink 如何在下载时寻找 X 分钟
- python - 让被调用的方法处理调用者类可以处理的业务是一种不好的做法吗?
- java - 如何使登录错误(“错误的用户名/密码”)在登录页面中更具体
- c - 试图理解 C 语法