GitHub - soooban/AxonDemo: 使用Axon/Spring Cloud實現事件溯源和CQRS案例

banq發表於2019-07-08

由於我們公司的技術體系基本是 Spring 全家桶,而 Java 界似乎 Axon 又是比較流行的 Event Sourcing 框架,本著對新技術的嘗試以及某些業務也確實有這方面的需求的出發點,對 Axon 做了一些嘗試。這一系列文章將會以 Spring Cloud 作為背景,探討 Axon 如何使用,以及如何出處理一些常見的業務需求(溯源、讀寫分離、訊息可靠等),所以在看後面的文章之前最好對 Spring Boot、Spring Cloud、Spring Cloud Stream、Spring Data JPA 等有一些基本的瞭解。

Event Sourcing 、CQRS 簡述
Event Sourcing 簡單來說就是記錄物件的每個事件而不是記錄物件的最新狀態,比如新建、修改等,只記錄事件內容,當需要最新的狀態的時,透過堆疊事件將最新的狀態計算出來。那麼這種模式查詢的時候效能會變的非常差,這個時候就涉及到了 CQRS ,簡單的理解就是讀寫分離,透過事件觸發,將最新狀態儲存到讀庫,查詢全都走讀庫,理論上程式碼層,資料庫層,都可以做到分離,當然也可以不分離,一般來說為了保證資料庫效能,這裡起碼會將資料庫分離。

為什麼要使用
瞭解了 Event Sourcing 的基本內容之後,我們可以發現這個模式有很多的好處:

  • 記錄了物件的事件,相當於記錄了整個歷史,可以檢視到任意一個時間點的物件狀態;
  • 都是以事件形式進行寫入操作,理論上在高併發的情況下,沒有死鎖,效能會快很多;
  • 可以基於歷史事件做更多的資料分析。

Event Soucing 通常會和 DDD CQRS 一起討論,在微服務盛行的前提下,DDD 讓整個軟體系統松耦合,而 Event Soucing 也是面向 Aggregate,這個模式很符合 DDD 思想,同時由於 Event Soucing 的特性,讀取資料必然會成為瓶頸,這個時候 CQRS 就起到做用了,透過讀寫分離,讓各自的職責專一,實際上在傳統的方式中我們也可能會這麼幹,只是方式略微不同,比如有一個只讀庫,時時同步主庫,讓查詢透過只讀庫進行,那麼如果查詢量特別大的時候,起碼寫庫不會因為查詢而下降效能。


目錄
  1. Event Sourcing 和 CQRS落地(一):前言
  2. Event Sourcing 和 CQRS落地(二):UID-Generator 實現
  3. Event Sourcing 和 CQRS落地(三):Event-Sourcing 實現
  4. Event Sourcing 和 CQRS落地(四):CQRS 實現
  5. Event Sourcing 和 CQRS落地(五):深入使用-Axon
  6. Event Sourcing 和 CQRS落地(六):實現可靠訊息
  7. Event Sourcing 和 CQRS落地(七):Spring-Cloud-Stream 最佳化
  8. Event Sourcing 和 CQRS落地(八):服務最佳化


 

相關文章