提问者:小点点

关于mysql和连接池的高级问题(与AWS相关)


我目前正在使用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性能开始陷入麻烦,我是否缩放池连接限制? 反之亦然。

    为了达到这个目的,我试图理解这一切是如何工作的,这样我就可以正确地设置我的数据库/代码,这样一旦它开始扩展,事情就不会中断。

    谢谢。


  • 共1个答案

    匿名用户

    假设您在Lambda处理程序之外创建了池,那么该函数的每个实例都将创建自己的池。 每当请求一个函数时,如果没有该函数的空闲实例,就会创建一个新实例。 每个实例都创建其单独的池。 单个实例一次可以处理多个调用1。 单个实例的所有调用共享池。

    对问题1的答复:

    是的,如果由这些用户触发的所有调用最终都由函数的单个实例处理(一次处理1个),那么1个池可以支持1000个用户。

    对问题2的答复:

    RDS的DB connections count度量值将激增至10。 它计算连接数。 它不知道这些连接是否源于池。

    对问题3的答复:

    根据您的数据库大小设置连接限制&; 你希望你的Lambdas有多少流量。