我目前正在使用AWS lambda连接到AWS mysql RDS。 我正在创建一个像这样的游泳池
pool = mysql.createPool({
host : 'host-details',
user : 'username',
password : 'password',
database : 'db'
});
现在,当应用程序的用户“做某事”时,它基本上只是通过我的代码连接,从db表中抓取数据,然后释放连接。 假设有10个用户,他们同时“做某事”,这意味着:
>
此池中将有10个连接,一旦连接释放,该连接计数将返回到0? 如果是这样的话,这是否意味着这个池(即使它有50个连接的限制)可以支持数千个用户,因为DB查询只持续几毫秒?
查看AWS中的RDS监控,有一个“DB连接(计数)”的度量。 上面的场景是否意味着它将停留在1个连接(因为它是1个池),还是会激增到10个连接?
根据我的理解,如果我的连接限制为池的8个,并且出现了上面的场景,那么其他2个连接将会排队。 是什么阻止我将连接限制设置得极高,这仅仅是数据库能够处理什么的一个因素吗? 如果我看到我的DB内存/CPU性能开始陷入麻烦,我是否缩放池连接限制? 反之亦然。
为了达到这个目的,我试图理解这一切是如何工作的,这样我就可以正确地设置我的数据库/代码,这样一旦它开始扩展,事情就不会中断。
谢谢。
假设您在Lambda处理程序之外创建了池,那么该函数的每个实例都将创建自己的池。 每当请求一个函数时,如果没有该函数的空闲实例,就会创建一个新实例。 每个实例都创建其单独的池。 单个实例一次可以处理多个调用1。 单个实例的所有调用共享池。
对问题1的答复:
是的,如果由这些用户触发的所有调用最终都由函数的单个实例处理(一次处理1个),那么1个池可以支持1000个用户。
对问题2的答复:
RDS的DB connections count度量值将激增至10。 它计算连接数。 它不知道这些连接是否源于池。
对问题3的答复:
根据您的数据库大小设置连接限制&; 你希望你的Lambdas有多少流量。