高性能最终一致性框架Ray之基本概念原理

一、Actor介绍

Actor是一种并发模型,是共享内存并发模型的替代方案。

640?wx_fmt=png

共享内存模型的缺点:
  1. 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错。

  2. 共享内存受限于单节点的服务器资源限制。

Actor模型的优点:
  1. 线程之间以消息进行通信,消息按顺序单线程处理,不存在状态竞争。

  2. 以消息方式通信,可以方便的组建集群。

  3. 把State和Behavior绑定,能更好的控制状态。

名词解释:

Mailbox:可以理解为先入先出队列,负责接收和缓存送达的消息。

State:状态信息,比如用户的账户余额信息。

Behavior:负责按顺序处理Mailbox中的消息,比如扣款消息、到账消息,查询余额消息等。

二、Orleans介绍

Orleans是.Net基金会维护的一个Actor跨平台开源框架,独创Virtual Actor概念,支持分布式集群。

项目地址:http://dotnet.github.io/orleans/

640?wx_fmt=png

有以下优点:
  1. 以对象方式访问Actor,符合面向对象的使用习惯。

  2. 提出Virtual Actor概念,可以通过ID访问细粒度的Actor,能承载数千万的Actor对象。

  3. 支持Stateful,能替代缓存层来对内存状态进行更精确的控制,减少数据库的压力。

  4. 高性能,单个Actor能支持10万+的QPS。

  5. 激活透明,Actor对访问者是永久存在的,但也提供完整的生命周期控制,拓展方便。

  6. 原生支持集群,但Actor位置透明,访问者不需要关注Actor运行在那个节点,集群会根据节点情况进行负载调度。

  7. 提供了多种集群支持,集群部署非常方便,支持AdoNet,Zookeeper,K8s,SF等。

  8. 提供了完整的单元测试解决方案,方便进行单元测试。

  9. 提供了完善的监控工具,能够详细的监测各种指标。

  10. 基于.net core,支持各种平台。

名词解释:

Silo:集群中的一个节点,负责维护当前节点的Grains。

SiloGateway:每个节点都存在,负责维护集群状态和转发请求。

Grain:相当于Actor,通过ID+Interface来识别。

Client:用来访问集群中的Grain的客户端工具。

三、Ray介绍

Ray是基于Actor模型构建的基于事件朔源的分布式最终一致性高性能框架,把传统的复杂的分布式事务拆分为由事件驱动的线性处理流程的一种方式,性能和吞吐更高,响应更快。

Ray提供了状态维护、事件发布/订阅、幂等性控制、分布式事务等模块,并内置了分布式ID、分布式锁、分布式权重锁等服务。

Ray提供卓越的性能,单个Actor能达到20000/s的事件。

项目地址:https://github.com/RayTale/Ray

640?wx_fmt=png

名词解释:

  1. 状态(State):内存聚合数据。

  2. 事件(Event):状态变化的信息。

  3. EventBus:提供事件发送和事件消费订阅。

  4. 幂等性:保证事件送达多次不会导致状态异常,例如上图的A的转账事件多次送达B,但是B只会增加一次余额。

Ray的最终一致性转账原理

640?wx_fmt=png

A用户调用A账户Actor的转账方法进行转账,A账户Actor根据内存状态进行余额校验,如果余额不足,则直接返回失败原因,如果校验成功则产生一个转账Event(记录目标账户Id、转账金额、剩余余额)并持久化,然后修改内存状态和发送到EventBus。EventBus一个订阅者根据事件信息修改读库中A账户的余额和往账单表中插入一条转账账单,另外一个订阅者根据事件信息调用B账户Actor的到账方法,B账户Actor会产生一个到账Event(记录到账金额、FromId、剩余余额)并持久化,然后修改内存状态和发送到EventBus,EventBus的一个订阅者根据事件信息修改读库中B账户的余额和往账单表中插入一条到账账单。

原文链接:https://www.cnblogs.com/gengzhe/p/ray_actor.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画:程序员带娃日常(1)

我是一名IT界资深人士做过乙方苦哈哈做过甲方做过项目、搞点管理做过培训、也上台演讲不过现在最大挑战、交期最长的项目是。。。带 娃娃子啊,爸爸也是第一次当爸爸,要请你多多指教啦!1“小刘,把这个需求细化一下。”“兄弟们&…

表达式树练习实践:入门基础

什么是表达式树来自微软官方文档的定义:表达式树以树形数据结构表示代码。它能干什么呢?你可以对表达式树中的代码进行编辑和运算。这样能够动态修改可执行代码、在不同数据库中执行 LINQ 查询以及创建动态查询。好不好玩?表达式树还能用于动…

Servlet与线程安全

Servlet与线程安全 先说结论,Servlet本身是单例的,线程安全的。但是如果引入共享变量,则可能会变得线程不安全。 1. 什么是线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全? 《Java并发编程实…

尝鲜体验 VS Code Python 原生 Jupyter Notebook 支持

9 月 21 日,PyCon China 2019 在上海举办。微软的 VS Code 发布了原生的Juypter Notebook 支持。 虽然要等到月底 Marketplace 里面才会正式更新,但 GitHub 上的 repo 已经包含了相应的 commit,所以还是可以通过手动安装的方式尝鲜。现有 VSC…

