本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如果您使用 Gremlin 語言變體來查詢 Neptune,驅動程式會使用 WebSocket 連線來連線到資料庫。WebSockets 旨在支援長期用戶端伺服器連線案例。 AWS Lambda另一方面, 旨在支援相對短暫且無狀態的執行。使用 Lambda 查詢 Neptune 時,這種在設計理念上的不相符可能會導致一些非預期的問題。
AWS Lambda 函數會在執行內容中執行,該內容會將函數與其他函數隔離。執行內容是在第一次調用函數時建立的,並且可在後續調用相同函數時重複使用。
不過,任何一個執行上下文永不會用來處理函數的多個並行調用。如果多個用戶端同時調用您的函數,Lambda 會為每個函數執行個體啟動額外的執行內容。所有這些新的執行內容可能轉而在後續的函數調用中重複使用。
在某些時間點,Lambda 會回收執行內容,特別是在它們已閒置一段時間的情況下。 透過 Lambda 延伸模組, 會 AWS Lambda 公開執行內容生命週期,包括 Init
、 Invoke
和 Shutdown
階段。使用這些延伸模組,您可以撰寫程式碼,在回收執行內容時清除外部資源,例如資料庫連線。
常見的最佳實務是在 Lambda 處理常式函數之外開啟資料庫連線,以便可在每次呼叫處理常式時重複使用。如果資料庫連線在某個時候中斷,您可以從處理常式內部重新連線。不過,使用此方法存在連線洩漏的危險。如果閒置連線在執行內容銷毀後長時間保持開啟狀態,則間歇性或突發性 Lambda 調用案例可能會逐漸洩漏連線並耗盡資料庫資源。
Neptune 連線限制和連線逾時已隨著較新的引擎版本而變更。以前,每個執行個體最多支援 60,000 個 WebSocket 連線。現在,每個 Neptune 執行個體的並行 WebSocket 連線數目上限會隨執行個體類型而有所不同。
此外,從引擎 1.0.3.0 版開始,Neptune 會將連線的閒置逾時從一小時縮減至大約 20 分鐘。如果用戶端未關閉連線,連線會在 20 到 25 分鐘的閒置逾時後自動關閉。 AWS Lambda 不會記錄執行內容生命週期,但實驗顯示新的 Neptune 連線逾時與非作用中的 Lambda 執行內容逾時相符。回收非作用中執行內容時,其連線很有可能已被 Neptune 關閉,或者之後很快就會關閉。