高性能最終一致性框架Ray之基本功能篇


一、Event(事件)

Event是Actor產生的記錄狀態變化的日志,由StateId(狀態Id),UID(冪等性控制),TypeCode(事件類型),Data(事件數據),Version(事件版本),Timestamp(時間戳)組成。

  持久化:Ray提供Mongodb、Postgresql、Sqlserver、Mysql的拓展支持,可以單獨使用其中一個,也可以混合使用。

  EventBus:當Event持久化之后進行分發以驅動后續業務流程、同步到讀庫以及自定義消費者,目前支持RabbitMQ和Kafka的拓展。

  訂閱:基於Ray提供的ObserverGrain、ShadowGrain的訂閱者不依賴於EventBus的可靠性和有序性,框架會對Event的順序進行校驗,對丟失的Event進行恢復,自定義訂閱者只能用來執行對Event可靠性要求不高的任務。

    ObserverGrain:訂閱Event執行后續流程和同步到讀庫。

    ShadowGrain:訂閱Event執行后續流程,但流程需要用到實時狀態。

二、State(狀態)

State是一個聚合對象(等價DDD概念中的聚合根),業務的最新數據,駐留於Actor中,框架會定期保持快照。

  生命周期:State的生命周期等同於Actor的生命周期,可以通過配置進行控制。

  持久化:State的持久化不是實時的,通過VersionInterval(間隔版本)、MinVersionInterval(最小間隔版本,失活時持久化條件)來對每種Actor進行控制。持久化過程可以通過重寫OnStartSaveSnapshot方法來進行自定義處理(例如無法序列化數據的自定義存儲)。

  恢復:使用Snapshot(快照)+后續的Event進行恢復,恢復過程可以通過重寫ReadSnapshotAsync方法來進行自定義控制(例如無法序列化數據的自定義恢復)。

  訪問:State保存於Actor中,Actor內部可以直接訪問,外部需要通過API進行訪問。

  集群:集群依賴於Orleans的集群管理,State分布於集群中的某一個節點,只會存在一份,系統會根據節點負載情況進行自動調度。

三、Grain(Actor)

Grain是State的載體,提供外部訪問State的API和控制Event產生。Grain也可以在內部訪問訪問其它Grain.

  RayGrain:最基本的Grain,每次只能提交一個Event,支持開啟並發讀,但不支持開啟並發寫。

  TxGrain:提供基本事務功能的Grain,可以在方法內部同時提交多個Event,支持開啟並發讀,但不支持開啟並發寫。

  ConcurrentTxGrain:繼承自TxGrain,但提供額外的方法以支持並發寫,提高單個Grain的吞吐。

  DTxGrain:繼承自ConcurrentTxGrain,但提供分布式事務支持,可以以事務方式對多個Grain提交事件。

  ObserverGrain:事件訂閱Grain,訂閱上面幾個Grain的Event執行后續流程和同步到讀庫。

  ShadowGrain:事件訂閱Grain,訂閱上面幾個Grain的Event執行需要依賴事件生產者實時狀態的業務流程。

  DTxObserverGrain:功能同ObserverGrain,生產者為DTxGrain的時候需要使用該Grain.

  DTxShadowGrain:功能同ShadowGrain,生產者為ShadowGrain的時候需要使用該Grain.

四、歸檔

由於EventSourcing會產生大量的事件日志,會占用大量的存儲空間,但手動清理會導致狀態異常和冪等性丟失,所以由框架對事件進行歸檔以減少事件庫的事件量同時保證可靠性。

  歸檔條件:歸檔的條件可以通過ArchiveOptions對每種Actor進行配置。

  歸檔方式:歸檔方式有清理和轉移兩種方式。

  清理:直接刪除需要歸檔的事件。

  轉移:把需要歸檔的事件從時間表轉移到歸檔表,由管理員后續處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM