aws-lambda - AWS Aurora / Lambda 无服务器生产环境偶尔出现峰值
问题描述
我们一直在使用 Aurora 无服务器数据库在 AWS Lambda / API Gateway 之外运行我们的生产 Web 应用程序。一年多来事情一直顺利进行,但最近(与高峰使用期的增加相吻合)我们经历了暂时的缓慢,在最坏的情况下,由于某种瓶颈导致数量激增而无法使用数据库连接数以及来自我们两个 API 的 4XX 和 5XX。
我们使用serverless-mysql库来执行查询和管理数据库连接。
已消除该问题的一些潜在原因:
- 没有长时间运行的查询锁定表或任何类似的东西(如
show full processlist
MySQL 所示),实际上没有查询运行时间超过 1 秒。slow_log
- 所有的调用
await serverlessMysql.query()
都紧随其后await serverlessMysql.end()
- 我们的数据库管理器类在 Lambda 处理程序之外实例化,因此不会在每次重用 Lambda 实例时重新实例化
- 我们已经调整了 serverless-mysql 的配置选项,这样重试就不会那么激进了。默认配置使其在重试连接时非常激进,无论是频率还是重试次数。这肯定有帮助,但并没有消除问题。
我可以发布哪些详细信息可以帮助某人诊断此问题?这是一个很大的痛苦。
解决方案
查看此应用程序的负载会很有帮助。我知道 Lambda 说起来容易做起来难。
你有点暗示它,但你可能会在你的极光无服务器实例设置的“容量类”上达到 Max Connections()。我已经打过几次了。使用 lambda 和无服务器极光很难发现,因为您没有传统上的日志记录。
除此之外,您遇到的核心问题似乎与您的应用程序创建的尖峰有关 - 因此您需要发现查询是否可能只是效率低下,并且一次运行太多次。使用 Lambda 日志几乎不可能解决这些问题。但是极光无服务器仍然会发生数据库锁。
为了帮助追查问题,您可以尝试以下方法:
- 设置 APM
我强烈建议您设置 NewRelic 并监控您的 Lambda 函数。
我很确定 NR 有免费试用选项,使用 APM 追踪此类问题似乎很简单。我无法告诉您使用可靠的 apm 解决这样的问题有多容易。
- 监控流量入口
同样,我不确定该应用程序在做什么,但有可能来自特定用户的网络流量激增会引发大量查询,从而使事情出错。如果可以的话,设置一个免费的 Cloudflare 帐户或其他代理,并更轻松地确定网络流量。
希望这可以帮助。
推荐阅读
- java - 使用 DriverManager 和 SpringBoot(Hibernate) 连接数据库的区别
- wordpress - 如何加快使用照片滑块的 Wordpress 网站加载时间
- python - DataFrame:基于字符串字典/json的其他列的新列
- csv - SSIS 错误找不到列“x”的列分隔符
- java - JavaFX 抛出错误“JavaFX 应用程序线程”
- javascript - 带有 next.js 的 Blob 图像 url 不起作用
- rx-java - 订阅者的 onComplete 方法是否由 Android 上的 Room 在后台线程上调用?
- flutter - 如何在颤振应用程序中将图像上传到 AWS s3 存储桶时获得响应
- content-security-policy - 如何使用通配符编写 CSP?
- sql - 用于从内部连接评估布尔逻辑的 SQL 查询