Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Actor建模解决方案时,设想一群人并为他们分配子任务,将他们的功能安排到一个组织结构,并思考如何处理失败。

ActorSystem是一个重量级结构,它将分配1 ... N个线程,因此每个逻辑程序创建一个。

层次结构

就像在经济组织中一样,Actor自然形成等级制度。程序中某个功能的一个Actor可能希望将其任务分解为更小,更易于管理的部分。为此目的,它启动它监督的子Actor。

虽然解释了监督的细节,但我们将集中讨论一些基本概念。唯一的先决条件是要知道每个Actor都有一个主管,即创建它的Actor。

Actor系统的典型特征是任务被分割和委派,直到它们变得足够小以便一体化处理。在这样做的过程中,不仅任务本身结构清晰,而且可以根据他们应该处理哪些消息,他们应该如何正常反应以及如何处理失败。如果一个Actor没有处理某种情况的手段,它会向其主管发送相应的失败消息,寻求帮助,递归结构允许在高的级别处理失败。

相比之下,分层软件设计很容易转化为防御性编程,目的是不泄漏任何故障。如果问题传达给合适的人,可以找到一个更好的解决方案,而不是试图保持一切“在地毯下”。

现在,设计这样一个系统的困难在于如何决定谁应该监督什么。没有单一的最佳解决方案,但有一些指南可能会有所帮助:

  • 如果一个Actor管理另一个Actor正在做的工作,例如通过传递子任务,父级别应该监督子级别。原因是父级别知道预期会出现哪种故障以及如何处理故障。
  • 如果一个Actor携带非常重要的数据(其状态不能丢失),该Actor应该向其监督的子Actor提供任何可能危险的子任务时,并在适当时处理这些子的失败。根据请求的性质,最好为每个请求创建一个新子项,这样可以简化收集回复的状态管理。这被称为Erlang的“Error Kernel Pattern”。
  • 如果一个Acot依赖另一个Actor履行其职责,它应该观察其他Actor的活动并在收到终止通知时采取行动。这与监督不同,因为观看方对主管策略没有影响。

这些规则总是有例外,但无论你是遵守规则还是违反规则,都应该有理由。

配置容器

Actor系统作为互相协作Actor集合,Actpr管理共享设施(如调度服务,配置,日志记录等)的自然单元。具有不同配置的几个actor系统可以在同一JVM中共存而没有问题,没有全局共享状态在Akka本身。将此与Actor系统之间的透明通信(在一个节点内或通过网络连接)相结合,以查看Actor系统本身可以用作功能层次结构中的构建块。

Actor Best Practices

  1. Actos应该像好伙伴一样:高效地完成工作而不必费心地打扰其他人,避免占用资源。转换为编程这意味着以事件驱动的方式处理事件并生成响应(或更多请求)。参与者不应该阻止(即在占用线程时被动地等待), 可能是锁,网络套接字等 ,除非它是不可避免的;在后一种情况下见下文。
  2. 不要在Actor之间传递可变对象。为了确保,更喜欢不可变的消息。如果通过将其可变状态暴露给外部来破坏actor的封装,那么您将回到正常的Java并发领域,并具有所有缺点。
  3. 使Actor成为行为和状态的容器,这意味着不要经常在消息中发送行为(使用Scala闭包可能很诱人)。其中一个风险是意外地在Actor之间共享可变状态,并且这种对Actor模型的违反不幸地破坏了使Actor在编程中进行编程的所有属性。
  4. 顶级Actor是你的Error Kernel的最内层部分,因此请谨慎创建它们并且更应用真正的分层系统。这有利于故障处理(既考虑配置的粒度和性能),也减少了监护人的压力,如果过度使用,这是一个单一的争用点。

你不应该关心的是什么

actor系统管理她所配置的资源,以便运行它包含的actor。在一个这样的系统中可能有数百万的Actor,当然,应用程序作者无法控制在大型系统中处理消息的确切顺序,这也不是可以预期的。退后一步,放松,让Akka在引擎盖下进行繁重的操作。

停止ActorSystem

当您知道应用程序的所有内容都已完成时,您可以调用ActorSystem的terminate方法。这将阻止监护Actor,又会递归地停止其所有的子Actor 。

如果要在终止ActorSystem时执行某些操作,请查看CoordinatedShutdown。

下节再续!

原文:https://doc.akka.io/docs/akka/2.5/guide/tutorial_5.html

