Aws lambda AWS Aurora/Lambda无服务器生产环境偶尔出现峰值

Aws lambda AWS Aurora/Lambda无服务器生产环境偶尔出现峰值,aws-lambda,aws-serverless,aws-aurora-serverless,Aws Lambda,Aws Serverless,Aws Aurora Serverless,我们已经在AWS Lambda/API网关上运行了我们的生产web应用程序,带有Aurora无服务器数据库。一年多以来,一切都很顺利,但最近(与高峰使用时间的大幅增加相吻合),我们遇到了暂时的缓慢,最糟糕的情况是不可用,这是由于某种瓶颈导致DB连接数量激增以及两个API的4XX和5XX 我们正在使用无服务器mysql库执行查询和管理数据库连接 已消除问题的一些潜在原因: 没有长时间运行的查询会锁定表或类似的内容(如MySQL中的show full processlist所示),事实上,根据我们

我们已经在AWS Lambda/API网关上运行了我们的生产web应用程序,带有Aurora无服务器数据库。一年多以来,一切都很顺利,但最近(与高峰使用时间的大幅增加相吻合),我们遇到了暂时的缓慢,最糟糕的情况是不可用,这是由于某种瓶颈导致DB连接数量激增以及两个API的4XX和5XX

我们正在使用无服务器mysql库执行查询和管理数据库连接

已消除问题的一些潜在原因:

  • 没有长时间运行的查询会锁定表或类似的内容(如MySQL中的
    show full processlist
    所示),事实上,根据我们的
    slow\u log
  • await serverlessMysql.query()
    的所有调用后面紧跟着
    await serverlessMysql.end()
  • 我们的数据库管理器类是在Lambda处理程序外部实例化的,因此不会在每次重用Lambda实例时重新实例化它
  • 我们已经调整了无服务器mysql的配置选项,这样重试就不会那么激烈。默认配置使其在重试连接时非常积极,无论是在频率还是重试次数上。这肯定有帮助,但并没有消除问题

我可以发布哪些有助于诊断此问题的详细信息?这是一个让人头疼的问题。

看看这个应用程序的负载情况会很有帮助。我知道用Lambda说起来容易做起来难

您有点暗示了这一点,但有可能您在aurora serverless实例设置为的“capacity类”上遇到了Max Connections()。我已经打过几次了。使用lambda和无服务器的aurora很难发现,因为您没有传统的日志记录

除此之外,您遇到的核心问题似乎与应用程序中创建的峰值有关,因此您需要发现查询是否效率低下,并且一次运行的次数过多。使用Lambda日志几乎不可能解决这些问题。但是数据库锁仍然在aurora serverless中出现

为了帮助追踪问题,您可以尝试以下方法:

  • 设置APM
我非常非常推荐使用NewRelic设置和监视Lambda函数

我很确定NR有一个免费试用的选择,用APM追踪这样的问题似乎很简单。我无法告诉你用一个可靠的apm解决像这样的问题有多容易

  • 监控交通进入
同样,我也不确定这个应用程序在做什么,但有可能是某个特定用户的网络流量激增引发了大量的查询,使事情出错。如果可以,设置一个免费的Cloudflare帐户或其他代理,并更轻松地确定网络流量


希望这能有所帮助。

太棒了,谢谢你,我会看看这些,然后发布进展情况。我知道我没有达到容量类的最大连接数。或者更确切地说,不正常。当出现“尖峰”时,连接数会迅速上升到该最大值。这似乎是问题的结果,而不是原因。来自无服务器生产实例的其他信息请求。RAM大小、#内核、MySQL主机服务器上的任何SSD或NVME设备?在pastebin.com上发布并共享链接。从SSH登录根目录中,文本结果为:B)显示全局状态;至少24小时正常运行后C)显示全局变量;D) 显示完整的进程列表;为服务器工作负载优化分析提供建议。