AKKA文档(java版)—位置透明性

2.6 位置透明性

前一章节描述了如何使用角色路径来实现位置透明性。这一个特性应该需要一些额外的说明,因为与之关联的术语“transparent remoting”(透明的远程处理)在编程语言、平台和技术中的用法是不一样的。

2.6.1 默认分布式
Akka中的所有事物被设计成用于分布式环境中:角色之间的交流都是纯信息传递,并且是同步的。这一成就已经被用于确保所有的功能在单个JVM或者在拥有数以百计的机器的集群中运行都同样有效。实现这一功能的关键在于从远程到本地的优化代替试图从本地到远程的范化。关于第二种方式注定要失败的详细讨论请访问this classic paper

2.6.2 透明方式被打破
对Akka适用的,不一定适用于使用它的应用,因为设计分布式执行会带来一些限制。最明显的一点就是所有通过电缆发送的消息都必须可序列化。虽然有一点不太明显的就是包括闭包在内的远程角色工厂,用来在远程节点创建角色(即Props内部)。
另一个结论是,要意识到所有交互都是完全异步的,它意味着在一个计算机网络中一条消息需要几分钟才能到达接收者那里(基于配置),而且可能比在单JVM中有更高丢失率,后者丢失率接近于0(还没有确凿的证据)。

2.6.3 如何远程使用?
我们持透明性的观点的限制是几乎没有关于Akka远程处理层的API:它纯粹是配置驱动的。根据前面章节讲述的原则去编写你的应用,然后在配置文件中指定角色子树的远程部署。你的应用可以用这种方式在不需要改动代码的情况下实现横向扩展。唯一的允许通过编程影响远程部署的API是Props,Props可以指定Deploy实例的属性,这种方式等同于通过配置文件部署(如果两种方式都用了,会以配置文件优先)。

2.6.4 点对点 VS 客户端-服务器端
Akka远程处理是一个在点对点模式下用来连接角色系统的通讯模块,而它是Akka集群的基础。远程处理是通过两个设计决策(相关的)作为导向来设计的:

  1. 相关系统之间的通信是对等的:如果一个系统A可以连接到系统B,那么系统B也一定可以独立的连接到系统A。
  2. 关于连接模式,通信系统的地位是对等的:没有一个系统是只能接受连接,也没有一个系统只能发起连接。

通过这些决策我们知道是不可能通过预定义角色(审校者注:原文为role,而不是文档通常出现的Actor)(违反假设1)和涉及网络地址转换或负载平衡器的设置(违反假设2)来安全的创建纯粹的client-server设置。

client-server的设置最好使用HTTP或者Akka I/O。

2.6.5 利用路由器纵向扩展标记点
除了能够在集群的不同节点上运行角色系统的不同部分,还可以通过支持并行的多角色子树扩展到更多的内核(想象成一个搜索引擎可以并行的处理不同的查询)。克隆可以不同的方式路由,例如轮询。唯一要做的就是开发人员需要声明一个特定的角色“withRouter”,然后,将会创建一个路由角色,该角色将产生许多可配置的期望类型的子角色并以配置指定的方式路由到它们。一旦声明了这样的一个路由器,它的配置可以自由的用配置文件覆盖,还可以与远程部署(的一些)子角色混合。更多内容请见Routing(Scala)Routing(Java)

时间: 2024-07-29 08:45:53

AKKA文档(java版)—位置透明性的相关文章

AKKA文档(java版)—类型化角色

3.2 类型化角色 Akka的类型化角色是活动对象(Active Object)模式的实现.Smalltalk诞生的时候,默认的方法调用由异步派发代替同步操作. 类型化角色由2部分组成,包括一个公共的接口和实现,如果你有"企业级"Java的开发经验,这对你来说会非常熟悉.与普通的角色一样,你有一个外部的API(公共接口实例),将异步的方法调用委托给实现类的一个私有实例. 类型化角色对比角色的优势是你可以有一个静态的约定,而不需要去定义你自己的消息,不好的一面就是它会限制你能做什么和不能

AKKA文档(java版)—角色的引用、路径和地址

