什麼是 CQRS?它在微服務中有多重要?
CQRS 是一種微服務架構模式,它代表命令和查詢責任分離。
這種模式背後的基本思想是將寫操作與讀操作分開。不是使用一個資料儲存來執行 CRUD 操作,而是在一個資料儲存上執行讀取操作,並在不同的資料儲存上執行建立/更新。
CQRS 承諾對大規模應用程式的穩定性和可擴充套件性以及顯著的效能改進。
CQRS 模式由 Bertrand Meyer 設計,作為開發 Eiffel 程式語言的一部分。Greg Young 創造了“CQRS”一詞。
CQRS 在哪裡使用?
CQRS 通常在準備就緒的大規模分散式應用程式中是首選。也就是說,如果應用程式中的讀取次數遠遠超過寫入操作的次數。
此模式的另一個合適用例是讀取操作繁重且資料儲存副本可以放置在應用程式接收高流量的地理位置附近,從而提高資料庫讀取操作的效能。
CQRS 是如何實現的?
到目前為止,我們知道要實現 CQRS,我們將使用兩個資料儲存庫。
通常,寫入操作首選關聯式資料庫,其中可以應用所有資料約束,並使用NoSQL 資料庫支援讀取操作。這意味著,兩種不同的資料模型用於寫入和讀取操作。
自然,人們會想到的問題是這兩個儲存庫中的資料如何同步?
這就是事件驅動架構出現的地方。
考慮一個使用者呼叫POST API的場景,執行一些驗證,然後將資料及其約束更新到我們的關聯式資料庫中。
將資料插入資料庫後,將呼叫觸發器,該觸發器將更新所有事件處理程式(事件驅動架構)以更新讀取的資料庫。
當另一個使用者呼叫 GET API 時,應用程式將從NoSQL 資料庫中檢索相關資料並將其傳送回使用者。用於實現 CQRS 的最流行的基於 Java 的框架是 Axon。
Axon 使用命令和處理程式來呼叫和處理相應的事件。你可以在Github上找到完整的程式碼。
使用 CQRS 有什麼好處?
使用 CQRS 的主要好處包括:
- 靈活的擴充套件——讀寫資料儲存可以根據需求獨立擴充套件。
- 簡單查詢——由於讀取和寫入的資料模型是分開的,讀取資料模型可以設計成避免複雜查詢的方式。
- 提高效能——透過最佳化讀取操作並將資料儲存副本放置在不同的地理位置,讀取繁重的操作可以顯著提高效能。
使用 CQRS 的缺點是什麼?
- 複雜性——事件驅動的系統構建和維護起來很複雜。儘管有像 Axon 這樣的框架可以處理資料庫寫入、釋出事件和通知各種處理程式,但也有讀寫模型不同步的情況。
- 一致性——CQRS 和事件驅動架構旨在確保資料在所有涉及的系統中保持一致,但在訊息失敗的情況下,讀取資料庫將不同步。
結論
在讀取次數遠大於寫入次數的情況下,CQRS 是一種需要考慮的模式。特別是在讀取操作要高度最佳化並且不需要執行任何業務邏輯或驗證的情況下。讀取操作就像獲取資料、載入 DTO 並將其傳遞給客戶端一樣簡單。
實現這樣一個系統的最大挑戰是確保避免資料重複,讀取資料庫永遠不會過時,並且寫入資料庫的所有條目最終也會在讀取資料庫中一致地更新。
儘管從概念上講,這聽起來很簡單,但 CQRS 並不那麼容易實現和除錯。
相關文章
- 微服務是什麼?微服務
- 什麼是微服務?微服務
- 什麼是微服務微服務
- 01、什麼是微服務微服務
- 微服務架構(一):什麼是微服務微服務架構
- 微服務指南走北(一):微服務是什麼微服務
- 小白入門微服務(0) - 什麼是微服務微服務
- 面試官靈魂三問:什麼是SOA?什麼是微服務?SOA和微服務有什麼區別?面試微服務
- 什麼是微服務,它要幹啥微服務
- 微服務是什麼?帶你簡單瞭解微服務微服務
- 微服務思考(01):什麼是微服務?微服務的優勢和劣勢微服務
- 什麼是微服務架構?什麼是服務註冊與發現微服務架構
- 華為雲容器和微服務是什麼?微服務
- 為什麼微服務應該是事件驅動?微服務事件
- 到底什麼是微服務?其實就是DDD領域服務微服務
- ITAM是什麼?為什麼它很重要?
- 微服務精華問答:什麼是微服務架構中的DRY?| 技術頭條微服務架構
- 微服務、CQRS和eventsourcing開源資源微服務
- (1)微服務是什麼?它的優缺點有哪些?微服務
- 為什麼要使用微服務微服務
- PHP中有多型麼PHP多型
- 【微服務入門】kubernetes是什麼?K8S能幹什麼?微服務K8S
- 什麼是海外IP代理伺服器?其中有什麼作用?伺服器
- 什麼是客戶分析,為什麼它很重要?
- 一篇故事告訴你什麼是微服務架構!微服務架構
- SOA架構和微服務架構的區別是什麼?架構微服務
- 構建微服務的三種重要模式 - DZone微服務微服務模式
- 圖文詳解:如何給女朋友解釋什麼是微服務?微服務
- 微服務不同環境到底該如何部署?最佳實踐是什麼?微服務
- MongoDB 中有什麼簡單辦法做多欄位 join?MongoDB
- 雲同步: 什麼是雲同步以及為什麼它是如此重要?
- 為什麼微服務架構需要聚合微服務架構
- 為什麼要使用微服務架構?微服務架構
- 分散式微服務為什麼很難?分散式微服務
- IT服務管理是什麼?
- 小白解釋:什麼是分散式微服務中的冪等? - LispCast分散式微服務LispPCAAST
- 微服務的戰爭:按什麼維度拆分服務微服務
- 微服務為什麼一定要用docker微服務Docker