高性能最终一致性框架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进行配置。

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

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

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

转载于:https://www.cnblogs.com/gengzhe/p/11567649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Orleans 项目基本上被认为是并行计算模型 Actor Model 的分布式版本。  虽然已经存在 Erlang 和 Akka 这样利用 Actor Model 的框架,用户仍然需要做很多工作来确保那些 actors 保持在线以及能够处理故障和恢复。Orleans 框架着眼复杂项目和 actor 管理,让用户能够编写分布式项目而无需担心。    关于自家的云计算平台,微软最大的一个卖点就是开发人员可以使用.NET、Visual Studio和其它编程工具来编写Azure应用程序。不过这并不是事情的全部,微软研究人员正在研发下一代云计算编程模式和相关工具,根据最新的资 料,Orleans就微软下一代云计算编程模式(之一)。    Orleans是一种新的编程模式,用来提升微软通用语言运行库(CLR)的抽象水平,它引入了“grains”的概念,这是一个可以在数据中心之 间迁移的计算和数据存储单元。Orleans自身还将提供很多运行时,包括Geo-Distribution、数据复制与一致行、性能监控、自适应控制、 运行时监控、分布式调试。    Orleans的宗旨就是为了创建一种既适用于客户端又适用于服务器的编程模式,简化代码调试,提高代码的可移植性。    目前已知的资料并没有任何关于Orleans开发计划的内容,Orleans也许还处在概念设计阶段,也许已经开始了初期的开发工作,这些都要耐心等待才会有答案。相关入门教程: http://www.rm5u.com/orleans/orleans-intro.html 标签:云计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值