Akka 简介

Akka简介

一、知识补充

耦合与解耦:

耦合 --》两个或两个以上体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象

? 对于软件工程,对象之间的耦合度是对象之间的依赖度,耦合程度越高,维护成本越高

解耦 --》解除耦合关系

? 模块间有依赖关系必然存在耦合,理论上绝对零耦合做不到。要使数据模型,业务逻辑,视图显示三层之间彼此降低耦合,把关系依赖降低

RPC(Remote Procedure Call)

RPC 用于同一组件中各个不同模块之间的通信(面向过程)

RESTful 用于各组件之间的通信, 或用于组件对外提供调用接口(面向资源)

RMI :Java提供的一种访问远程对象的协议,可以在RPC框架内使用RMI实现数据传输

二、Actor

Akka 基于Actor

Actor很像消息队列,但不需要额外配置和安装消息代理。消息是简单的数据结构,创建后不可更改。

Actor每次接受一条消息,并执行某些行为;Actor不像队列,可以(向其他Actor)发送消息。

Actor异步执行。

三、并行编程模型

四、以聊天软件为例,构建Akka框架

Actor 异步创建、发送、改变和监督。

1、发送

Actor只能与其他Actor通过发送消息进行交互。Actor不允许访问他的内部状态,Actor不能共享互斥状态。

发送消息通常是异步的,也称为即发即弃风格。如果要知道另一个Actor是否收到消息,那么接受消息的Actor会发送某种类型的响应消息。

异步消息可以帮助应用中各组件解耦,消息不可改变,这意味着一旦创建不可更改。Actor可以接收任何消息,并且可以向Actor发送任何消息。

在发送和接受消息的Actor之间,消息发送是有顺序的。一个Actor一次只能接受一条消息。消息的顺序只能由发送Actor来保证。如果多个用户同时修改会话中的同一条消息,则最终结果与消息随时间交织而变化。

2、创建

Actor可以创建其他Actor。

3.改变

状态机是保证系统在特定状态时执行特定功能的有力工具。

Actor每次接受一条消息,这种性质适合实现状态机。一个Actor可以通过交换他的行为来改变它处理传入的消息的方式。

4、监督

任何Actor都可以作为监督器,但只能管理自己创建的Actor。

备注:

Actor在三个维度上进行解耦

  • 空间 -- Actor无法保证,也不期望知道另一个Actor在哪里。
  • 时间 -- Actor不能保证,也无法预期它的工作何时完成。
  • 接口 -- Actor没有定义的接口,Actor不需要知道其他组件理解什么样的信息。

五、了解Akka Actor

ActorSystem

任何Akka应用第一件事就是创建ActorSystem。ActorSystem能够创建顶层Actor,一般情况下只创建一个顶层Actor。ActorSystem是支持这些功能的纽带,如调度功能,它可以周期地向Actor发送消息。

ActorSystem返回创建的顶层Actor地址,而不是Actor本身。这个地址成为ActorRef,ActorRef可用于向Actor发送消息。

ActorPath对应Actor位置,每个Actor有一个名字,这个名字在每个层次上应该是唯一的,不能有两个同名的兄弟Actor。(如果没有给Actor命名,则Akka会产生一个,不推荐!)所有Actor引用存放在ActorPath中,相对/绝对都可以。

ActorRef 与 邮箱

消息被发送到Actor的ActorRef。每个Actor有一个邮箱。ActorRef消息暂存在邮箱中,以备后续处理,按到达的顺序一次处理一个。

分发器

分发器将消息推送给Actor,分发器类型决定了使用哪种线程模型推送消息。当向某个Actor发送一条消息时,实际上所做的只是把这条消息放到邮箱的最后,最终分发器将把它推送给Actor。这个Actor又可以把一条消息放到下一个Actor邮箱的最后,并在某个>时间点进行推送。

原文地址:https://www.cnblogs.com/ganshuoos/p/11864861.html

时间: 2024-10-24 22:53:31

Akka 简介的相关文章

SPARK如何使用AKKA实现进程、节点通信

SPARK如何使用AKKA实现进程.节点通信 <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析>一书第一章的内容请看链接<第1章 环境准备> <深入理解Spark:核心思想与源码分析>一书第二章的内容请看链接<第2章 SPARK设计理念与基本架构> <深入理解Spark:核心思想与源码分析>一书第三章第一部分

