在.NET中实现Actor模型的不同方式
上周,《实现领域驱动设计》(Implementing Domain-Driven Design)一书的作者Vaughn Vernon,发布了Dotsero,这是一个使用C#编写的、基于.NET的Actor模型工具包,它的实现参考了Akka API。Akka工具包是对Actor模型的一种实现,目前为止已经有对应Java和Scala版本的API。
今年早些时候,微软Research部门也发布了一个基于Actor模型的框架,Orleans框架的预览版。这个框架采用了云端编程模型,编写这个框架的目的在于尽可能减少创建互动式的服务时所面对的各种挑战,这些服务往往对伸缩性和可靠性有较高要求。
Orleans团队认为,虽然Erlang和Akka这些Actor平台已经在简化分布式系统编程方面前进了一步,但由于它们提供了相对较低层次的抽象与系统服务,因此自身的复杂性依然很高。开发者们必须要成为分布式系统方面的专家,才有可能使用这些工具创建正确的解决方案。为了避免这些复杂性,并吸引主流开发者,Orleans团队提升了Actor的抽象层次。虽然它仍然基于Actor模型,但与任何现有的基于Actor模型的平台所不同的是:它将Actor视为抽象的,而不是物理的实体。
最近,Vaughn与Orleans项目的带头人,来自微软Research部门的Sergey Bykov在twitter上进行了一番讨论。Vaughn认为,Orleans本质上并非是一种基于Actor模型的实现,其中部分原因在于它缺少了用以支持有限状态机(FSM)的Become和Unbecome方法,而Vaughn认为这是Actor原始的定义中所必需的一部分。他同时也认为,由于在Orleans中Actor是始终存在的,那么当客户端对某个本应不存在的Actor发起请求时,它难以意识到这一点,从而容易引发问题。
Sergey在回应中表示,Become只是读取定义的其中一种方式,并非Actor模型所必需的一部分。而从他的经验来看,由于Orleans中的Actor始终存在,因而减少了竞态条件的产生,并且简化了恢复操作,从这方面来看由此可能产生问题的可能性比Vaughn所说要小很多。如果某个Actor不应该存在,那么可以通过由应用程序逻辑返回一个错误状态的方式进行处理,虽然他也承认这种方式并不够理想,但比起在创建Actor时遇到竞态条件的情况还是要更好一些。
最近, Azure方面的一位微软MVP,Richard Astbury创建了一个简单的物联网网关应用程序,以此表明他对Orleans的观点,即Orleans能够帮助开发者在云端创建大规模、低延迟并且适应性良好的.NET应用程序。Richard表示,虽然这只是个简单的示例,但它已经包含了创建更复杂的场景时所需的各种基础构建块了。
今年三月时,有一份名为《Orleans:针对可编程性与伸缩性的分布式虚拟Actor》的论文专门讲解了Orleans背后的设计原则。
Vaughn去年在一篇关于响应式领域驱动设计(DDD)的文章中谈论了关于Actor模型的话题,并且在之前的一次演讲中谈论了Actor Model的产生以及DDD的相关话题。
在.NET中实现Actor模型的不同方式的更多相关文章
- Java中的线程模型及实现方式
概念: 线程是一个程序内部的顺序控制流 线程和进程的比较: 每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. 线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和 ...
- springmvc中的视图模型的返回方式
way1:略过; way2:(神似way1)通过在方法的参数中添加一个Model类型的参数,,该参数由spring自动生成传入, 然后在方法内部使用addAttribute()方式添加模型数据, 最后 ...
- Actor模型原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
- Actor模型及原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
- 【Akka】Actor模型探索
Akka是什么 Akka就是为了改变编写高容错性和强可扩展性的并发程序而生的.通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台.在容错性方面我们採取了" ...
- akka设计模式系列(Actor模型)
谈到Akka就必须介绍Actor并发模型,而谈到Actor就必须看一篇叫做<A Universal Modular Actor Formalism for Artificial Intellig ...
- 基于Actor模型的CQRS、ES解决方案分享
开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQRS/ES解决方案分享>,最近一段时间我一直是这个话题的学习者.追随者,这个话题目前生产环境落地的资料少一些,分 ...
- 高系统的分布性有状态的中间层Actor模型
写在前面 https://www.cnblogs.com/gengzhe/p/ray_actor.html Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构 ...
- Actor模型的状态(State)+行为(Behavior)+邮箱(Mailbox)
状态(State)+行为(Behavior)+邮箱(Mailbox) 基于Actor模型的CQRS.ES解决方案分享 开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQ ...
随机推荐
- python webdriver grid多节点运行webdriver程序
grid整理: 机制 Hub机器和节点机器上要装jdk和jar包 A机器:hub 中控:用来监控所有节点机的状态 启动命令: java -jar selenium-server-standalone ...
- cmd中执行jar文件命令(待参数)
cmd中执行jar文件命令(待参数) 1,jar文件路径:F:\products 2,cmd命令: --两个日期参数(空格隔开) java -jar F:\products\analysis.jar ...
- (译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2
(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2 译者注: 原文来自:https://tech.amikelive.com/node-706/compre ...
- LA 7278 Game of Cards(SG函数)
https://vjudge.net/problem/UVALive-7278 题意: 两个人玩游戏,现在有n堆牌,轮到自己时,先在牌堆中选一堆牌,先在牌堆中选择拿走0~k张牌(至少得剩下一张),然后 ...
- C++ 构造函数后加冒号
其实冒号后的内容是初始化成员列表,一般有三种情况: 1.对含有对象成员的对象进行初始化,例如, 类line有两个私有对象成员startpoint.endpoint,line的构造函数写成: line( ...
- 【源码学习之spark core 1.6.1 各种部署模式所使用的的TaskSceduler及SchedulerBackend】
说明:个人原创,转载请说明出处 http://www.cnblogs.com/piaolingzxh/p/5656879.html 未完待续 未完待续
- thinkphp5的auth权限认证(转自thinkphp官方文档+自己总结)
thinkphp5的auth权限认证(转自thinkphp官方文档+自己总结) 一.总结 一句话总结:相当于就是用其它thinkphp的扩展一样,都是引入扩展,配置扩展,然后使用 引入 配置 使用 基 ...
- MySQL数据库安装和Navicat for MySQL配合使用
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司. MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...
- HDU-1794 方格填数 (贪心+四分)
题目大意:给一个由自然数构成的nxn方阵,其中有k个元素为0,现在要从给出的m个元素中挑出k个填入矩阵,是和的增量最大.和定义为所有子方阵上的元素之和. 题目分析:对于尺寸固定的方阵,计算和的时候每个 ...
- dbms_job.submit方式创建job,太老了
--方法一declarejobno number; begin dbms_job.submit(jobno, 'xxxx;', xxxx, 'xxxx'); commit ...