高性能最终一致性框架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进行配置。
归档方式:归档方式有清理和转移两种方式。
清理:直接删除需要归档的事件。
转移:把需要归档的事件从时间表转移到归档表,由管理员后续处理。
高性能最终一致性框架Ray之基本功能篇的更多相关文章
- 高性能最终一致性框架Ray之基本概念原理
一.Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案. 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错. 共享内存受限于 ...
- 高性能分布式执行框架——Ray
Ray是UC Berkeley AMP实验室新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能. Ray目前还处于实验室阶 ...
- 框架Ray
高性能最终一致性框架Ray之基本概念原理 一.Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案. 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且 ...
- 如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)
各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务(gts/fescar自动补偿的形式) 基于TCC实现的分布式事务 基于SAGA实现的分布式事 ...
- 如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)
各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 这些形 ...
- 使用 Masstransit中的 Request/Response 与 Courier 功能实现最终一致性
简介 目前的.net 生态中,最终一致性组件的选择一直是一个问题.本地事务表(cap)需要在每个服务的数据库中插入消息表,而且做不了此类事务 比如:创建订单需要 余额满足+库存满足,库存和余额处于两个 ...
- 分布式事务最终一致性-CAP框架轻松搞定
前言 对于分布式事务,常用的解决方案根据一致性的程度可以进行如下划分: 强一致性(2PC.3PC):数据库层面的实现,通过锁定资源,牺牲可用性,保证数据的强一致性,效率相对比较低. 弱一致性(TCC) ...
- .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.预备知识:数据一致性 关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认 ...
- 脑裂 CAP PAXOS 单元化 网络分区 最终一致性 BASE
阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析 https://mp.weixin.qq.com/s/Cnzz5riMc9RH19zdjToyDg 汤波(甘盘) 技术琐话 2020- ...
随机推荐
- PHP 鸟哥:我也曾经是“不适合”编程的人
网名:雪候鸟,大家尊称鸟哥,惠新宸 @Laruence, 是国内最有影响力的 PHP 技术专家,PHP 开发组核心成员,PECL 开发者,Zend 公司外聘顾问.他曾供职于雅虎,百度,现在新浪微博任平 ...
- (27)打鸡儿教你Vue.js
v-for 数组参数的顺序 当含有index时,以前传递的参数顺序是: (index, value).现在(value, index) ready替换使用新的mounted钩子代替,通过使用mount ...
- golang orm
package main import ( "fmt" "github.com/astaxie/beego/orm" _"github.com/go- ...
- PageHelper的问题
如果分页语句没有被消耗掉,它一直保留着,直到被织入到下一次查询语句,如果 被织入的查询语句自己有LIMIT限制,那么两个LIMIT就导致语法错误了. PageHelper.startPage(page ...
- 【CSP模拟赛】凤凰院凶真(最长公共上升子序列)
题目描述 α世界线.凤凰院凶真创立了反抗SERN统治的组织“瓦尔基里”.为了脱离α线,他需要制作一个世界线变动率测量仪. 测量一个世界线相对于另一个世界线的变动率,实质上就是要求出这两个世界线的最长公 ...
- window.location.href在微信端不起作用的解决方法?
在我从第一张图的某个活动进去到详情页,点击返回是可以的,这里我是用了一个click事件,window.location.href="某死链接" 但是第二次进去点击之后点击事件是可以 ...
- Git的使用(4) —— 分支的概念和使用
1. 概念 在SVN中,分支并不是很便于使用.但是在Git中,分支就变成了特别好用的功能呢,受到大多数使用者的青睐. 分支中有几个概念: (1) 分支:分支就是每一次提交创建的点连接成的线. (2) ...
- JVM(一) ---JVM的数据模型
JVM的逻辑内存模型图 [逻辑内存模型图] ----- JVM内部分区 其实JVM内部不仅仅只有栈和堆 包括 程序计数器 . Java 虚拟机栈 .本地方法栈.Java 堆.方法区等 1. 程序计数器 ...
- 范仁义web前端介绍课程---4、html、css、js初体验
范仁义web前端介绍课程---4.html.css.js初体验 一.总结 一句话总结: html:就是网站的骨架,比如div标签.a标签等 css:style标签或者style属性里面的就是css j ...
- html表格导出Excel的一点经验心得
最近在做统计功能,要求统计结果(表格)既能查看(BS系统,在浏览器查看),又能输出为excel文件.对于输出excel文件,在网上找到n种方案,因为还需查看,最终选择了统计结果输出为table,查看时 ...