簡體   English   中英

從AWS Lambda連接到MongoDB

[英]Connecting from AWS Lambda to MongoDB

我正在研究NodeJS項目,並且似乎使用了非常常見的AWS設置。 我的ApiGateway收到呼叫,觸發lambda A,然后此lambda A觸發其他lambda,例如B或C,具體取決於從ApiGateway傳遞的參數。

Lambda A需要訪問MongoDB,為避免自己親自運行MongoDB帶來麻煩,我決定使用mLab。 ATM Lambda A正在使用NodeJS驅動程序訪問MongoDB。 現在,不再開始與每個Lambda A執行連接,我還是在Lambda A代碼內部使用連接池,在處理程序之外,我保留了連接池,允許我多次調用Lambda A時重用連接。 這似乎工作正常。 但是,當Lambda A調用Lambda B並且Lambda B需要訪問mLab的MongoDB數據庫時,我不確定如何處理連接。

  1. 是否可以以某種方式傳遞連接池,或者Lambda B必須保留自己的連接池?
  2. 我當時在考慮使用mLab的數據API ,該API公開MongoDB驅動程序的大部分操作,因此我可以使用HTTP調用(例如GET和POST)對數據庫運行命令。 它似乎與RESTHeart相似。

我傾向於選擇2,但是在mLab的Data API上,它明確指出要避免使用REST api,除非無法直接使用MongoDB驅動程序進行連接:


第一種方法(我們強烈建議盡可能采用這種方法以提高性能和功能)是使用一個可用的MongoDB驅動程序進行連接。 如果使用驅動程序,則無需使用我們的API。 本文記錄的第二種方法是通過mLab的RESTful Data API進行連接。 僅當無法使用MongoDB驅動程序進行連接時,才使用此方法。


考慮到所有這些,如何最好地解決呢? 1或2,還是我應該考慮的其他選擇?

不幸的是,您將無法在Lambda上“共享” mongo連接,因為最終該連接具有特定於該實例的“物理”套接字。

我認為您的兩種解決方案都取決於使用情況。

如果您傾向於在一小時內在Lambda A和Lambda B上都具有穩定的平均並發性(這是AWS保持Lambda實例存活多長時間的經驗法則),那么讓它們都擁有自己的靜態連接是一個好的解決方案。 這是因為請求很可能到達已啟動並已連接的lambda。 我還要猜測,“香草” mongo的節點驅動程序要比RESTFul Data API的成熟。

但是,如果您遇到尖峰負載或負載不均勻,則可以使用RESTFul Data API。 這是因為您將把管理實例的打開連接數的責任集中到一個點上,這在這種情況下意味着您不太可能打開不需要的連接,或者使用所有當前容量並擁有等待建立新的連接。

歸根結底,這是一個概率負載平衡的游戲-您可以將所有連接“合並”到一個中央位置(Data API),並且不受單個功能使用的影響較小,但會增加單個操作的延遲,或者您將它們合並在功能級別上,但是在並發不均的情況下更容易受到冷啟動打開連接的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM