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

简介:

原文:http://doc.akka.io/docs/akka/2.3.6/general/remoting.html  译者:小鱼

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)。 

目录
相关文章
|
3月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
205 5
|
6月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
240 7
使用Java和XPath在XML文档中精准定位数据
|
25天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
56 6
|
4月前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
55 3
java读取linux服务器下某文档的内容
|
5月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
1898 0
|
Java
AKKA文档(java版)——hello world
基于actor在控制台打印这一知名问候的困难在Typesafe Activator教程中名为Akka Main in Java项目中已有介绍。 本教程说明了通用启动器类akka.Main,只接收一个命令行参数:应用的主actor类名。
1244 0
|
3天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
39 14
|
6天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
36 13
|
7天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
1月前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
109 17

热门文章

最新文章