分布式事務(wù)實現(xiàn)- 事件溯源

消息驅(qū)動

  • 事件不要求持久化保存
  • 消息只是為了更新業(yè)務(wù)數(shù)據(jù)的狀態(tài),數(shù)據(jù)庫才是一等數(shù)據(jù)
  • 不要求所有的數(shù)據(jù)操作都通過消息驅(qū)動

事件溯源

  • 事件作為一等數(shù)據(jù)保存
  • 統(tǒng)一的事件管理器和接口,數(shù)據(jù)更新都由事件產(chǎn)生
  • 數(shù)據(jù)庫中數(shù)據(jù)的當(dāng)前狀態(tài)根據(jù)事件的聚合產(chǎn)生
  • 聚合數(shù)據(jù)可以保存在數(shù)據(jù)庫中,可以根據(jù)事件重新生成

事件溯源的優(yōu)點

  • 歷史重現(xiàn):從事件中重新生成視圖數(shù)據(jù)庫
  • 方便的數(shù)據(jù)流處理于報告生成
  • 性能
  • 服務(wù)的松耦合

事件溯源的缺點

  • 只能保證事務(wù)的最終一致性
  • 設(shè)計和開發(fā)思維的轉(zhuǎn)變,學(xué)習(xí)成本
  • 事件結(jié)果的改變
  • 擴展性:Event Store的分布式實現(xiàn),事件的分布式處理

消息驅(qū)動 vs事件溯源

  • 一等數(shù)據(jù):事件vs業(yè)務(wù)數(shù)據(jù)
  • 事件永久保存、歷史重現(xiàn)
  • 所有數(shù)據(jù)更新都必須通過事件來產(chǎn)生
  • Event Store服務(wù)承擔(dān)更多的功能

事件溯源的數(shù)據(jù)一致性

  • 一個事件只處理一個服務(wù)的數(shù)據(jù)
  • 保證事件的至少一次處理、冪等性
  • 業(yè)務(wù)請求的錯誤處理:多次重試失敗、網(wǎng)絡(luò)異常、服務(wù)不可用

事件溯源和CQRS

  • CQRS:命令查詢職責(zé)分離
  • C端執(zhí)行命令,Q端執(zhí)行查詢

事件溯源與Axon框架

Axon框架介紹

  • 實現(xiàn)Event Sourcing和CQRS模式的框架
  • 實現(xiàn)了命令、事件的分發(fā)、處理、聚合、查詢、存儲
  • 提供標簽式開發(fā),易維護,并提供了Spring boot的集成
  • 提供Command和Event
  • 可擴展,可用于分布式環(huán)境,如Spring Cloud

Axon框架的構(gòu)成

  • 聚合:Aggregate
  • 聚合的資源庫:Repository
  • Command:Command Bus 和 Command handler
  • Event :Event Bus 、Event Handler 和Event Store
  • Sage: 基于事件的流程管理模式
  • Query: 執(zhí)行數(shù)據(jù)查詢操作的特殊Command

Axon框架的構(gòu)成- 可擴展性

  • 分布式Command分發(fā)
  • 通過AMQP實現(xiàn)分布式Event分發(fā)和處理
事件溯源與Axon框架圖.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容