.NET的Actor模型:Orleans

 

Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSourcing/CQRS系统。

传统的三层体系结构包括无状态的前端,无状态的中间层和存储层在可伸缩性方面是有限制的,由于存储层在延迟和吞吐量方面的限制,这对于每个用户请求都有影响。通常办法是在中间层和存储层之间添加缓存层来提高性能。然而,缓存会失去了大部分的并发性和底层存储层的语义保证。为了防止缓存和存储池的不一致更新,应用程序或缓存管理器需要实现一个并发控制协议。

无论是否使用缓存,无状态中间层并不提供本地数据,因为它使用的是数据装载范式: 对于每个请求,数据是来自存储层或缓存加装到中间层,如果是一个社会关系图,一个请求将会激活关联很多子实体对象,这就对缓存一致性带来更大的挑战。

Actor模型提供了一个解决这些挑战的有吸引力的依靠函数装载的范式。Actor允许建立一个有状态的中间层,缓存的性能优势与封装的数据局部性都通过特定于应用程序的业务实体封装协调了(DDD的聚合根用行为守卫状态,聚合根保存在缓存中,聚合根实体的状态字段也在缓存中,对状态字段的操作只能通过实体行为,保证状态一致性)。此外,Actor容易实现中间层中水平的、"社会"、实体之间的关系。

分布式系统编程的另一个观点是面向对象编程(OOP)。虽然OOP是一个建立复杂系统模型直观的方法,但是他被受欢迎的面向服务的体系结构(SOA)边缘化了。当然人们仍然可以受益于OOP实现服务组件时。然而,在系统层面上,开发人员必须考虑松耦合的分区服务,通常会导致和应用程序的概念业务对象不匹配,这导致了目前主流方向由开发人员构建分布式系统非常困难。Actor模型将OOP带回了系统级开发,开发人员非常像熟悉交互的对象的模型。

例如Erlang和Akka的Actor平台在简化分布式系统编程方面是向前迈出了一步。然而,他们仍然负担与许多分布式系统的复杂性,因为开发人员面临相对低水平的抽象和系统服务。关键的挑战是开发管理Actor生命周期的代码,处理分布式竞争、处理故障和恢复Actor以及分布式资源管理等等都很复杂,因此,如果建立一个应用程序必须正确的解决这些问题,开发人员则必须是一个分布式系统专家(难度太大)。

为了避免这些复杂性,微软研究院建造了Orleans的编程模型,运行时它提高了Actor的抽象级别。Orleans的目标不是分布式系统专家级别的开发人员,虽然我们的专家客户发现它也有吸引力。和现有的基于actor平台有本质差异,它是把Actor作为虚拟实体,而不是实际物理的。

首先,一个Orleans的Actor总是存在的,但是它不能被显式地创建或销毁。它的存在超越任何内存中任何实例的生命周期,从而超越了任何特定服务器的生命周期。

第二,Orleans Actor是自动实例化:如果内存没有Actor实例,它会自动创建,发送到Actor的一个消息是当前服务器上创建一个新的实例。一个未使用的Actor实例作为运行时资源管理的一部分自动回收。一个actor实例从来不会失败: 如果服务器S崩溃, 发送给这个S中Actor的下一个消息将被自动实例化到另外一个服务器A,消除应用程序需要监督和人为编码显式地重建失败的Actor。

第三,Actor的位置实例对应用程序代码是透明的,这极大地简化了编程。

第四,Orleans可以自动创建多个实例相同的无状态的Actor,Actor可以无缝地热扩展。

Orleans给开发人员一个虚拟"Actor空间",类似于虚拟内存,使他们能够调用系统中的任何Actor,不管它是否存在于内存。虚拟化间接依赖从虚拟Actor到实际Actor的映射。这种级别的间接寻址为运行时解决许多分布式系统问题带来机会,否则开发人员必须直接自己解决这些复杂问题,如Actor定位和负载平衡、失活未使用的Actor,复苏因服务器失败的Actor,这是出了名的困难。因此,虚拟Actor方法大大简化了编程模型。同时允许运行时加载和透明地从失败中恢复。

Orleans官方文档:https://github.com/dotnet/orleans/wiki

