c# - AWS 中跨 lambda 的连接池
问题描述
我们知道 lambda 是按执行时间收费的。所以现在我想从 lambda 连接到 SQL Server DB。如果我在每个 lambda 中创建一个连接,那么 lambda 会很重。
有什么最好的方法可以在一个地方维持我的 SQL 连接并且能够在我的所有 lambdas 中使用。或者至少对于一个 lambda 进行多次执行是有效的。
我知道,lambdas 应该被视为无状态,但是,我仍然在为这个问题寻找更好的解决方案。我搜索了很多网站,但没有运气。我在 google 中找到的 AWS 帮助和参考资料较少。
解决方案
是的,有更好的解决方案。
基本上,你是对的,Lambdas 应该被视为无状态的。
但是,在 AWS Lambda 中有容器重用的概念。这意味着,如果您频繁调用 Lambda,那么为您之前的请求提供服务的同一个容器很可能会用于为您当前的请求提供服务。如果发生这种情况,那么您将获得前一个执行上下文,其中包括所有声明和数据库连接(处理程序代码除外),就像前一次执行一样。
以下是 AWS Lambda 容器重用的文档
执行 Lambda 函数后,AWS Lambda 会在一段时间内维护执行上下文,以期待另一个 Lambda 函数调用。实际上,如果 AWS Lambda 在再次调用 Lambda 函数时选择重用上下文,服务会在 Lambda 函数完成后冻结执行上下文,并解冻上下文以供重用。这种执行上下文重用方法具有以下含义:
- 您的 Lambda 函数代码(处理程序代码之外,请参阅编程模型)中的任何声明都保持初始化状态,从而在再次调用函数时提供额外的优化。例如,如果您的 Lambda 函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。我们建议在您的代码中添加逻辑以在创建连接之前检查连接是否存在。
有关更多详细信息,请查看此处
推荐阅读
- windows - 如何解决windows中的这个错误,在执行合并命令时发现异常。org.eclipse.jgit.errors.CorruptObjectException:无效路径:
- sql - 从同一个表中的列创建电子邮件地址
- python-3.x - AttributeError:“列表”对象没有属性“特征”
- java - 用Java编写程序,通过数组和乘法后弹出元素
- c# - 如何使用 Speechsynthezier 在设备上设置和发送语言?(Windows.Media.Speechsynthesis)
- ruby-on-rails - 如何从 ruby on rails 中的元标记中获取内容值?
- linkedin - 通过 LinkedIn API V2 创建图像共享不起作用
- android - Android 项目:这项工作被卡住了,因为该项目没有在线分配任何跑步者。进入跑步者页面
- pyqt5 - 运行pyqt5程序,报错:此应用程序无法启动,因为它无法在“”中找到或加载Qt平台插件“xcb”
- python - 将 tensorflow 运算符分别应用于批处理中的每个数据,但需要并行运行它们