」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Amazon Aurora Serverless 的資料 API 與 AWS SDK for Java - 部分 Aurora Serverless vata API 是否滿足 DevOps Guru?

Amazon Aurora Serverless 的資料 API 與 AWS SDK for Java - 部分 Aurora Serverless vata API 是否滿足 DevOps Guru?

發佈於2024-11-11
瀏覽:883

介绍

在我的文章《适用于无服务器应用程序的 Amazon DevOps Guru - 第 10 部分 Aurora Serverless v2 上的异常检测》中,我们了解到,在使用 Java 21 托管的 Lambda 函数的情况下,DevOps Guru 能够成功检测 Aurora (Serverless v2) PostgreSQL 数据库的异常情况运行时通过 JDBC 连接到它。我们仅将数据库从 0.5 ACU 扩展到 1 ACU,并通过调用 Lambda 函数在数分钟内同时按 id 数百次检索产品,在数据库上创建了非常高的负载。我们看到 DevOps Guru 正确指出了数据库连接总数的增加和数据库 (CPU) 负载持续较高的情况。 在本文中,我想弄清楚 DevOps Guru 是否会通过执行相同的实验来检测异常,但使用 Aurora Serverless v2 的数据 API 和 AWS SDK for Java 而不是 JDBC。

使用数据 API 对 Aurora Serverless v2 进行异常检测

让我们看看我们的示例应用程序并使用 SAM 模板来创建基础架构并部署下图所示的应用程序:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

该应用程序创建存储在 Aurora Serverless v2 PostgreSQL 数据库中的产品,并使用数据 API 按 ID 检索它们。我们将用来按 id 检索产品的相关 Lambda 函数是 GetProductByIdViaAuroraServerlessV2DataApi,其处理程序实现是 GetProductByIdViaAuroraServerlessV2DataApiHandler。

和上一篇文章一样,我们使用hey工具来进行这样的压力测试

hey -z 15m -c 300 -H "X-API-Key: XXXa6XXXX" https://XXX.execute-api.eu-central-1.amazonaws.com/prod/productsWithDataApi/1   

在此示例中,我们使用 300 个并发容器调用 API 网关端点 15 分钟。在 prod/productsWithoutDataApi 端点后面,将调用 Lambda 函数 GetProductByIdViaAuroraServerlessV2WithoutDataApi,它将通过 id 1 从 Aurora Serverless v2 PostgreSQL 数据库检索产品。

