使用EventStoreDB實現事件溯源的Java開源專案
EventStoreDB 是事件溯源的資料庫。這個GitHub儲存庫提供了一個使用 EventStoreDB 作為事件儲存的事件源系統示例。
此示例使用受tech/uklon經驗啟發的高度簡化的叫車領域模型。
- 騎手可以在指定價格的路線上下訂單。
- 司機可以接受並完成訂單。
- 訂單可以在完成前取消。
事件溯源
事件溯源將實體的狀態儲存為一系列不可變的狀態更改事件。
可以透過重放其所有事件來恢復實體的當前狀態。
事件溯源最適合事件總數相對較少的短期實體(如訂單)。
透過重放其所有事件來恢復短期實體的狀態不會對效能產生任何影響。因此,短期實體不需要恢復狀態的最佳化。
對於具有數千個事件的無休止儲存的實體(如使用者或銀行賬戶),透過重播所有事件來恢復狀態並不是最佳的,應該考慮快照。
快照是一種最佳化技術,其中還儲存了聚合狀態的快照,因此應用程式可以從快照中恢復聚合的當前狀態,而不是從頭開始。
事件溯源中的實體也被稱為聚合。
同一聚合的一系列事件也被稱為流。
Event Store的要求
- 永久儲存。永久儲存事件。
- 樂觀併發控制。防止丟失更新異常(寫-寫衝突)。
- 載入當前狀態。從事件儲存中載入特定聚合 ID 的所有先前事件。
- 按聚合型別訂閱所有事件。而不是訂閱代表聚合的單個事件流。
- 檢查站。處理後儲存事件偏移量(流中的位置)。在應用程式重新啟動後,從最後一個已知位置訂閱,而不是從流開始。
解決方案架構
EventStoreDB原生支援追加事件、併發控制、讀取事件、事件的持久化訂閱。
該解決方案的重要部分是EventStoreDB的永續性訂閱。
永續性訂閱的目的是向連線的訂閱者實時提供事件,並由伺服器維護。永續性訂閱保留了訂閱者在伺服器上開始獲取事件的最後已知位置。
永續性訂閱可以是負載平衡的,並且可以並行處理事件。為了使伺服器能夠平衡訂閱者的負載,它使用了消費者組的概念。
有一個Pinned消費者策略,旨在與索引投影(如系統$by_category投影)一起使用。
事件流id被雜湊到分配給單個客戶的1024個桶中的一個。當一個客戶端斷開連線時,它的桶被分配給其他客戶端。當一個客戶端連線時,它被分配到一些現有的桶中。這樣做的目的是為了保持工作負載的平衡。
Pinned消費者策略的主要目的是減少併發和排序問題的可能性,同時保持負載平衡。這並不是一種保證,你應該處理通常的排序和併發問題。
相關文章
- 使用EventStoreDB實現事件溯源的Python開源專案事件Python
- .NET Core中的事件溯源開源專案事件
- Spring Boot和EventStoreDB事件溯源案例Spring Boot事件
- 使用Kafka實現事件溯源Kafka事件
- Python的事件溯源開源庫Python事件
- 使用Datomic實現沒有麻煩的事件溯源事件
- 使用Spring Boot實現微服務架構的開源專案Spring Boot微服務架構
- 使用AsyncAPI規範簡潔實現CQRS事件溯源案例API事件
- Rust中實現使用者上傳功能的開源專案Rust
- SAP Spartacus 開源專案裡 activeCartId$ 的實現
- 如何在Java後端中實現事件驅動架構:從事件匯流排到事件溯源Java後端事件架構
- 預研canvas實現Excel開源專案CanvasExcel
- GitHub - soooban/AxonDemo: 使用Axon/Spring Cloud實現事件溯源和CQRS案例GithubSpringCloud事件
- Chronicle事件溯源的最佳實踐事件
- eBay透過事件溯源實現持續交付事件
- 【.Net】使用委託實現被引用的專案向上級專案的訊息傳遞事件事件
- 攜程開源專案——Apollo的設計與實現
- 白嫖GitHub Action實現開源專案CICDGithub
- 為什麼我們放棄使用Kafka Streams實現全部的事件溯源?-MateuszKafka事件
- 使用Redis/RabbitMQ/EventStore實現事件溯源CQRS微服務應用 - Aram KoukiaRedisMQ事件微服務
- Vue開源專案使用探索Vue
- java web專案 使用elfinder 實現檔案管理器JavaWeb
- GitHub實用開源專案Github
- Java反應式事件溯源:領域Java事件
- 使用ScanCode掃描開源專案的license
- 長沙Java培訓:Java開源專案分享Java
- 如何為事件溯源專案規劃技術堆疊 -Keith Mifsud事件
- Netflix如何在雲端使用事件溯源實現可靠的物聯網裝置管理?事件
- 【開源系列】專案開源實戰記錄-序
- Android開源mvp專案,實現玩Android客戶端AndroidMVP客戶端
- 事件流與事件溯源事件
- 事件協作和事件溯源事件
- Halo 開源專案學習(六):事件監聽機制事件
- PHP 事件溯源PHP事件
- java實現分散式專案搭建Java分散式
- 開源的網易雲音樂API專案都是怎麼實現的?API
- 有贊開源專案最佳實踐
- 事件溯源的優點並不能兌現 - Jimmy Bogard事件