首頁  >  文章  >  Java  >  適用於 Java 的 AWS 開發工具包的 Amazon Aurora Serverless 資料 API - 冷啟動和熱啟動的部分最佳化策略

適用於 Java 的 AWS 開發工具包的 Amazon Aurora Serverless 資料 API - 冷啟動和熱啟動的部分最佳化策略

王林
王林原創
2024-07-16 15:22:43911瀏覽

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part ptimization strategies for the cold and warm starts

介紹

在本系列之前關於如何使用Data API 和AWS SDK for Java 從Lambda 函數連接到Amazon Aurora Serverless v2 的文章中,我們進行了基本的冷啟動和熱啟動測量,比較了Data API 和JDBC 之間的冷啟動和熱啟動並使用SnapStart 測量有和沒有啟動的效果。

在本系列的這一部分中,我們將介紹冷啟動和熱啟動的最佳化策略。

冷啟動和熱啟動的最佳化策略

要在冷啟動時間和熱啟動時間之間找到良好的平衡,您可以嘗試下面介紹的最佳化技術。我尚未對使用 Data API 和 Amazon Aurora Serverless v2 與 PostgreSQL 資料庫的測量進行任何測量,但使用 DynamoDB 資料庫進行類似的場景。我會提供我的相關文章的參考。

  • 嘗試不同的 Lambda 記憶體設定。到目前為止,所有測量都是使用 Lambda 函數的 1024 MB 記憶體執行的。透過不同的記憶體設置,您可能會以合理的價格獲得更好的性能。請參閱我的文章使用不同的 Lambda 記憶體設定透過 Java 21 測量冷啟動和熱啟動以及部署時間,以了解使用 DynamoDB 進行測量的說明。
  • 嘗試 Lambda 函數的不同 Java 編譯選項。到目前為止,所有測量都是使用 Lambda 函數的編譯選項「-XX:+TieredCompilation -XX:TieredStopAtLevel=1」執行的。可以使用名為 JAVA_TOOL_OPTIONS 的環境變數向 Lambda 函數提供更多其他選項,該變數可以具有不同的冷啟動和熱啟動權衡。請參閱我的文章“使用 Java 21 使用不同的編譯選項測量冷啟動和熱啟動”,以了解使用 DynamoDB 進行測量的說明。
  • 嘗試不同的同步 HTTP 用戶端透過 Data API 建立與資料庫的 HTTP 連線。到目前為止,所有測量都是使用預設的同步 HTTP 用戶端(Apache)執行的。還有其他選項,例如 UrlConnection 和 AWS CRT HTTP 用戶端,它們為冷啟動和熱啟動提供不同的效能權衡。

這是在建立/建置 RdsDataClient 時使用 AWS CRT HTTP 用戶端的範例。 URLConnection用戶端可以類似地設定。

RdsDataClient.builder().httpClient(AwsCrtHttpClient.create()).build()

另外不要忘記將對正在使用的 HTTP 用戶端的依賴項包含到 pom.xml 中,如下所示:

     <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>aws-crt-client</artifactId>
     </dependency>

請參閱我的文章使用不同的同步 HTTP 用戶端透過 Java 21 測量冷啟動和熱啟動,以取得說明、程式碼範例和使用 DynamoDB 進行測量。

  • 探索資料 API 的非同步 HTTP 用戶端是否適合您的用例。預設的非同步 HTTP 用戶端是 NettyNio。還有另一個選項 AWS CRT 非同步 HTTP 用戶端,它為冷啟動和熱啟動提供不同的效能權衡。

這是在建立/建置 RdsDataAsyncClient 時使用非同步 AWS CRT HTTP 用戶端的範例(我們需要在使用非同步 HTTP 客戶端的情況下建置)。

RdsDataAsyncClient.builder().httpClient(AwsCrtAsyncHttpClient.create()).build()

另外不要忘記將對正在使用的 HTTP 用戶端的依賴項包含到 pom.xml 中,如下所示:

     <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>aws-crt-client</artifactId>
     </dependency>

在這種情況下,我們必須使用 Java 非同步程式設計模型(這本身就是討論主題),因此 RDSDataAsyncClient 上的每個方法呼叫都會傳回 Java CompletableFuture 物件。請參閱我的文章使用不同的非同步 HTTP 用戶端透過 Java 21 測量冷啟動和熱啟動,以取得說明、程式碼範例和使用 DynamoDB 的測量。

對於所有潛在的最佳化策略,您可以在 Lambda 函數上啟用 SnapStart,並另外測量 DynamoDB 呼叫啟動的影響,如本系列的上一篇文章 Data API meet SnapStart 中所述。

也要注意我在文章中描述的快照分層快取對冷啟動的影響。因為我總是在部署新版本的 Lambda 函數後為 100 次冷啟動提供冷啟動測量。在使用分層快取的情況下,我測量並描述了冷啟動隨著更多後續調用而顯著減少。經過一定數量的呼叫後,它對於特定的 Lambda 版本保持不變。

結論

在本文中,我們使用Amazon Aurora Serverless v2 的資料API 和適用於Java 的AWS 開發工具包提供了冷啟動和熱啟動的最佳化策略,您可以探索該策略以找出適合您的使用案例的最佳性能。

以上是適用於 Java 的 AWS 開發工具包的 Amazon Aurora Serverless 資料 API - 冷啟動和熱啟動的部分最佳化策略的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn