zoukankan      html  css  js  c++  java
  • 高性能最终一致性框架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进行配置。

      归档方式:归档方式有清理和转移两种方式。

      清理:直接删除需要归档的事件。

      转移:把需要归档的事件从时间表转移到归档表,由管理员后续处理。

  • 相关阅读:
    NOIP2011
    Android获取百度音乐下载音乐和歌词下载链接
    oracle备份和升级数据库
    谁刚开始学习----数据
    [Angular2] Build reuseable template with ngTemplateOutlet
    [Angular 2] Set Values on Generated Angular 2 Templates with Template Context
    [Angular2 Router] Resolving route data in Angular 2
    [MobX] MobX fundamentals: deriving computed values and managing side effects with reactions
    [Docker] Build a Simple Node.js Web Server with Docker
    [AngularJS NG-redux] Integrate Redux Devtools
  • 原文地址:https://www.cnblogs.com/gengzhe/p/11567649.html
Copyright © 2011-2022 走看看