2.5 角色的引用.路径和地址 这一章描述,角色在一个有可能是分布式的角色系统中是如何被识别和定位的.它关系到了角色系统形成的内在监管层级以及角色跨越多个网络节点之间通信的位置透明化. 上述图片显示了角色系统中几个最重要实体之间的关系,请仔细阅读.   2.5.1什么是一个角色引用? 一个角色引用是ActorRef的一个子类型,它的主要目的是为它所代表的角色提供发送消息的功能.每个角色可以通过self字段访问自己指定(本地)的引用,这个引用包括发送者引用,默认会发送所有消息给别的角色.相反的,在

AKKA文档(java)——术语,概念

原文:http://doc.akka.io/docs/akka/2.3.6/general/terminology.html 译者:吴京润 本章我们试图建立一个通用的术语列表,用来定义有关并发和分布式系统的坚实的基础,而这也是akka的目标.请注意,在这些术语当中许多并没有一致的定义.我们简单的寻求在akka文档范围内使用的工作定义. 并发与并行 并发与并行是相关的概念,但是也有很多细节上的差异.并发意味着两个或更多的任务正在取得进展,即使它们不是同时执行的.例如,可以用时间片的方式实现这一点,

word文档横版变成竖版的图文教程

1.点击 文件 -- 页面设置. 文档横版变成竖版的图文教程-竖版照片怎么变成横版"> 2.将纵向改成横向,另外最下面默认也要点一下,不然你这次改完后下次再打开word文档又得重新设置.最后确定即可. 3.最后横版的就变成竖版了.

android平台api帮助文档---android版的MSDN

android平台api帮助文档---android版的MSDN            做android应用开发,现在网上的资料大把大把的,但是都是零零碎碎的,有时候去查一个接口得去android官方网站http://developer.android.com/develop/index.html,由于网络速度问题,有时候要很久才能出来,真急死人了,那有没有快捷一点的方式呢?         当然有.那就是把android SDK api帮助文档都下下来,但是怎么下呢?         第一步:

AKKA文档(java版)

目前我正在翻译AKKA官网文档.翻译:吴京润 译者注:本人正在翻译AKKA官网文档,本篇是文档第一章,欢迎有兴趣的同学加入一起翻译. 1.    介绍 1.1    什么是AKKA? 1.2    为什么选择AKKA? 1.3    AKKA入门 1.4    hello world 1.5    用例与部署场景        1.6    akka的用例示例 2.   综述        2.1   术语,概念        2.2   角色系统        2.3   什么是角色    

AKKA文档(java版)—角色

原文地址  译者:Zhanggc      审校:吴京润 角色 角色模型对编写并发.分布式系统进行了高度抽象.它减轻了开发者必须对互斥锁与线程管理的负担,更容易编写出正确的并发与并行系统.早在1973 年 Carl Hewitt 发表的论文中定义了角色,但一直流行于Erlang 语言中,随后被爱立信公司应用于建立高并发.可靠通信系统,取得了巨大成功. Akka 框架里面角色的API 跟Scala 框架里面角色相似,后者一些语法曾经模仿Erlang语言. 创建角色 注意:由于Akka强迫父级监管者

AKKA文档(Java版)—建立有限状态机角色

原文地址  译者:Zhanggc 建立有限状态机角色 概述 有限状态机模式在Erlang design principles里面被很好描述出来.简而言之,它可以被视为一组关系: State(S) x Event(E) -> Actions (A), State(S') 这些关系描述为: 如果我们在状态S 和 时间E 发生,我们应该执行动作A 与转换到状态S'. 而Scala 程序语言使构建一个良好内部DSL(领域特定语言)成为可能,后者用于规划有限状态机(请见FSM).对于用同样方法,由于Jav

AKKA文档(java版)——什么是AKKA?

原文:http://doc.akka.io/docs/akka/2.3.6/intro/what-is-akka.htmll  译者:吴京润 可扩展的实时事务处理 我们相信编写并发.容错.可扩展的应用相当的困难.盖因大多数时候我们一直在使用错误的工具和错误的抽象等级.AKKA就是为了改变这一切的.我们利用角色模型提升了抽象等级,并且提供了一个用来构建可扩展的.弹性的以及响应式应用的更好的平台--更多信息请见Reactive Manifesto.对于容错机制我们采用"让它崩溃"模型,这一