amazon-web-services - 在 s3 中上传 400k 文件怎么会有 500 万条消息计数
问题描述
我已经配置了一个 AWS 管道,以便我的 S3 中的对象创建事件创建一条 SQS 消息。我正在使用标准 SQS 队列。上周,当我注意到 400k .3des 文件需要很长时间才能处理时,这个问题浮出水面。应用程序日志显示,我的代码逻辑必须在 3 天内处理近 500 万条消息,但 aws 命令显示仅上传了 400k 文件,AWS 控制台从未显示消息计数高于 500k。
我的研究表明,标准队列可能会创建重复的消息,但是消息计数应该以百万为单位显示,而它从来没有这样做过。我还无法为较小的数据集复制该问题,因为每个对象上传都会创建一条 SQS 消息。
我对可能的原因一无所知。
解决方案
我认为您不会将每条消息传递超过 10 次。既然您提到了应用程序日志,我将假设您在某处的服务器上运行了一个进程。
我的第一个想法是您的应用程序服务器开始出现性能问题,并且无法在超时之前处理每条 SQS 消息。这将导致 SQS 将消息放回队列中。
问题是您如何确认这一点?如果您进入 SQS 仪表板并选择您的 SQS,然后单击“监控”选项卡。确保更新您的时间范围,因为它默认为一小时。由于这是一个多星期前,您可能希望使用 CloudWatch->Metrics,因为您可以创建一个绝对时间范围来将数据限制在问题发生的时间。
首先让我们确认 SQS 指标与您的应用程序指标相匹配的时间窗口: NumberOfMessagesSent:这应该等于 400k。NumberOfMessagesReceived:这应该等于 500 万。NumberOfMessagesDeleted:这应该等于大约 500k。ApproximateAgeOfOldestMessage:随着消息等待处理,此数字应在 3 天内增加。
如果您没有获得这些数字,请发布您的指标,因为它将提供更好的洞察力。
还有几个问题需要你考虑。- 你有多少人接收器?- 如果您在处理完消息后才删除消息,则 ApproximateNumberOfMessagesNotVisable 指标应该接近接收者的数量。如果是 > 那么您的应用程序不会删除消息。如果它是 < 那么它可以表明您的应用程序在超时之前没有处理消息。
很难确切地告诉你发生了什么,但希望这会有所帮助。
推荐阅读
- html - 在下拉列表中捕获粘贴事件
- php - 在 PHP 中使用 foreach 创建的表单中的输入,如何使用 post 方法传递所有输入值?
- sql-server - sql statement.exec 错误:mssql:“?”附近的语法不正确
- python - 如何使用正则表达式在单词“foo”之后获取所有单词“bar”
- ios - App Store 和 TestFlight 的不同图标 - 相同的构建
- npm - 找不到模块'jquery.tagsinput-revisited
- laravel - 为订阅添加付款方式时出现资源缺失错误
- javascript - ngx 拖放 - 取消绑定鼠标事件
- python - 我一次又一次得到这个错误,请告诉我为什么
- reactjs - 我将我的状态作为道具传递,但它显示为空。为什么?