跨lambdas的AWS连接池

问题描述 投票:6回答:2

我们知道lambda是按执行时间收费的。所以现在我想从lambda连接到SQL Server DB。如果我在每个lambda中创建一个连接,那对lambda来说就会很重要。

有没有最好的方法来维持我的SQL连接在一个地方活着,并且能够在我的所有lambdas中使用。或者至少活着一个lambda用于多次执行。

我知道,lambdas应该被视为无国籍,但仍然,我正在为这个问题寻找更好的解决方案。我搜索了很多网站,但没有运气。我在Google中找不到AWS的帮助和参考。

c# amazon-web-services .net-core aws-lambda connection-pooling
2个回答
4
投票

是的,有一个更好的解决方案。

基本上,你是对的,Lambdas应该被视为无国籍。

但是,在AWS Lambda中,存在容器重用的概念。这意味着如果您经常调用Lambdas,那么很可能将用于您之前请求的同一容器用于提供当前请求。如果发生这种情况,那么您将获得之前的执行上下文,其中包括所有声明和数据库连接(处理程序代码除外),与之前的执行相同。

以下是AWS Lambda容器重用的文档

执行Lambda函数后,AWS Lambda会维护执行上下文一段时间,以预期另一个Lambda函数调用。实际上,如果AWS Lambda选择在再次调用Lambda函数时重用上下文,则服务在Lambda函数完成后冻结执行上下文并解冻上下文以供重用。此执行上下文重用方法具有以下含义:

  • Lambda函数代码中的任何声明(在处理程序代码之外,请参阅编程模型)仍然初始化,在再次调用函数时提供额外的优化。例如,如果Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。我们建议在代码中添加逻辑,以便在创建连接之前检查连接是否存在。

有关更多详细信息,请查看here


1
投票

我不知道它如何在lambda中使用C#,但我怀疑它应该像节点一样工作或者有些类似。

每个lambda函数在调用之后保持连接可用一段时间,所以如果你再次使用lambda函数它会重用那个连接,但我遇到了同样的问题,每个lambda函数都能读取和写入数据库,只是导致连接数跳跃。

我处理连接池的方法是让一个lambda函数负责连接到数据库,所有其他lambda函数调用这个函数来从数据库中获取他们想要的东西,因为lambda重用了它就像魅力一样的连接;我附上了我用过的一部分设计,可能会澄清我写的内容

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.