2 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
問題是在第一個請求(真正的請求,而不是預(yù)熱請求,因為預(yù)熱請求不會通過您的應(yīng)用程序代碼,它不會觸發(fā)加載實際請求路徑中使用的類)JVM 加載(讀取、解析、驗證等...)相關(guān)類,初始化安全組件(密碼等...)并完成 TLS 握手(需要多個 RTT,使用 Java 9 和 TLS 1.3,這應(yīng)該減少)。
首次 AWS 服務(wù)調(diào)用(DynamoDB、SQS 等)也出現(xiàn)了類似的長時間行為
由于我是 Thundra 預(yù)熱插件的作者,我正在考慮為預(yù)熱消息引入掛鉤點,因為自定義操作將能夠執(zhí)行,如初始化安全組件、加載類等......

TA貢獻1864條經(jīng)驗 獲得超6個贊
VPC 內(nèi)的 Lambda 函數(shù)對啟動時間有很大影響。您說您的 ES 是托管實例,所以我假設(shè)它由 VPC 支持。
即使不在 VPC 中,Java 冷啟動通常也比 Node 或 Python 等運行時長,因為需要先啟動 JVM。這主要是您的 2.5 秒的來源。
好的。如何解決問題?
這取決于 ElasticSearch 需要多少并發(fā)連接。如果一個函數(shù)能夠處理所有傳入請求,那么您可以將 Lambda 函數(shù)的并發(fā)執(zhí)行限制為 1,因此您可以確保始終訪問同一個容器(只要這些請求是在 ±5 分鐘內(nèi)發(fā)出的)大體時間)。
現(xiàn)在,如果您事先不知道將執(zhí)行多少并發(fā) Lambda 函數(shù),那么您就沒有出路了。您可以嘗試預(yù)先預(yù)熱您的 Lambda 函數(shù),但是您需要同時觸發(fā) 100 個請求來預(yù)熱 100 個不同的容器。
當(dāng)我瀏覽 Lambda 函數(shù)的并發(fā)模型以及冷/熱啟動如何工作時,請檢查此答案。
如果您有更多信息要分享或者我不夠清楚,我很樂意編輯我的答案。
添加回答
舉報