数据库
首页 > 数据库> > 如何处理来自Lambda的MySQL数据库连接/池 – >带有Node的RDS

如何处理来自Lambda的MySQL数据库连接/池 – >带有Node的RDS

作者:互联网

我在测试Lambda函数时遇到了一些问题.我的测试,我执行我的Lambda函数的并行N次执行.在我的lambda函数中,我通过Knex检索数据库连接.我正在搞乱db init pool中的设置:{min:0,max:[1或5]},这似乎可以修复/破坏内容,具体取决于我的代码中的其他内容.

执行我的lambda函数20次输出正确的结果,然而,当我将它提高到500(我期望在生产中看到的将很容易超过这个),事情开始破裂.我遇到错误,如错误:ER_CON_COUNT_ERROR:连接太多,错误:池正在耗尽,无法接受工作(如果我在lambda函数结束时使用Knex的knex.destroy()接口).在AWS Lambda和RDS中处理扩展连接和池的正确方法是什么?如果我在AWS上运行相同的压力测试,我在本地计算机上看到的问题是否会复制?

解决方法:

分离成千上万个进程来执行一小部分任务很简单.但效率低下. “进程”是重量级的.线程有点沉重.可能有数千个与MySQL的连接,但并非所有连接都在同一时间.

在任何多进程或多线程环境中,“太多”会降低速度.这是因为OS(或某个实体)正在做很多工作来分享不足的资源.例如,MySQL可以处理数百个空闲连接,但是由于有几十个活动连接而陷入困境.当超过这个数量时,最好将链向上移动到客户端,并限制它产生新连接的频率.

我不熟悉你提到的其他产品,但我建议将同步活动保持在几十个而不是几百个.

或找到一种方法.在你的应用程序中,“迭代”而不是“递归”.同时,请记住,MySQL处理数据的“向量”(表)比处理单个行更快乐.也许你可以将应用程序中的“并行”部分作为“向量”推送到MySQL中?双赢:联系更少; MySQL的效率更高.

标签:mysql,connection-pooling,amazon-rds,aws
来源: https://codeday.me/bug/20190806/1600558.html