MySQL 使用 SQS 和 Lambda 进行 Aurora 连接管理

MySQL Aurora connection management with SQS and Lambda

我的系统中有一个用例,我需要每晚处理数百条用户记录。目前,我有一个预定的 Lambda 函数,它拉取所有要处理的用户并将每个用户放入 SQS 队列。然后我有另一个 Lambda 函数从这个队列中读取并处理处理。每个用户需要相当多的处理,每个用户使用相当多的连接。我在尽可能多的地方使用 mysql 事务来减少使用的连接。我 运行 遇到了我的 Aurora MySQL 数据库达到连接限制(当前为 1000)的问题。我尝试过调整批处理大小和 lambda 并发性,但我似乎仍然 运行 遇到问题。目前,批大小为 10,并发为 1。Lambda 函数不使用连接池,因为我发现这会导致更多连接问题。我是不是遗漏了什么,或者这只是 MySQL 和 Lambda 缩放的问题?

谢谢

Amazon RDS Proxy是AWS提供的解决方案,防止大量Lambda函数同时运行,超过数据库实例的连接限制。

或者,您可以使用这个技巧来限制 lambda 的速率:

  1. 创建另一个 SQS 队列并用一组有限的元素填充它。例如,说 100 个元素。您放入此队列的值无关紧要。重要的是数量。
  2. Lambda 被这个队列激活。
  3. 激活 lambda 后,它们会从您的第一个 SQS 队列请求下一个值,并处理用户。
  4. 如果没有更多用户需要处理,即如果第一个队列为空,则 lambda 退出而不连接到 Aurora。
  5. 每个 lambda 调用都会处理用户。完成后,它会断开与 Aurora 的连接,然后将一个新元素推送到第二个 SQS 队列作为最后一步,这会激活另一个 lambda。

这样,一次不会超过 100 个 lambda 运行。将此值调整为您希望同时允许的 lambda 表达式的数量。