」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用適用於 Java 的 AWS 開發工具包實作 Amazon Aurora Serverless 的資料 API - 冷啟動和熱啟動的部分比較:資料 API 與 DynamoDB

使用適用於 Java 的 AWS 開發工具包實作 Amazon Aurora Serverless 的資料 API - 冷啟動和熱啟動的部分比較:資料 API 與 DynamoDB

發佈於2024-07-29
瀏覽:361

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part omparing cold and warm starts: Data API vs DynamoDB

介紹

在系列的第7 部分中,使用適用於Java 的AWS 開發工具包的Amazon Aurora Serverless v2 的資料API - 資料API 與SnapStart 的結合,我們使用Data 測量了連接到Amazon Aurora Serverless v2 PostgreSQL 資料庫的Lambda 函數的冷啟動時間和熱啟動時間3 個用例的API :

  • 未在 Lambda 函數上啟用 SnapStart
  • 在 Lambda 函數上啟用 SnapStart,但沒有啟動最佳化
  • 在 Lambda 函數上啟用 SnapStart 並進行啟動最佳化(在 PostgreSQL 資料庫上預熱 SQL 語句執行)。

在本文中,我們希望將這些測量值與使用 DynamoDB 而不是 Amazon Aurora Serverless v2 的 Data API 時的測量值進行比較。

比較 Lambda 冷啟動和熱啟動:Amazon Aurora Serverless v2 的資料 API 與 DynamoDB

在我關於 Lambda SnapStart 的文章系列中,我們已經對類似的應用程式進行了此類測量,但在文章中使用不同的 Lambda 記憶體設定測量 Java 21 的熱啟動。

Amazon Aurora Serverless v2 和 DynamoDB 的應用程式資料 API 非常相似:

  • 它們提供從資料庫儲存和檢索產品的邏輯
  • 兩個項目的 Lambda 函數都有 1024 MB 記憶體設定
  • 兩者的部署工件大小均為 18 MB 左右
  • 兩個專案中的 Lambda 函數都使用預設同步 HTTP Apache 用戶端與資料庫進行通訊
  • 兩個專案的 Lambda 函數都使用 x86_64 架構

現在讓我們將所有測量值放在一起。

冷 (c) 和熱 (m) 啟動時間(以毫秒為單位):

方法 c p50 c p75 c p90 c p99 c p99.9 c 最大 w p50 w p75 w p90 w p99 w p99.9 w 最大值
資料 API,未啟用 SnapStart 3154.35 3237 3284.91 3581.49 3702.12 3764.92 104.68 173.96 271.32 572.11 1482.89 2179.7
DynamoDB,未啟用 SnapStart 3157.6 3213.85 3270.8 3428.2 3601.12 3725.02 5.77 6.50 7.81 20.65 90.20 1423.63
資料 API,無需啟動即可啟用 SnapStart 1856.11 1994.61 2467.83 3229.11 3238.80 3241.75 61.02 113.32 185.37 639.35 1973.30 2878.5
DynamoDB、SnapStart 無需啟動即可啟用 1626.69 1741.10 2040.99 2219.75 2319.54 2321.64 5.64 6.41 7.87 21.40 99.81 1355.09
資料 API,透過啟動啟用 SnapStart 990.84 1069.04 1634.84 2120.00 2285.03 2286.9 60.06 106.35 185.37 581.27 1605.37 2658.24
DynamoDB、SnapStart 透過啟動啟用 702.55 759.52 1038.50 1169.66 1179.05 1179.36 5.73 6.51 7.87 21.75 92.19 328.41

結論

在本文中,我比較了使用 Data API 連接到 Amazon Aurora Serverless v2 PostgreSQL 資料庫的 Lambda 函數與連接到 DynamoDB 資料庫的 3 個用例的冷啟動時間和熱啟動時間的測量結果:

  • 未在 Lambda 函數上啟用 SnapStart
  • 在 Lambda 函數上啟用 SnapStart,但沒有啟動最佳化
  • 在 Lambda 函數上啟用 SnapStart 並啟動資料庫請求

我們觀察到,在 Lambda 函數上未啟用 SnapStart 的情況下,兩者的冷啟動時間相當相似。 如果啟用了 SnapStart(沒有啟動,尤其是啟動啟動),Amazon Aurora Serverless v2 的資料 API 的冷啟動時間明顯更長,特別是對於 >= 90 的百分位數。我需要更深入地挖掘以了解這種差異,因為我沒有預期它會那麼大,尤其是在使用底漆的情況下。也許原因是像 DynamoDB 這樣的 AWS 原生服務更能感知 SnapStart,我可以更好地處理連線復原。

與 DynamoDB 相比,Amazon Aurora Serverless v2 的資料 API 的熱啟動(執行)時間始終要高得多,我也預期 DynamoDB 以其單位數或兩位數毫秒回應時間而聞名。

版本聲明 本文轉載於:https://dev.to/aws-builders/data-api-for-amazon-aurora-serverless-v2-with-aws-sdk-for-java-part-9-comparing-cold-and- warm-starts-data-api-vs-dynamodb-2pg2?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-04-19
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-04-19
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-04-19
  • 解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    mysql錯誤1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的數據包,用於面對陰謀mysql錯誤1153,同時導入數據capase doft a Database dust?讓我們深入研究罪魁禍首並探索解決方案以糾正此問題。 理解錯誤此錯誤表明在導入過程中...
    程式設計 發佈於2025-04-19
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python import codecs import codecs import codecs 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有...
    程式設計 發佈於2025-04-19
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    python dictionary consection 在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in...
    程式設計 發佈於2025-04-19
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-04-19
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-04-19
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-04-19
  • 編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    錯誤:“ usr/bin/ld:找不到-l “ 此錯誤表明鏈接器在鏈接您的可執行文件時無法找到指定的庫。為了解決此問題,我們將深入研究如何指定庫路徑並將鏈接引導到正確位置的詳細信息。 添加庫搜索路徑的一個可能的原因是,此錯誤是您的makefile中缺少庫搜索路徑。要解決它,您可以在鏈接器命令中添...
    程式設計 發佈於2025-04-19
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-04-19
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-04-19
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-04-19
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-19
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-04-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3