Java Web之filter、listener、Interceptor

** 1、Servlet ** Servlet 是服务端的 Java 应用程序,用于处理HTTP请求,做出相应的响应。 当客户端向服务器发出HTTP请求时,首先会由服务器中的 Web 容器(如Tomcat)对请求进行路由,交给该URL对应的 Servl…

abp vNext微服务框架分析

abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究。我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来说几乎是看不懂的,所以研究一番后再…

.NET Conf 2019日程(北京时间)

一年一度的 .NET Conf马上就要开始了,我将日程简易的翻译了一下,并且时间全部转换为北京时间,以方便国内.NETer.第1天 (北京时间9月24日).NET Conf 2019 基调 - Scott Hunter Mads Torgersen James Montemagno Olia Gavrysh Daniel Roth Glenn Condron Bri Achtman欢迎来到 .NE…

Hibernate基础

** 一、什么是Hibernate? **   Hibernate是一个轻量级的ORMapping框架   ORMapping原理(Object Relational Mapping) ORMapping基本对应规则: 1:类跟表相对应2:类的属性跟表的字段相对应3&#xff1…

进击的.NET 在云原生时代的蜕变

你一定看过这篇文章 《进击的 Java ,云原生时代的蜕变》, 本篇文章的灵感来自于这篇文章。北京时间9.24 就将正式发布.NET Core 3.0, 所以写下这篇文章让大家全面认识.NET Core。.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发…

Hibernate懒加载问题的5种解决方案

** 1、Hibernate基础 ** Hibernate基础,传送门 ** 2、什么是Hibernate懒加载 ** 当我们查询一个对象的时候,在默认情况下,返回的只是该对象的代理对象,当用户去使用该对象的属性时,才会向数据库再一次发出查询语…

程序员过关斩将--要想获取我的用户信息,就得按照规矩来

菜菜君,我又来啦又有什么事吗?我按照你上篇文章写的JWT的方式已经把网站认证写完了,而且效果还不错那恭喜你呀,下次面试又多了一项技能不过,现在又有一个问题,我做的系统有一个合作商想要利用我们的用户信息…

E. Surprise me!(莫比乌斯反演 + 虚树 DP)

E. Surprise me! ∑i1n∑j1nϕ(aiaj)d(i,j)设paii∑i1n∑j1nϕ(ij)d(pi,pj)∑i1n∑j1nϕ(i)ϕ(j)ϕ(gcd⁡(i,j))gcd⁡(i,j)d(pi,pj)∑d1ndϕ(d)∑i1nd∑j1ndϕ(id)ϕ(jd)d(pid,pjd)[gcd⁡(i,j)1]∑d1ndϕ(d)∑k1ndμ(k)∑i1nkd∑j1nkdϕ(ikd)ϕ(jkd)d(pikd,pjkd)Tkd∑T1n(∑i1n…

Hibernate 的缓存机制

** 1、Hibernate 应用程序中按照缓存的范围,可以将缓存分为三类 ** (1.1)事务范围缓存(单Session,即一级缓存) 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存。缓存的生命周期依…

.NET分布式大规模计算利器-Orleans(一)

写在前面Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式。我在2015年下半年开始应用Orleans,当时公司的交易系统采用的架构就是基于Orl…

从单机应用到微服务,用户认证走几步?

用户认证指在用户访问服务的时候确认用户的身份,受限于HTTP无状态的特性,应用开发者需要自行实现用户认证相关功能。通常是用户登录时服务端生成通行证返回给客户端,客户端在接下来的请求中携带通行证,然后服务端通过校验该通行证…

编写优雅代码,从挖掉恶心的if/else 开始

背景长话短说, 作为开发人员经常需要根据条件灵活查询数据库,不管你是用rawsql 还是EFCore, 以下类似伪代码大家都可能遇到:特别是在大数据产品或者物联网产品中,字段甚多;if/else 写到死,一边写…

.NET Conf 2019 大会上发布.NET Core 3.0

北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开。多功能性是.Net Core 成为我们的生活一部分的最好解释。如果您是Web开发人员还是想开发桌面或移动应用程序,如果您是游戏…

Spring AOP实现原理

先说结论: Spring AOP采用的是JDK动态代理 CGLIB动态代理模式。当当前类为接口的实现时,采用JDK动态代理,否则用CGLIB、 1、AOP 的存在价值 在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成&#xff0c…

微软推出Python免费在线教程视频

开源中国曾报道过最近微软针对 Python 初学者,推出了一套免费的教程视频。这套视频名为 Python for Beginners,该在线教学视频由微软高级项目经理 Christopher Harrison、以及微软 AI Gaming 的商业开发经理 Susan Ibach 共同讲解,在课程中加…

推荐neter常用优秀开源项目系列之一

.net社区有很多优秀的开源项目,我们今天先推荐6个开源项目;1.MassTransitMassTransit 是一个自由、开源、轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序。MassTransit在现有消息传输上提供了一组广泛的功能, 从而使开发人员能够友好地使用基于…