分布式应用框架Akka快速入门

本文结合网上一些资料,对他们进行整理,摘选和翻译而成,对Akka进行简要的说明.引用资料在最后列出. 1.什么是Akka Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. 官方网站 (http://akka.io/)的介绍是: Akka is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant ev

Scala-Unit7-Scala并发编程模型AKKA

一.Akka简介 Akka时spark的底层通信框架,Hadoop的底层通信框架时rpc. 并发的程序编写很难,但是Akka解决了spark的这个问题. Akka构建在JVM平台上,是一种高并发.分布式.并且容错的应用工具包: Akka使用Scala语言编写,同时它提供了Scala和Java的开发接口,Akka可以开发一些高并发的程序. 二.Akka的Acor模型 A卡卡处理并发的方法基于actor模型,在基于actor的系统中,所有事物都是actor(类似于Java的万物皆对象): actor

Scala 学习 (七) 并发编程模型Akka

一,Akka简介 二,Akka中的Actor模型 三,Akka实战案例之HelloActor 四,Akka实战案例之PingPong 五,案例基于 Actor 的聊天模型 正文 一,Akka简介 写并发程序很难.程序员不得不处理线程.锁和竞态条件等等,这个过程很容易出错,而且会导致程序代码难以阅读.测试和维护.Akka 是 JVM 平台上构建高并发.分布式和容错应用的工具包和运行时.Akka 用 Scala 语言写成,同时提供了 Scala 和 JAVA 的开发接口 二,Akka中的Actor模

初见akka-01

最近在学习akka,在看rpc相关的东西,有点脑子疼,哈哈 1.需求: 目前大多数分布式架构底层通信是通过RPC实现的,RPC框架非常多, 比如我们学过的Hadoop项目的RPC通信框架,但是Hadoop在设计之初就 是为了运行长达数小时的批量而设计的,在某些极端的情况下, 任务提交的延迟很高,所有Hadoop的RPC显得有些笨重. 2.特点 Spark 的RPC是通过Akka类库实现的,Akka用Scala语言开发, 基于Actor并发模型实现, Akka具有高可靠.高性能.可扩展等特点,使用

Scala编程实战

2018-12-11 08:01:32 1. 课程目标 1.1. 目标:熟练使用Scala编写程序 2. 项目概述 2.1. 需求 目前大多数的分布式架构底层通信都是通过RPC实现的,RPC框架非常多,比如前我们学过的Hadoop项目的RPC通信框架,但是Hadoop在设计之初就是为了运行长达数小时的批量分析而设计的,在某些极端的情况下,任务提交的延迟很高,所以Hadoop的RPC显得有些笨重. Spark 的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实

03.Scala编程实战

Scala编程实战 1.    课程目标 1.1.  目标:使用Akka实现一个简易版的spark通信框架 2.    项目概述 2.1.   需求 Hivesql----------> select count(*) from user----->整个表只有1条数据 Map 0%     reduce 0% Map 10%    reduce 0% Map 20%    reduce 0% 目前大多数的分布式架构底层通信都是通过RPC实现的,RPC框架非常多,比如前我们学过的Hadoop项目

akka入门-简介

为什么使用akka akka是Actor模型的实现.Actors为我们提供了以下优点: 1)对并发/并行程序的简单的.高级别的抽象. 2)异步.非阻塞.高性能的事件驱动编程模型. 3)非常轻量的事件驱动处理. akka提供了容错性 使用"let-it-crash"语义和监管者树形结构来实现容错.非常适合编写永不停机.自愈合的高容错系统.监管者树形结构可以跨多个JVM来提供真正的高容错系统. 位置透明性 Akka的所有元素都为分布式环境而设计:所有actor都仅通过发送消息进行互操作,所

Akka(17): Stream:数据流基础组件-Source,Flow,Sink简介

在大数据程序流行的今天,许多程序都面临着共同的难题:程序输入数据趋于无限大,抵达时间又不确定.一般的解决方法是采用回调函数(callback-function)来实现的,但这样的解决方案很容易造成“回调地狱(callback hell)”,即所谓的“goto-hell”:程序控制跳来跳去很难跟踪,特别是一些变量如果在回调函数中更改后产生不可预料的结果.数据流(stream)是一种解决问题的有效编程方式.Stream是一个抽象概念,能把程序数据输入过程和其它细节隐蔽起来,通过申明方式把数据处理过程