最佳实践Serverless——数据库连接池

阅读时间:3分钟

连接池是快速数据库调用的关键;这是如何与功能

等待,连接池是什么?

我们更新我们的记忆连接池。简而言之,连接池可以帮助减少所需的资源连接到一个数据库,加快连接。雷竞技rabet官网取代了旧的方式,你将需要使用正确的凭证你每次打开一个连接请求到DB,连接池就完成了这个任务。池连接数据库,维护数据库的连接,大大减少了必须打开的连接数量。

池维护的所有权在DB物理连接,让一组活跃连接活着。当用户调用连接,池搜索一个可用的连接,使用,而不是打开一个新的。当应用程序调用关闭连接,连接而不是返回到连接池。所以下次调用DB,那个已经被打开。

通过维护一个开放的数据库的连接池,连接池是快速数据库连接所必需的。但在Serverless,许多人认为连接池是不可能的。所以我们这里神话的破灭。

为什么连接池Serverless“不能做”

很明显,我们说它可以(我们所做的),因此,引号“不能做”。说,有很多聪明的人使用很多强大的逻辑来解释为什么不能这样做。让我们先解决这个问题。

在这篇文章中,我们与上图,尤戴尔罗文说以下几点:

“Lambda函数是无状态和异步是伟大的,除了它是精彩的分享一些东西,例如连接池设置是昂贵的。连接池不是获得适当支持。安装及拆除的数据库连接为每个请求增加延迟和影响性能。”

换句话说,因为Serverless函数应该是无状态的,每个数据库连接还必须是无状态的。而不是与连接池连接一次,你应该需要连接到DB从头每次调用DB,因为Serverless,每个会话都是相互独立的。在理论上是有道理的,但这是真的吗?

如何在Serverless连接池

证明一如既往地在布丁。你可以看看我的Github库看到的例子连接池Serverless工作得很好。我们理解的误解是很常见的。事实上,欧麦尔Mansoor在CodeAhoy,一年前这个误解很好解决他的博客,他说:

不断涌现的一个常见的误解是,这不是一个合适的选择,使用一个数据库连接,因为你必须为每个请求创建一个数据库连接你收到,就不是这样的!”

那么怎么做?

简单。你可以存储变量范围之外的我们的处理函数。这意味着您可以创建您的数据库连接池外的处理函数,然后可以分享给每一个未来的调用该函数。这允许池发生。同样的,你可以看看我的GitHub的例子

const mysql =要求(mysql);常量池= mysql。createPool({主持人:{您的主机}、用户:{}你的用户名,密码:}{你的密码,数据库:数据库{},端口:3306});出口。主要主要= function(点播){让查询= " "返回新的承诺(函数(解决,拒绝){返回解决({statusCode: 200,身体:“成功”});})}

请再次注意,连接这个数据库之外的功能。

更新:如果你想看连接池的力量在行动看看这些截图所示。第一映像是图从Spotinst控制台显示的次数,我们的MySQL函数调用连接池。正如你所看到的图峰值几乎80调用!但如果你看看第二个图像取自AWS,数据库连接同一时间只上升到1。这表明我们的函数能够维护一个数据库连接,还成功地使多个调用。

Baidu
map