【问题标题】:AWS Aurora / Lambda serverless production environment exhibiting occasional spikesAWS Aurora / Lambda 无服务器生产环境偶尔出现峰值
【发布时间】:2020-06-04 20:06:18
【问题描述】:

我们一直在使用 Aurora 无服务器数据库在 AWS Lambda / API Gateway 之外运行我们的生产 Web 应用程序。一年多来事情一直顺利进行,但最近(与高峰使用期的增加相吻合)我们经历了暂时的缓慢,在最坏的情况下,由于某种瓶颈导致数量激增而无法使用数据库连接数以及来自我们两个 API 的 4XX 和 5XX。

我们使用 serverless-mysql 库来执行查询和管理数据库连接。

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

  • 没有长时间运行的查询锁定表或任何类似的东西(如 MySQL 中的show full processlist 所示),实际上根据我们的slow_log,没有查询运行时间超过 1 秒
  • 所有对await serverlessMysql.query() 的调用都紧跟await serverlessMysql.end()
  • 我们的数据库管理器类在 Lambda 处理程序之外实例化,因此不会在每次重用 Lambda 实例时重新实例化
  • 我们调整了 serverless-mysql 的配置选项,这样重试就不会那么激进了。默认配置使其在重试连接时非常激进,无论是频率还是重试次数。这肯定有帮助,但并没有消除问题。

我可以发布哪些详细信息可以帮助某人诊断此问题?真是让人头疼。

【问题讨论】:

  • 来自无服务器生产实例的其他信息请求。 RAM 大小、# 核心、MySQL 主机服务器上的任何 SSD 或 NVME 设备?在 pastebin.com 上发布并分享链接。从您的 SSH 登录根目录中,文本结果为:B) SHOW GLOBAL STATUS;至少 24 小时正常运行时间后 C) 显示全局变量; D) 显示完整的处理程序;为服务器工作负载调优分析提供建议。

标签: aws-lambda aws-serverless aws-aurora-serverless


【解决方案1】:

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

您有点暗示,但您可能会在您的极光无服务器实例设置的“容量等级”上达到 Max Connections()。我已经打过几次了。使用 lambda 和无服务器极光很难发现,因为您没有传统上的日志记录。

除此之外,您遇到的核心问题似乎与您的应用程序产生的峰值有关 - 因此您需要发现查询是否可能只是效率低下,并且一次运行太多次。使用 Lambda 日志几乎不可能解决这些问题。但是极光无服务器仍然会发生数据库锁。

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

  • 设置 APM

我强烈建议您设置 NewRelic 并监控您的 Lambda 函数。

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

  • 监控流量入口

同样,我不确定此应用程序在做什么,但有可能来自特定用户的网络流量激增会引发大量查询,从而使事情出错。如果可以的话,设置一个免费的 Cloudflare 帐户或其他一些代理,并更轻松地确定网络流量。

希望这会有所帮助。

【讨论】:

  • 太棒了,谢谢,我会检查这些并发布它的进展情况。我确实知道我没有达到容量等级的最大连接数。或者更确切地说,不正常。当出现“峰值”时,连接数会迅速跃升至该最大值。这似乎是问题的结果而不是原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2019-07-09
  • 2021-01-27
  • 2016-03-03
  • 2019-06-15
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多