Akka官方文档2.5.17(五)——位置透明性

本文深入探讨Akka框架下的分布式处理与路由机制,详细解析透明远程处理、P2P与C-S通信模式,以及如何通过配置驱动实现远程部署与纵向扩展。了解如何在分布式环境中保持位置透明性,以及在特定场景下透明性可能被打破的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

默认分布式

透明性被打破的方式

怎样使用路由

P2P vs C-S

采用路由纵向扩展


前面章节描述了怎样使用Actor路径使得位置透明性成为可能。这个特殊的功能值得一些额外的解释,因为相关的术语“透明远程处理”在编程语言、平台和技术的上下文中差异巨大。

默认分布式

Akka里的所有东西都被设计为可以在分布式环境中工作:Actors之间的所有交互都使用纯粹的消息传递,而且一切都以异步方式完成。这样做旨在确保所有的功能在单个JVM或者数百台的集群机器上都可用。The key for enabling this is to go from remote to local by way of optimization instead of trying to go from local to remote by way of generalization. See this classic paper for a detailed discussion on why the second approach is bound to fail.

透明性被打破的方式

在某些情况Akka不一定适用于使用它的应用程序,因为设计为分布式的执行对可能做的事情提出了一些限制。最明显的一点是,所有通过线路传递的消息必须是序列化的。虽然不太明显,这也包括在远程节点创建Actor时使用的Actor工厂方法(Props)。

另一个结果是,应该意识到一切操作都是完全异步执行的。这在计算机网络中意味着消息可能需要几分钟才能到达目的地(取决于配置)。同样表明消息丢失的概率远远高于一个JVM内的消息传递(接近于0,但不完全保证)。

怎样使用路由

我们把透明性的想法做到了极致,从而使得Akka的远程处理几乎没有API:完全采用配置驱动。只需根据前面章节中概述的原则编写应用程序,然后在配置文件中指定Actor的远程部署方式。这样,你的应用程序可以横向扩展而不需要修改代码。API中唯一允许对远程部署通过编程影响的地方是Props中的一个字段,该字段可以设置一个特定的Deploy实例;这与将相同的部署放入配置文件中具有同样的效果(配置文件的优先级高于编程方式,会覆盖编程的deploy实例)。

P2P vs C-S

Akka remoting是以P2P方式连接Actor系统的通信模块,而且是Akka Clustering的基础。remoting的设计由两个相关的设计决策驱动:

  1. 系统之间的通信是对等的:如果系统A能够连接到系统B,那么系统B一定能够独立的连接到系统A
  2. 不管连接的方式如何,通信系统的角色是对称的:没有系统只接受连接,并且没有系统只启动连接

这一系列决策的结果是无法安全的创建具有预定义角色的C-S的设置(违反决策2)。对于C-S方式,最好使用HTTP或者Akka I/O。

重要提示:使用NAT(网络地址转换)、负载均衡、或者Docker容器违反了决策1,除非在网络配置中采取其他步骤以允许所涉及系统之间的对称通信。在这种情况下,可以配置Akka绑定到用于在Akka节点之间建立连接的网络地址外的不同网络地址。参见Akka在NAT和Docker容器中的使用

采用路由纵向扩展

除了能够在集群的不同节点上运行Actor系统的不同部分之外,还可以通过支持并行化来进行纵向扩展(例如,搜索引擎并行处理不同的查询),然后可以以不同的方式路由,如round-robin。实现这一点的唯一必要条件是开发人员需要将某个Actor混入“Router”,这将创建一个路由Actor,它将根据配置创建所需类型的子节点并路由到它们。然后一个路由Actor将会被创建,该路由Actor将生成可配置数量的所需类型的子节点,并以配置的方式路由到它们。一旦声明了这样的路由,就可以在配置文件中自由覆盖其配置,包括将其与(某些)远程部署的子节点混合。 参见routing

内容简介 本书将尝试帮助入门级、中级以及高级读者理解基本的分布式计算概念,并且展示 如何使用 Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。本书将介绍各种概念,帮助读者理解 网络上各系统进行交互的困难之处,并介绍如何使用 Akka 提供的解决方案来解决这些 问题。 作者简介 Jason Goodwin 是一个基本上通过自学成才的开发者。他颇具企业家精神,在学校 学习商学。不过他从 15 岁起就开始学习编程,并且一直对技术保持着浓厚的兴趣。这对 他的职业生涯产生了重要的影响,从商学转向了软件开发。现在他主要从事大规模分布 式系统的开发。在业余时间,他喜欢自己原创电子音乐。 他在 mDialog 公司第一次接触到 Akka 项目。mDialog 是一家使用 Scala/Akka 的公司, 为主流出版商提供视频广告插入软件。这家公司最终被 Google 收购。他同时还是一名很 有影响力的“技术控”,将 Akka 引入加拿大一家主要的电信公司,帮助该公司为客户提 供容错性更高、响应更及时的软件。除此之 外,他还为该公司中的一些团队教授 Akka、 函数式以及并发编程等知识。 目录 第 1 章 初识 Actor:Akka 工具集以及 Actor 模型的介绍。 第 2 章 Actor 与并发:响应式编程。Actor 与 Future 的使用。 第 3 章 传递消息:消息传递模式。 第 4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。 第 5 章 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞 I/O 的处理以 及 API。 第 6 章 横向扩展—集群化:集群、CAP 理论以及 Akka Cluster。 第 7 章 处理邮箱问题:加大邮箱负载、不同邮箱的选择、熔断机制。 第 8 章 测试与设计:行为说明、领域驱动设计以及 Akka Testkit。 第 9 章 尾声:其他 Akka 特性。下一步需要学习的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值