我们在 [SAM 模板]((https://github.com/Vadym79/AWSLambdaJavaAuroraServerlessV2DataApi/blob/master/template.yaml) Aurora 数据库集群中进行配置,从最小容量 0.5 扩展到最大容量 1 ACU(即非常小的数据库大小),以防增加负载以节省成本。

  AuroraServerlessV2Cluster:
    Type: 'AWS::RDS::DBCluster'
...
      ServerlessV2ScalingConfiguration:
        MinCapacity: 0.5
        MaxCapacity: 1

Aurora(无服务器 v2)数据库管理可用数据库连接的最大数量,与数据库大小(在我们的例子中是 ACU 设置)成比例,还使用 ​​Aurora Serverless v2 的数据 API(这与 v1 存在巨大差异,v1 将成为到 2024 年底将不再支持,硬配额为每秒 1000 个数据库连接)。有关更多信息,请阅读有关 Aurora Serverless v2 的最大连接数的文档。因此,随着调用次数的增加,我们预计很快就会达到最大可用数据库连接数和高数据库 (CPU) 负载,这样数据库将无法响应新的 Lambda 函数请求来检索产品id(Lambda 也会遇到)。 这样我们就会引发异常,并想知道 DevOps Guru 是否能够检测到它。它能够,有点......产生了以下见解:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

并且已识别出以下聚合异常指标:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

与我的文章 Amazon DevOps Guru for the Serverless applications - 第 10 部分 Aurora Serverless v2 上的异常检测中描述的使用 JDBC 而不是 Data API 时识别的聚合异常指标相比,我们完全搞乱了 Aurora 数据库异常指标:数据库连接总和和数据库 (CPU) 负载,但正确地看到 Lambda 中的错误,该错误在 15 秒内定义的时间内运行,因为数据库无法响应。

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?.

那么,有什么区别呢? 让我们探讨一下我们使用 JDBC(非数据 API)和数据 API 在 Aurora Serverless v2 PostgreSQL 集群上重现的两个事件:

就 ACU 利用率/扩展而言,它们看起来相同:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

就其他数据库指标而言,例如:CPU 利用率、DatabaseConnection DBLoad(CPU),存在巨大差异:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

  • 对于 JDBC(非数据 API)和数据 API 情况,CPU 利用率看起来相同。但 DevOps Guru 似乎没有考虑这个指标,因为我们甚至没有在 JDBC 实验中看到它
  • DBLoad(CPU) 对于数据 API 使用率来说非常低。似乎对于 Dat API,Aurora Serverless v2 数据库前面有一些负载均衡器,用于监视连接使用情况并保护数据库免于过载。
  • 对于数据 API 使用情况,DatabaseConnection 指标未显示(或显示为 0)。原因是我们不管理 Data API 的数据库连接,它是在另一端为我们完成的。当然,它们仍然发挥着我们在 Aurora Serverless v2 的最大连接数中了解到的重要作用,但该指标似乎在 CloudWatch 指标中暴露于外部,甚至 DevOps Guru 也无法访问真实数字。

由于这一点以及非常低的 DBLoad(CPU),与 JDBC 用例相比,没有生成针对具有数据 API 使用情况的 Aurora Serverless v2 集群的 DevOps Guru 见解。

我做了第二个实验,直接连接到 Aurora Serverless v2 集群,并编写脚本来创建负载测试,方法是使用标准方式(非数据 API)编写通过 id 多次获取产品的脚本。与我们对 hey 工具所做的类似,但直接访问数据库而不是调用 Api Gateway。在将数据库置于负载之下后,我使用如上所述的 hey 工具开始了相同的实验,并想看看会发生什么。产生了相同的见解,但这次具有以下异常指标:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

现在我们至少看到了额外的 Aurora Serverless v2 数据库连接总和异常指标,但 DBLoad(CPU) 指标仍然缺失。

异常图形如下所示:

Data API for Amazon Aurora Serverless vith AWS SDK for Java - Part Aurora Serverless vata API meets DevOps Guru or not?

当然,这个实验并不干净,因为我相继进行了两次负载测试,并且部分是并行的:第一个测试直接连接到数据库而不使用 API Gateway,第二个测试使用 Data API。这证实了我最初的假设,即数据库连接总和指标是为 Aurora Serverless v2(以及一般的 RDS)生成 DevOps Guru 见解的非常重要的标准,并且在使用数据 API 的情况下通常不会公开。
我已经联系了 Devops Guru 团队并与他们分享了我的见解,希望他们能够改进服务。或者首先将修复将数据库连接公开为 CloudWatch 指标,以便将 Aurora Serverless v2 与数据 API 结合使用。

结论

在本文中了解到,如果 Lambda 函数通过数据 API 连接到 Java 21 托管运行时,DevOps Guru 可以成功检测 Aurora (Serverless v2) PostgreSQL 数据库的异常,但只能显示与 Lambda 函数相关的异常指标由于数据库没有响应而超时。其主要原因似乎是,在将 Aurora Serverless v2 与数据 API 结合使用时,作为 CloudWatch 指标的数据库连接不会公开(或始终显示为 0)。 Aurora Serverless v2 数据库指标(数据库连接总数)仅在第二次人工实验期间显示。

版本聲明 本文轉載於:https://dev.to/aws-builders/data-api-for-amazon-aurora-serverless-v2-with-aws-sdk-for-java-part-10-aurora-serverless-v2- data-api-meets-devops-guru-or-not-1c60?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-19
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-19
  • 我可以開車嗎?編寫酒精測試儀的程式碼
    我可以開車嗎?編寫酒精測試儀的程式碼
    在我居住的丹麥,不幸的是,我們在歐洲保持著一項記錄:我們的孩子是歐洲大陸飲酒最多的人。正因為如此,人們非常關注減少青少年飲酒並教育孩子們了解酒精的影響。 我為當地學校編寫了一個 HTML 和 JavaScript 酒精計算器,向學生展示酒精如何影響身體以及如何計算血液酒精含量 (BAC)。 ...
    程式設計 發佈於2024-11-18
  • 為什麼我的 Python MySQL 插入功能不起作用?
    為什麼我的 Python MySQL 插入功能不起作用?
    Python MySQL 插入不起作用在 Python 中,利用 MySQL API 連接到 MySQL 資料庫是一種流行的方法。但是,嘗試將記錄插入資料庫時可能會出現困難。 遇到的一個此類問題是無法插入記錄。經檢查,插入操作涉及的程式碼如下:db = MySQLdb.connect("l...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • 修正「無法在模組外部使用導入語句」錯誤
    修正「無法在模組外部使用導入語句」錯誤
    作为 JavaScript 和 TypeScript 开发人员,我们在使用不同的模块系统时经常会遇到意外的错误。一个常见问题是“无法在模块外部使用 import 语句”错误。它通常在使用现代 ES 模块 (ESM) 或处理涉及 Webpack、Babel 或 Node.js 环境等捆绑程序的设置时出...
    程式設計 發佈於2024-11-18
  • 如何從本機主機連線到 Docker MySQL 容器?
    如何從本機主機連線到 Docker MySQL 容器?
    從本地主機連接到Docker MySQL 容器要直接從主機與Docker 容器中運行的MySQL 實例進行交互,請按照以下步驟操作步驟:使用docker-compose up由於您已經在Docker 主機上發布了連接埠3306,因此您可以從主機本身連接到它:$> mysql -h 127.0....
    程式設計 發佈於2024-11-18
  • 如何在具有不同範本參數的範本類別中定義好友關係?
    如何在具有不同範本參數的範本類別中定義好友關係?
    深入研究類別範本與Template Class Friends 深入研究類別範本與Template Class Friends定義二元樹類別(BT)及其元素類別(BE)時,BT 存取BE私人會員需要建立好友關係。然而,理解正確定義關係的底層機制至關重要。 最初,您嘗試將好友關係宣告為 templat...
    程式設計 發佈於2024-11-18
  • ## 建立強大的 CMS 後端:OOP 和 MVC 結構如何增強專案管理?
    ## 建立強大的 CMS 後端:OOP 和 MVC 結構如何增強專案管理?
    PHP OOP 核心架構:為CMS 後端實現堅實的基礎了解物件導向程式設計(OOP) 在開發時至關重要可靠的CMS 後端框架。結構良好的框架應遵循 OOP 原則並採用 MVC 設計來提高效率。 管理單一專案頁面上的多個部分處理一個專案上的多個部分時專案頁面,考慮使用不同的方法來管理每個部分。例如,索...
    程式設計 發佈於2024-11-18
  • std::string 是如何實現的以及它與 C 風格字串有何不同?
    std::string 是如何實現的以及它與 C 風格字串有何不同?
    對std::string 實現的探索對std::string 實現的探索神秘的std::string,C 標準庫的基本組件,引發了人們的關注對它的內部運作方式感到好奇。在本文中,我們深入研究其實現,揭示其複雜性,並將其與其前身、無處不在的 C 風格字串區分開來。 各種編譯器工具鏈提供對各自 std ...
    程式設計 發佈於2024-11-18
  • 為什麼 JavaScript 中 (0 < 5 < 3) 的計算結果為 true?
    為什麼 JavaScript 中 (0 < 5 < 3) 的計算結果為 true?
    JavaScript 的比較難題:破解(0 < 5 < 3) 中的真相在JavaScript 領域,出現了一個奇特的觀察結果:為什麼表達式(0 < 5 < 3) 的計算結果為true?這種神秘的行為源自於語言的求值規則,稱為操作順序。 要解開這個謎團,我們必須深入研究表達式執行的操作順序:Paren...
    程式設計 發佈於2024-11-18
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 如何使用 mitmproxy 修復 Windows 上的「pip install Access Denied」錯誤?
    如何使用 mitmproxy 修復 Windows 上的「pip install Access Denied」錯誤?
    使用mitmproxy 解決Windows 上的「pip install Access Denied」錯誤當嘗試使用pip 在Windows 上安裝mitmproxy 時,使用者可能會遇到儘管以管理員身分執行cmd 或PowerShell,但仍出現「存取被拒絕」錯誤。此錯誤通常在嘗試安裝 crypt...
    程式設計 發佈於2024-11-18
  • 如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    從 Go 二進位檔案擷取程式碼覆蓋率執行單元測試時,擷取程式碼覆蓋率非常簡單。然而,在針對二進位檔案本身的整合測試期間收集覆蓋率指標可能具有挑戰性。有沒有辦法克服這個障礙? 整合測試覆蓋率的需求整合測試提供了比單獨的單元測試更全面的程式碼覆蓋率視圖。透過針對真實世界的輸入運行二進位文件,我們可以評估...
    程式設計 發佈於2024-11-18

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

Copyright© 2022 湘ICP备2022001581号-3