Akka系统《sixteen》译相关推荐

  1. Akka相关术语 译《fifteen》

    在本章中,我们尝试建立一个通用术语,以便为Akka所针对的并发分布式系统进行通信奠定坚实的基础.请注意,对于其中许多条款,没有单一的商定定义.我们寻求提供将在Akka文档范围内使用的工作定义. 并发与 ...

  2. Akka的Actor层级结构《seven》译

    示例简介 在写散文时,最难的部分往往是编写前几句话.在开始构建Akka系统时,有一种类似的"空白画布"的感觉.你可能想知道:哪个应该是第一个Actor?它应该住在哪里?它该怎么办? ...

  3. Akka的类库和模块《six》译

    在深入研究编写Actor的一些最佳实践之前,先预览一下最常用的Akka库会很有帮助.这将帮助您开始考虑要在系统中使用的功能.所有核心Akka功能都可以作为开源软件(OSS)使用.Lightbend赞助 ...

  4. akka框架——异步非阻塞高并发处理框架

    akka actor, akka cluster akka是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模 ...

  5. 使用Twitter Bootstrap,WebSocket,Akka和OpenLayers玩(2.0)

    原始帖子可以在ekito网站上找到. 对于我们的一位客户,我们需要显示一张具有实时更新的车辆位置的地图. 因此,我开始使用Play制作原型! 框架及其最新发布的版本2.0,使用Java API. 我从 ...

  6. scala之Akka的Actor模型(上)

    原文地址:http://my.oschina.net/jingxing05/blog/287213 明确并行和并发 看两张图 并行parallelism 并发concurrency 关键点在于 多个任 ...

  7. 通过Akka学习指数退避(Exponential Backoff)

    原文连接:https://mincong.io/cn/exponential-backoff-in-akka/ 前言 在软件开发中,我们免不了要跟各种错误异常打交道.比如说,当一个服务在调用另一个服务 ...

  8. 【akka】Akka源码分析-Event Bus

    1.概述 转载自己学习,建议直接看原文:Akka源码分析-FSM akka中的EventBus其实是不常用,也最容易被忽略的一个组件. 但如果你深入Cluster的实现就会发现,这个东西其实还挺有用的 ...

  9. akka for java

    目前火热的两大计算框架 Spark 和 Flink 底层的通讯原理使用的都是 akka(当前的 Spark 已经背叛了akka,转投 netty),而网上对 akka 的教程是在太少,推荐 githu ...

最新文章

  1. AI研究员收集NLP数据的四种创意方法(大牛分享)
  2. 2012级计算机应用基础,2012年计算机应用基础
  3. r 多元有序logistic回归_R语言多元Logistic逻辑回归 应用案例
  4. 如何自学python基础-零基础如何学习python
  5. 利用百度的词法分析区分数据
  6. NYOJ 643 发短信 暴力求解
  7. OpenCV C++ 01 - Load Image from File and Display
  8. 5-4卷积神经网(上)5-5卷积神经网(下)
  9. 计算机round是什么函数,round函数
  10. 游戏迷看过来 年末促销买个华为平板 M3可畅玩
  11. linux SNAT、DNAT目标函数
  12. 草根站长的创业路:说说这两年的创业经历
  13. 根据经纬度获取精确地址 (百度地图)
  14. android aar组件化,android module解耦组件化总体概述(推荐)
  15. 简洁桌面(使用Windows自带的桌面整理功能)
  16. 用python画猪_用python画小猪佩奇(非原创)
  17. 我与CSDN的2020
  18. 家用智能投影推荐 五千元档的当贝F5和当贝X3有哪些区别?
  19. vue显示农历_vue中通过时间转换农历得方法封装
  20. 教育云盘在数字校园中的应用

热门文章

  1. [Toolkit]最新Silverlight Toolkit中的DragDrop支持
  2. [WPF自定义控件库]自定义Expander
  3. [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)
  4. Maximal Binary Matrix CodeForces - 803A (贪心+实现)
  5. DevExpress 创建EXCEL
  6. 2016 Bird Cup ICPC7th@ahstu--“波导杯”安徽科技学院第七届程序设计大赛
  7. 详细介绍android rom移植知识普及
  8. 相机标定(三)—— 正交投影和透视投影变换
  9. Hexo+next的侧边栏背景与字体颜色设置方法
  10. 【RobotStudio学习笔记】(一)软件的安装与初步测试