Learn Orleans 01 - 初探

蓝咒 提交于 2020-03-23 01:46:54

Orleans的官方定义是“用于构建健壮的,可扩展的分布式应用程序的跨平台框架”。它是Actor模型的.NET实现。

本章主要记录一些基础概念。

Actor模型

Actor模型并不是什么新的概念,它由Carl Hewitt在1973年提出,Gul Agha在1986年发表技术报告“Actors: A Model of Concurrent Computation in Distributed Systems”。

--https://blog.csdn.net/gulianchao/article/details/7249117

Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动作和交互的通用规则,最著名的使用这套规则的编程语言是Erlang

一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。

面向对象思想通过隐藏类的私有方法来实现封装,仅允许外部调用公有方法来使用类。这一点在Actor中,给出了另外的理解。Actor外部仅能通过消息调用,Actor内部的实现对外不可见。

Actors一大重要特征在于actors之间相互隔离,它们并不互相共享内存。一个actor能维持一个私有的状态,并且这个状态不可能被另一个actor所改变。

光有一个actor是不够的,多个actors才能组成系统。在actor模型里每个actor都有地址,所以它们才能够相互发送消息。

一个Actor只能顺序地处理消息,它通过Mailbox来存储消息。

Actor概念被运用到许多知名语言和库中,比如Erlang和Elixir, Akka (for the JVM) 和 Celluloid (for Ruby)。

-- https://www.jianshu.com/p/449850aa8e82

Orleans vs akka

orleans常与akka进行比较,它们之间的主要区别在于:

  • Orleans的主要重点是简化分布式计算,并允许非专家编写高效,可伸缩和可靠的分布式服务。
  • Akka是用于构建分布式系统的工具包,它具有强大的功能,但同时也暴露了该领域的内在复杂性。

这两个项目都打算成为完整的解决方案,这意味着Orleans的第二优先级是允许有经验的用户更详细地控制该平台,并将其适应于广泛的用例,而Akka还提高了抽象级别并提供了简化但非常有用的抽象。

另一个区别是设计方法学:

  • 对于Orleans来说,指导性问题是“对于非专家而言,最自然,最容易的默认行为是什么?” 第二个问题是专家如何做出自己的决定。
  • Akka的指导性问题是“我们可以不妥协地提供最小的抽象是什么?” 这意味着对我们而言,“良好的默认设置”并不是由用户期望的结果决定的,而是我们认为用户一旦理解了抽象就将对他们的程序进行推理时最有用的东西-熟悉本身并不是目标。

对于生命周期管理

  • Orleans Grains没有生命周期,无法启动或停止。因此,它们也不会失败并无法重新启动,因此Orleans不提供用于软件故障处理的工具-故障处理方面着重于从硬件崩溃中恢复。

    另一方面,“谷物*激活”*确实具有生命周期和相应的生命周期挂钩,程序员可以使用它们对激活或停用做出反应。

  • Akka Actor实现了完整的模型,包括定义的生命周期开始和结束,这些是显式的操作。持久参与者支持将逻辑计算单元的生命周期扩展到正在运行的流程实例的生命周期之外。重新启动Actor为自动服务恢复提供了强大的手段。

自动创建

  • Orleans Grains会在需要时自动创建,这意味着激活初始化应谨慎对待其具有的外部可见效果-具有持久效果的初始化活动应设置为客户端调用的显式接口方法。自动创建使用户不必考虑需要创建谷物。
  • Akka Actor由其父母明确创建,并实施强制性的父母监督。这样可以精确控制何时执行初始化动作以及创建哪个确切的actor类。

……

总结与解释

尽管Orleans和Akka的实现存在一些重叠,但是很明显,两者都追求完全不同的目标:

  • Orleans提供了一种编程模型,该模型无缝地集成到非分布式方法论和程序员技能中,它可以扩展到单台计算机的范围之外,而不必处理编写分布式应用程序的困难。这是通过做出一组实现选择(例如基于请求的响应式样式以及使用常规方法调用等的至少一次交付)并向用户提供一组受限制的工具来实现的,这些选择是基于使用时无需了解底层技术。从中可以得出上面看到的所有含义,包括缺少谷物的生命周期,这已被抽象化。

  • Akka为建模分布式系统(Actor模型)提供了一种非常简单有效的抽象方法,并向用户提供了该低级工具以及更高的抽象方法。理念是,用户必须了解分布式编程,才能在实现权衡方面做出自己的选择,

-- https://github.com/akka/akka-meta/blob/master/ComparisonWithOrleans.md

成功用例

微软Xbox中几个核心游戏的后端(Halo,战争机器4等等)是通过Orleans实现的,也就说明它应用于大型分布式生产环境是有保障的。
-- https://www.zhihu.com/question/31472959

推荐博文:

https://www.cnblogs.com/sheng-jie/p/11163264.html
https://www.cnblogs.com/shanyou/p/4295523.html
https://www.cnblogs.com/ants/p/5122068.html
https://www.cnblogs.com/gaopang/p/7379759.html
https://www.cnblogs.com/jzfan/p/orleans_demo.html
https://www.cnblogs.com/amber-L/p/12015859.html
https://www.cnblogs.com/zapline/p/6721282.html
https://www.jianshu.com/p/449850aa8e82
https://blog.csdn.net/gulianchao/article/details/7249117

其他资料:

https://dotnet.github.io/orleans/Documentation/index.html
https://github.com/akka/akka-meta/blob/master/ComparisonWithOrleans.md
https://www.brianstorti.com/the-actor-model/
https://en.wikipedia.org/wiki/Actor_model

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!