Aws lambda AWS lambda与数据库

Aws lambda AWS lambda与数据库,aws-lambda,connection-pooling,Aws Lambda,Connection Pooling,我从理论上一直了解到,创建与数据库的新连接是一项代价高昂的操作。所以我们应该保持开放的连接池,并将其用于db操作 当考虑AWS lambda时。假设lambda函数想要在db上运行,那么我们需要创建到db的连接。操作完成后,需要关闭数据库。如果同时执行100 s lambda函数,则执行100 s db connection open/close。这在理论上是个坏模式 如果是这样,那么在涉及数据库操作时使用AWS lambda是否不合适?连接池在无服务器上运行良好 i、 e 为什么您需要关闭DB

我从理论上一直了解到,创建与数据库的新连接是一项代价高昂的操作。所以我们应该保持开放的连接池,并将其用于db操作

当考虑AWS lambda时。假设lambda函数想要在db上运行,那么我们需要创建到db的连接。操作完成后,需要关闭数据库。如果同时执行100 s lambda函数,则执行100 s db connection open/close。这在理论上是个坏模式


如果是这样,那么在涉及数据库操作时使用AWS lambda是否不合适?

连接池在无服务器上运行良好 i、 e


为什么您需要关闭
DB
连接,而不是在
Lambda
函数中重用它

每个
Lambda
函数运行意味着一个
容器
,它们在运行后将保持活动状态一段时间(几个10分钟,如果您连续调用它,它将保持活动状态)

处于活动状态意味着每个
Lambda
函数在运行后保留内存区域,以便可以重用它们

例如,如果在
Lambda
函数中定义全局变量,如下所示。 (虽然是python代码,但我认为您可以理解,因为它非常简单)

如果每隔1秒调用
Lambda
函数,它将按如下方式打印

10
11
12
13
14
.
.
.
如您所见,调用的每个
Lambda
函数都使用相同的全局变量。 如果全局变量是DB connection怎么办?您可以重用它们,而不是在每次lambda调用时重新打开连接

但是,正如您所说,如果同时执行100个
Lambda
函数,将打开100个连接,因为每个
Lambda
并发分别意味着不同的
容器,具有不同的内存区域

但最后,100个连接将被重复使用,用于连续100次同时执行

----------编辑----------

我同意阿伦的评论。当通信量稳定且逐渐增加和减少时,我的答案将非常有用,这样连接就可以充分重用,并由服务器端的keep-alive关闭。流量的急剧增加和减少可能会浪费数据库连接,而不会适当关闭

----------编辑----2019-12-17

AWS宣布了新功能<;代码>;<;RDS代理>;<;代码>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;尽管它。 如果您通过RDS代理连接RDS,它将为您管理DB连接池(Lambda RDS)


有关详细信息,请参考此

我不完全相信您的答案。在Lambda中为DB连接使用全局变量并且不关闭它只有在Lambda在整个过程中非常活跃(即,如果Lambda持续接收到点击)时才是好的,但是在Lambda仅在一定时间内点击,并且没有再次点击的情况下(例如再点击5 ir 10分钟),然后,容器将在连接未正确关闭的情况下开始排水。如果同时,用户试图点击lambda,它将尝试创建新的容器,并且可能找不到合适数量的可用连接。创建连接池肯定有效。但问题是lambda进程何时被终止连接池未正确关闭。另一个问题是,在自动调整100秒连接池期间,将创建100秒连接池,这可能会耗尽最大连接限制。
variable = 10

def lambda_function(event, context):
    global variable
    print(variable)  
    variable += 1
10
11
12
13
14
.
.
.