AWS中跨Lambda的连接池

时间:2018-06-28 04:58:17

标签: c# amazon-web-services .net-core aws-lambda connection-pooling

我们知道lambda是按执行时间收费的。所以现在我想从lambda连接到SQL Server DB。如果我在每个lambda中创建一个连接,那么lambda将会很繁琐。

是否有什么最佳方法可以将我的SQL连接保持在一个地方,并且可以在我所有的lambda上使用。或至少有一个lambda活着才能执行多次。

我知道,应将lambda视为无状态,但我仍在寻找解决此问题的更好方法。我搜索了许多站点,但没有运气。我在Google中发现对AWS的帮助和参考较少。

2 个答案:

答案 0 :(得分:3)

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

基本上,您是对的,应将Lambda视为无状态。

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

以下是有关AWS Lambda容器重用的记录

  

执行Lambda函数后,AWS Lambda会维护   在期待另一个Lambda的情况下执行上下文一段时间   函数调用。实际上,该服务将冻结执行   Lambda函数完成后的上下文,并解冻   重用(如果AWS Lambda选择在Lambda时重用上下文)   函数再次被调用。这种执行上下文重用方法具有   具有以下含义:

     
      
  • 您的Lambda函数代码中的任何声明(在处理程序代码之外,请参阅编程模型)保持初始化,从而提供了其他功能   再次调用该函数时的优化。 例如,如果您的   Lambda函数建立数据库连接,而不是   重新建立连接时,原始连接用于   随后的调用。我们建议您在代码中添加逻辑以进行检查   创建连接之前是否存在连接。
  •   

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

答案 1 :(得分:0)

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

每个lambda函数在调用后都会保持连接一段时间,因此,如果您可以再次使用该lambda函数,它将重用该连接,但是我遇到了同样的问题,即每个lambda函数都可以读取和写入数据库,这只会导致连接数量猛增。

我处理连接池的方式是拥有一个负责连接到数据库的lambda函数,所有其他lambda函数都调用此函数以从数据库中获取所需内容,并且因为lambda像它那样重用了连接魅力我已经附加了一部分设计,可以澄清我写的内容

enter image description here