使用檔案系統 (AWS EFS) 作為 Lambda 函數的廉價資料庫

使用檔案系統 (AWS EFS) 作為 Lambda 函數的廉價資料庫

我正在設計一個資料庫,可以輕鬆地表示為包含固定大小記錄的大型檔案集合,序號為 0,1,... 這可以很好地適合 DynamoDB,檔案名稱作為主鍵,記錄序號作為排序關鍵,但我正在考慮在EFS 上使用鬆散文件。我不需要任何複製,因為這已經是容錯系統中的複製。我的 Lambda 函數不需要任何比讀取、寫入或更新單一記錄更複雜的操作,這些記錄始終位於已知檔案中的已知偏移量處。可能有 100 個同時活動的 lambda,但通常會存取不同的檔案。看起來我可以使用 fcntl/lockf 來同步任何爭用。

從信封後面看,使用原始文件似乎至少可以將成本減少一半,而且我猜性能也會更好。我可能會後悔這樣做的原因有哪些?

答案1

根據一些簡單的實驗,這種方法是可行的。使用 Rust,我能夠在大約 20 毫秒的 Lambda 運行時(重複呼叫時)更新檔案。使用 fcntl 建議鎖定 (F_SETLKW),我對少數並發 Lambda 爭用相同檔案沒有任何問題。在沒有爭用的情況下,延遲高達 30 毫秒左右,而爭用期間的等待時間是預期的。

看起來這些與 dynamoDB 處於同一水平。不過,我在很多地方看到了關於避免對涉及許多小文件的工作負載使用 EFS 的建議。但是,我想這通常與 EBS 相關,並忽略我可以透過每個請求 1 個 Lambda 實現的簡單並發。

我猜測要使用 dynamoDB 擊敗這種效能,我需要使用簡單佇列服務來限制並發 Lambda 的數量。

我預見的最大缺點之一是可升級性。如果需要對文件格式進行任何更改,它很快就會變得混亂。核心工作流程以外的任何類型的查詢都需要自訂實作。

答案2

我想應該是可以的。這篇文章有一些有用的資訊…

https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/

相關內容