CQRS 模式 - AWS 規範指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CQRS 模式

命令查詢責任隔離(CQRS)模式將數據突變或系統的命令部分,與查詢部分分開。如果更新和查詢對輸送量、延遲或一致性有不同的需求,您可以使用 CQRS 模式來區隔更新和查詢。CQRS 模式將應用程序分成兩部分-命令側和查詢側-如下圖所示。命令側處理 createupdate,和delete請求。查詢端會使用僅供讀取複本來執行query零件。

CQRS 模式的高級視圖

該圖顯示了以下過程:

  1. 業務通過 API 發送命令與應用程序進行交互。命令是建立、更新或刪除資料之類的動作。

  2. 應用程序在命令側處理傳入的命令。這涉及驗證、授權和執行作業。

  3. 該應用程序將命令的數據保留在 write(命令)數據庫中。

  4. 命令存儲在寫入數據庫後,事件被觸發以更新 read(查詢)數據庫中的數據。

  5. 讀取 (查詢) 資料庫會處理並保留資料。讀取資料庫的設計目的是針對特定查詢需求進行最佳化。

  6. 業務與讀取 API 進行交互,以將查詢發送到應用程序的查詢端。

  7. 應用程序處理查詢端的傳入查詢,並從讀取的數據庫中檢索數據。

您可以通過使用數據庫的各種組合來實現 CQRS 模式,包括:

在下圖中,NoSQL 資料存放區 (例如 DynamoDB) 用於最佳化寫入輸送量並提供彈性的查詢功能。當您新增資料時,如此可在具有明確定義存取模式的工作負載上達到高寫入延展性。關聯式資料庫 (例如 Amazon Aurora) 可提供複雜的查詢功能。DynamoDB 串流會將資料傳送至可更新 Aurora 表的 Lambda 函數。

與服務一起實作的 CQRS 模式 AWS

使用 DynamoDB 和 Aurora 實作 CQRS 模式可提供下列主要優點:

  • DynamoDB 是完全受控的 NoSQL 資料庫,可處理大量寫入作業,而 Aurora 為查詢端的複雜查詢提供高讀取延展性。

  • DynamoDB 提供低延遲、高輸送量的資料存取,因此非常適合處理命令和更新作業,而 Aurora 效能則可針對複雜的查詢進行微調和最佳化。

  • DynamoDB 和 Aurora 都提供無伺服器選項,讓您的企業僅根據使用情況支付資源費用。

  • DynamoDB 和 Aurora 是全受管服務,可減少管理資料庫、備份和延展性的操作負擔。

如果出現以下情況,您應該考慮使用 CQRS 模式:

  • 您已實作 database-per-service 模式,並想要聯結來自多個微服務的資料。

  • 您的讀取和寫入工作負載對擴展、延遲和一致性有不同的需求。

  • 最終一致性是讀取查詢可以接受的。

重要

CQRS 模式通常會導致數據存儲之間的最終一致性。