GitHub - soooban/AxonDemo: 使用Axon/Spring Cloud實現事件溯源和CQRS案例
由於我們公司的技術體系基本是 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 就起到做用了,透過讀寫分離,讓各自的職責專一,實際上在傳統的方式中我們也可能會這麼幹,只是方式略微不同,比如有一個只讀庫,時時同步主庫,讓查詢透過只讀庫進行,那麼如果查詢量特別大的時候,起碼寫庫不會因為查詢而下降效能。
目錄
- Event Sourcing 和 CQRS落地(一):前言
- Event Sourcing 和 CQRS落地(二):UID-Generator 實現
- Event Sourcing 和 CQRS落地(三):Event-Sourcing 實現
- Event Sourcing 和 CQRS落地(四):CQRS 實現
- Event Sourcing 和 CQRS落地(五):深入使用-Axon
- Event Sourcing 和 CQRS落地(六):實現可靠訊息
- Event Sourcing 和 CQRS落地(七):Spring-Cloud-Stream 最佳化
- Event Sourcing 和 CQRS落地(八):服務最佳化
相關文章
- 使用AsyncAPI規範簡潔實現CQRS事件溯源案例API事件
- (譯)使用Spring Boot和Axon實現CQRS&Event SourcingSpring Boot
- Spring Boot和EventStoreDB事件溯源案例Spring Boot事件
- Java,Spring,SpringBoot和Axon實現CQRS深度示例 -jofisaes@gmail.comJavaSpring BootAI
- 使用Redis/RabbitMQ/EventStore實現事件溯源CQRS微服務應用 - Aram KoukiaRedisMQ事件微服務
- 使用Spring Boot和Kafka Streams實現CQRSSpring BootKafka
- 使用Kafka實現事件溯源Kafka事件
- Spring IO 2019大會上Axon+Spring的事件驅動微服務和CQRS原始碼專案Spring事件微服務原始碼
- CQRS架構和Axon框架入門實踐架構框架
- 使用Spring Cloud Stream和RabbitMQ實現事件驅動的微服務SpringCloudMQ事件微服務
- 最全面的CQRS和事件溯源介紹 - Software House ASC事件
- 使用Spring Cloud Stream和Spring State Machine建立事件驅動的微服務案例SpringCloudMac事件微服務
- Java的CQRS和事件溯源ES入門:如何從CRUD切換到CQRS/ES - BaeldungJava事件
- booking-microservices:基於.Net Core的CQRS、DDD、垂直切片架構、事件溯源案例ROS架構事件
- 使用Datomic實現沒有麻煩的事件溯源事件
- 使用EventStoreDB實現事件溯源的Python開源專案事件Python
- 使用EventStoreDB實現事件溯源的Java開源專案事件Java
- 使用Spring Cloud Sleuth和OpenTelemetry實現分散式跟蹤SpringCloud分散式
- 使用Axon重播投射事件 - codecentric AG Blog事件
- Spring cloud config 使用gitHub或者gitee連線SpringCloudGithubGitee
- eBay透過事件溯源實現持續交付事件
- GitHub - wanghongfei/gogate:Go實現的高效能Spring Cloud閘道器GithubGoSpringCloud
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- Spring Cloud:使用 Feign 實現負載均衡詳解SpringCloud負載
- Spring Cloud Stream事件路由 - spring.ioSpringCloud事件路由
- 最全面的改造Zuul閘道器為Spring Cloud Gateway(包含Zuul核心實現和Spring Cloud Gateway核心實現)ZuulSpringCloudGateway
- 無伺服器事件源和CQRS指南伺服器事件
- 使用 GitHub 和 Python 實現持續部署GithubPython
- Chronicle事件溯源的最佳實踐事件
- Spring Cloud Gateway 入門案例SpringCloudGateway
- Spring Cloud Gateway 實現 gRpc 代理SpringCloudGatewayRPC
- Spring Cloud Eureka 實現安全控制SpringCloud
- Spring Cloud Config 實現配置中心SpringCloud
- 為什麼我們放棄使用Kafka Streams實現全部的事件溯源?-MateuszKafka事件
- Spring Cloud Alibaba基礎教程:使用Sentinel實現介面限流SpringCloud
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- 使用Spring Boot實現資料庫整合配置案例Spring Boot資料庫