Orleans白皮书: http://research.microsoft.com/pubs/210931/Orleans-MSR-TR-2014-41.pdf

.NET Actor Model Implementations Differ in Approach

http://www.cnblogs.com/liwt/category/642869.html

Orleans:NET的Actor模型的更多相关文章

  1. Orleans框架------基于Actor模型生成分布式Id

    一.Actor简介 actor模型是一种并行计算的数学模型. 响应于收到的消息,演员可以:做出决定,创建更多Actor,发送更多消息,并确定如何响应接收到的下一条消息. 演员可以修改自己的状态,但只能 ...

  2. 高系统的分布性有状态的中间层Actor模型

    写在前面 https://www.cnblogs.com/gengzhe/p/ray_actor.html Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构 ...

  3. .NET的Actor模型:Orleans

    Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...

  4. 《通过C#学Proto.Actor模型》之 HelloWorld

    在微服务中,数据最终一致性的一个解决方案是通过有状态的Actor模型来达到,那什么是Actor模型呢? Actor是并行的计算模型,包含状态,行为,并且包含一个邮箱,来异步处理消息. 关于Actor的 ...

  5. 在.NET中实现Actor模型的不同方式

    上周,<实现领域驱动设计>(Implementing Domain-Driven Design)一书的作者Vaughn Vernon,发布了Dotsero,这是一个使用C#编写的.基于.N ...

  6. Proto.Actor模型

    Proto.Actor模型 http://proto.actor/ https://github.com/axzxs2001/ProtoActorSample https://www.cnblogs. ...

  7. 基于Actor模型的CQRS、ES解决方案分享

    开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQRS/ES解决方案分享>,最近一段时间我一直是这个话题的学习者.追随者,这个话题目前生产环境落地的资料少一些,分 ...

  8. Actor模型(分布式编程)

    Actor的目的是为了解决分布式编程中的一系列问题.所有消息都是异步交付的,因此将消息发送方与接收方分开,正是由于这种分离,导致actor系统具有内在的并发性:可以不受限制地并行执行任何拥有输入消息的 ...

  9. Actor模型的状态(State)+行为(Behavior)+邮箱(Mailbox)

    状态(State)+行为(Behavior)+邮箱(Mailbox) 基于Actor模型的CQRS.ES解决方案分享 开场白 大家晚上好,我是郑承良,跟大家分享的话题是<基于Actor模型的CQ ...

随机推荐

  1. Android的PackageManager的使用

    Android系统提供了很多服务管理的类,包括ActivityManager.PowerManager(电源管理).AudioManager(音频管理)以及PackageManager管理类.Pack ...

  2. 用XAML做网页!!—广告展示区

    原文:用XAML做网页!!-广告展示区 此次我们来进行广告展示区块的制作. 首先在Show区块中去掉原来设置的背景色,加入新的渐变背景设定: <Grid.Background> <L ...

  3. 用XAML做网页!!—框架

    原文:用XAML做网页!!-框架 上一篇中我进行了一下效果展示和概述,此篇开始将重现我此次尝试的步骤,我想大家通过阅读这些步骤,可以了解到XAML网页排版的方法. 下面就开始编写XAML,首先来定义一 ...

  4. Linux环境编程之同步(二):条件变量

    相互排斥锁用于上锁,条件变量则用于等待.条件变量是类型为pthread_cond_t的变量.一般使用例如以下函数: #include <pthread.h> int pthread_con ...

  5. android2.2应用开发之IccCard(sim卡或USIM卡)

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...

  6. css实现背景渐变色效果

    webkit内核的浏览器,例如(chrome,safari等) background:-webkit-gradient(linear,0 0,0 100%,from(#000000),to(#ffff ...

  7. Android在Context详细解释 ---- 你不知道Context

                                                                                                         ...

  8. zoj 3822 Domination (可能性DP)

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) Caching Application Bl ...

  10. linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线

    在一个我们谈到了如何编写一个简单的字符设备驱动程序,我们不是神,编写肯定会失败的代码,在这个过程中,我们需要继续写代码调试.在普通c应用.我们经常使用printf输出信息.或者使用gdb要调试程序,然 ...