高性能最终一致性框架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- ...
随机推荐
- C程序的函数说明使用和特点说明第一节
一.函数的特点: 全部都是全部函数构成 面向过程的:是函数式语言 函数的调用 是按需调用 封装包含 二.程序中函数的作用: 可以使用函数使程序变的简短 和 清晰 提高代码重用性 提高开发效率 有利于程 ...
- fedora安装设置
添加视频解码rpmfusion源: sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-st ...
- Day14:CSS垂直居中
verticle-align:middle vertical-align:middle实现css垂直居中是常用的方法,但是需要注意,vertical生效的前提是diaplay:inline-block ...
- (16)打鸡儿教你Vue.js
博客: Hexo搭建个性博客 https://hexo.io/zh-cn/ 快速.简洁且高效的博客框架 超快速度 Node.js 所带来的超快生成速度,让上百个页面在几秒内瞬间完成渲染. 支持 Mar ...
- 如何解决金蝶IKernel.exe报错 Windows Installer 错误 重新安装、无法卸载
如何解决金蝶IKernel.exe报错 Windows Installer 错误 金蝶这个小婊子,就是这么贱. 卸载了高版本的,再安装低版本就不能安装上,死活都不能安装. 请手动启动一下Install ...
- 记一次vue+vuex+vue-router+axios+elementUI开发(二)
开发环境跟脚手架初始完毕后,我们开始配置axios请求后台接口 axios使用说明:https://www.kancloud.cn/yunye/axios/234845 1.本人是在脚手架中的sr ...
- [CMS]ThinkCMF框架存在任意内容包含漏洞
原出处:https://www.freebuf.com/vuls/217586.html 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3 ...
- 升级springboot导致的业务异步回调积压问题定位
1. 起因 A与B云侧模块特性联调的过程中,端侧发现云侧返回有延迟的情况. 7月19日与A模块一起抓包初步判断,B业务有积压的情况. 7月18日已经转侧B业务现网版本,由于使用一套逻辑.故可能存在请求 ...
- 容易被忽视的python装饰器的特性
今天发现了装饰器的另一种用法,下面就先上代码: data_list = [] def data_item(func): data_list.append(func) return func @data ...
- 记一次有惊无险的 JVM 优化经历
转载:https://my.oschina.net/u/3627055/blog/2995973 背景 生产环境有二台阿里云服务器,均为同一时期购买的,CPU.内存.硬盘等配置相同.具体配置如下: 节 ...