当前位置: 首页 > 知识库问答 >
问题:

从AWS Lambda连接到MongoDB

华景焕
2023-03-14

我正在做一个NodeJS项目,似乎使用了非常常见的AWS设置。我的ApiGateway接收调用,触发lambda A,然后这个lambda根据从ApiGate传递的参数触发其他lambda,比如B或C。

Lambda A需要访问MongoDB,为了避免自己运行MongoDB时遇到麻烦,我决定使用mLab。ATM Lambda A正在使用NodeJS驱动程序访问MongoDB。现在,为了不在每次执行Lambda A时启动连接,我使用连接池,同样,在Lambda代码内部,在处理程序外部,我保留连接池,当多次调用Lambda时,它允许我重用连接。这看起来很好。然而,我不确定当Lambda A调用Lambda B并且Lambda需要访问mLab的MongoDB数据库时,如何处理连接。

  1. 是否可以以某种方式传递连接池,或者Lambda B必须保留自己的连接池?
  2. 我正在考虑使用mLab的Data API,它公开了MongoDB驱动程序的大部分操作,因此我可以使用HTTP调用,例如GET和POST对数据库运行命令。它似乎类似于RESTHeart。

我倾向于选项2,但在mLab的Data API上,它明确指出避免使用REST api,除非无法直接使用MongoDB驱动程序连接:

第一种方法是使用可用的MongoDB驱动程序之一进行连接,我们强烈建议使用这种方法来提高性能和功能。如果您使用驱动程序,则不需要使用我们的API。本文中记录的第二种方法是通过mLab的RESTful Data API进行连接。仅当您无法使用MongoDB驱动程序进行连接时才使用此方法。

考虑到所有这些,如何处理它是最好的?1或2,或者还有其他我应该考虑的选项吗?

共有1个答案

罗允晨
2023-03-14

不幸的是,您不能在lambdas之间“共享”mongo连接,因为最终会有一个特定于该实例的“物理”套接字连接。

我认为你的两种解决方案都很好,这取决于使用情况。

如果您倾向于在一个小时内在lambda A和B上保持稳定的平均并发(这是AWS保持lambda实例存活多长时间的经验法则),那么让它们都拥有自己的静态连接是一个很好的解决方案。这是因为请求很可能会到达一个已经启动并连接的lambda。我还认为“香草”mongo的节点驱动程序比RESTFul数据应用编程接口的节点驱动程序更成熟。

但是,如果负载出现峰值或不均匀,则可以使用 RESTFul Data API。这是因为您将管理与实例的打开连接数的责任集中在一个点上,这意味着在这些情况下,您不太可能打开不需要的连接,或者使用所有当前容量而必须等待建立新连接。

最终,这是一个概率负载平衡的游戏——要么将所有连接“集中”在一个中心位置(数据API ),以增加单个操作的延迟为代价,减少使用单个函数的影响,要么在函数级别进行集中,但更容易在不均匀并发下冷启动打开连接。

 类似资料:
  • 问题内容: 我可以从DOS提示符下成功连接到MySQL,但是当我尝试从cygwin连接时,它会挂起。 怎么了? 问题答案: 假设您具有MySQL的本机Windows版本,(命令提示符)Windows和Windows 之间没有终端仿真不兼容。提示没有出现。 要确认这一点,请键入命令并返回-它可能会起作用,但是命令的提示和回显(您键入的内容)会丢失。 系统属性或in中可能都存在一种解决方法,但是我从来

  • 我正在尝试通过JAVA代码在SAP HANA上使用火花SQL执行查询。在对数据帧对象调用任何操作时,当调用 时,我在代码段下方得到 java.io.NotSerializableException.In,不会引发可序列化异常。 错误堆栈跟踪: 线程“main”org.apache.spark中出现异常。SparkException:位于org.apache.spark.util.ClosureCl

  • 我正在尝试在Linux-Debian 8.11@Virtualbox上设置MSSQL数据库,但无法通过MSSQL MSSQL Server Management Studio连接到它 服务器是可ping的。 VirtualBox中的网络设置: 纯主机网络VirtualBox纯主机以太网适配器 有什么想法吗? 错误日志@服务器 https://pastebin.com/7WGEVg1a

  • 使用Database ricks笔记本,我能够从Database ricks连接到“雪花”,并使用“scala”将内容写入Snowflake中的表,但使用“python”无法正常工作。 我在数据砖中添加了这两个库,这有助于在数据砖和雪花之间建立联系:和。 我的目标是使用Databricks(用于机器学习- Spark)并在Databricks和雪花之间来回移动数据。 下面是我尝试将数据帧的内容写入

  • 我正在尝试使用同一版本的SolrJ从Java代码连接到运行5.3.1的Solr服务器。我在Eclipse中不断收到一条消息,HttpSolrServer已被弃用,但在任何地方都找不到它已被取代的内容。有人知道我如何使用SolrJ和当前的东西从Java连接到Solr吗?SolrJ文档似乎都表明HttpSolrServer是受支持的方式,但Eclipse对此并不满意。

  • 我遇到了从一个火花运行的AWS EMR集群连接到另一个立即运行的AWS EMR集群的问题。 用python编写的代码是: 通过aws