上一章akka学习之actor引用,路径和地址介绍了如何使用actor路径来让actor的位置变得透明。但是一些特殊的特性有必要再额外介绍下,因为在不同的编程语言,平台和技术环境中,远程透明的意思非常也不一样。
默认分布式
在akka中,每件事情的设计目的都是工作在分布式环境中的:所有actor之间的交互都是通过纯粹的消息传递来实现的所有的事件都是异步的。akka所做的工作是确保不管在单机还是几百台机器组成的集群中,所有的方法都能被找到。实现这个功能的关键是通过最优路径的方式从远程到本地,而不是通过一般从本地到远程的方法。
哪种方式会打破透明性
akka的正确性并不依赖于应用需要正确的使用它,因为分布式执行的设计已经对什么是可能的行为做出了限制。最明显的一点是,在网络中传输的消息必须是可串行化的,而一个没有这么明显的例子如果一个actor是在远程节点中创建时,作为actor工厂的闭包也包含在里面(比如props)。
另一个重要的结果是,所有的交互事件都必须是异步的。因为在一个计算机网络中,消息到达接收者可能需要几分钟,而且在网络中消息的丢失率比在同一个jvm中要更高,同一个jvm中的丢失率几乎为0(没有硬性保证)。
如何使用远程
我们说akka是路径透明性的原因是因为akka中几乎没有远程调用层的API:它只是通过配置来驱动。你只需要根据前面章节中列出的提纲来写你的代码,然后再配置文件中指定actor子树的远程部署。通过这种方式,你的应用可以不用改变代码就能扩展出去。而唯一影响远程部署的可编程API接口是Props包含了可指定部署实例的属性,它与通过配置文件指定远程部署等效(如果两种都有,那么配置文件优先)。
点对点网络(p2p) VS 客户端-服务器(C/S)模式
akka远程通信采用的是p2p模式来连接各个actor系统,这也是actor集群的基础。这种p2p的设计思想主要来源于下面两个:
1.actor系统之间的通信是对称的:系统A可以连接到系统B,那么系统B也能独立的连上系统A.
2.根据连接模式,通信系统的角色是对称的:没有哪个系统是只能发起连接的,也没有哪个系统是只能接受连接的。
p2p模式带来的结果是通过预定义系统角色或者使用网络地址转换和负载均衡来创建纯C/S模式是不可能的。对于C/S模式最好使用HTTP和akka I/O。
通过路由来横向扩展标记点
除了在同一系统的不同机器运行不同的部分之外,也可能通过支持创建多个actor子树横向扩展到多核处理,以便支持并发处理,就像一个搜索引擎可以并行的处理多个请求一样。多个actor实例可以通过不同的方式被路由到,比如轮询的方式。为了实现路由的目的,开发者唯一要做的事情是声明一个路由actor,然后,创建出来的路由actor会创建出一定数目(数目可以配置)的目标actor,并且更加配置的路由方式路由到这些目标actor。一旦一个路由actor在配置文件中被声明之后,它的配置可以被任意的override,包括把它与某些子actor的远程部署相混合。
相关推荐
### Akka 学习入门实践知识点详解 #### 一、Akka 概述 - **定义**:Akka 是一个用于构建高度并发、分布式、容错性应用的工具包,适用于 Java 和 Scala 开发者。它基于 Actor 模型,支持响应式编程范式。 - **目标**...
- 位置透明性,这表明actor可以在不改变程序代码的情况下在分布式系统中移动。 - actor的分发器(Dispatchers)负责消息的负载均衡和调度。 - mailbox是存储actor消息的队列。 - actor路由用于在多个actor之间...
Akka.NET是一个强大的工具包,它为.NET开发者提供了一种实现高性能、高可扩展性和容错性的分布式计算的途径。这个框架受到了Scala平台上的Akka的启发,将Actor模型引入了.NET世界。在这个"**c#分布式框架akka范例**...
Akka 的位置透明特性意味着可以在本地或远程 Actor 之间透明地交换消息,而无需关心它们的实际位置。 ##### 2.7 Akka and the Java Memory Model Akka 的设计考虑到了 Java 内存模型的影响,确保了 Actor 的线程...
Akka 支持位置透明性,这意味着可以在不影响代码的情况下将 Actor 部署到不同的机器上。本节介绍了 Akka 如何实现这一特性以及其带来的优势。 ##### 2.7 Akka 与 Java 内存模型 Java 内存模型规定了 Java 线程之间...
Akka 支持位置透明性,这意味着无论 Actor 是否位于同一节点上,都可以以相同的方式与之交互。 ##### 2.7 Akka 与 Java 内存模型 Akka 的设计考虑到了 Java 内存模型的影响,确保了 Actor 在并发环境下的正确行为。...
- **位置透明性**:Akka的一个关键特性是它的位置透明性,这意味着可以在不同的节点之间透明地移动Actor,而不改变其接口。 #### 七、消息传递可靠性 Akka确保了消息传递的可靠性,提供了多种机制来保证消息不会...
位置透明性是指Actor可以在本地或远程节点之间自由通信,而无需关心实际的位置。这极大地简化了分布式系统的开发工作。 **2.7 Akka与Java内存模型** 由于Akka主要面向Scala和Java开发,因此了解这两种语言的内存...
通过这些基础知识的学习,PAAS 平台的开发人员可以更好地理解 AKKA 的工作原理并将其应用于实际项目中,从而提高并发应用的性能和可靠性。接下来的章节将进一步探讨 AKKA 的高级主题,包括 Actor DSL、Typed Actor ...
##### 2.6 位置透明性 - **概念**:无论 Actor 位于本地还是远程节点,都能以相同方式访问。 - **实现**:Akka 自动处理网络通信细节。 ##### 2.7 Akka 与 Java 内存模型 - **内存模型**:定义多线程环境下变量可见...
通过无锁设计,Akka实现了位置透明性,从而提供更好的性能,并且每个服务都能独立失败,进而实现线性扩展。在大数据栈中,Gearpump位于存储层和分析可视化之间,作为一个流处理引擎,与SQL、机器学习、图计算等组件...
**位置透明性**意味着Akka可以无缝地处理本地和远程Actor之间的通信,开发者无需关心Actor是在本地还是远程机器上。 ##### 2.6 Akka与Java内存模型 Akka设计时考虑了与Java内存模型的兼容性,确保Actor内部的状态...
3. **集群(Clustering)**:Akka.Cluster模块支持跨节点的Actor通信,使得分布式系统能够透明地扩展和故障转移。 4. **Stream Processing(Streams)**:Akka.Streams提供了一种声明式的方式来处理数据流,支持...
Akka Cluster 提供了诸如成员管理、故障检测、负载均衡和自动resharding等功能,确保了分布式系统中的可靠性和可用性。 **示例代码** 在 "typesafe-akka-talk" 压缩包中,`typesafe-akka-talk-master` 目录包含了...
4. **Cluster**:Akka集群使得可以在多个节点之间透明地分布actor,提供了节点发现、成员管理、故障检测和负载均衡等功能。这使得构建分布式应用变得更加容易。 5. ** Persistence**:Akka持久化允许actor的状态在...
ZIO的核心是其环境(R)和效应(E)的类型构造,它确保了资源的正确获取、使用和释放,同时保证了错误处理的透明性。 `zio-akka-cluster`库将这两个世界融合在一起,使开发者能够在ZIO的纯函数式环境中使用Akka ...
它提供了网络透明性,Actor可以像在本地运行一样在远程节点上运行,这极大地扩展了系统的可伸缩性。 5. **Akka-Demo项目**:"Log-Server-Akka"是基于Akka框架的示例项目,主要展示了如何利用Akka构建日志服务器。该...
总之,"activator-akka-distributed-workers"模板是学习和实践Akka集群分布式计算的一个宝贵资源。通过使用这个模板,开发者可以迅速掌握Akka的核心特性,并应用到自己的项目中,构建出强大且健壮的分布式系统。
总之,从Akka Classic迁移到Akka Typed是一项值得投资的工作,虽然可能会带来一定的学习曲线,但其带来的类型安全、更好的代码结构以及易于维护的特性,将长期受益于项目的发展。通过逐步的、有计划的迁移,开发者...