初识Akka

架构解密从分布式到微服务:聊聊分布式计算,初识Akka 初识 Akka 虽然Akka基于Scala而非Java语言编写而成,但由于Scala最终还是被编译为Java字节码并运行在JVM之上,所以我们可以认为Akka属于Java领域。 Akka官方对Akka的介绍如下。 ●是对并发、并行程序的简单的高级别的抽象。 ●是异步、 非阻塞、高性能的事件驱动编程模型。 ●是非常 轻量的事件驱动处理机制(1GB内存可容纳约270万个Actor)。 通过以前文章对μJavaActors的讲解,我们知道,一 一个实际的Actor 系统是由许多个Actor实例组成的-一个复杂的树 阅读详情

       单机系统,我们使用JAVA API中的Executor、Fork/Join(分而治之)等,就能很好的解决的多线程并发问题,但在分布式集群项目中,它们或许并没有那么完美。

     背景

       当今社会,人们在享受互联网带来便利的同时,对产品的要求越来越高,响应快、稳定性好。为了达到用户的要求,产品开发或维护阶段,服务化、分布式、并行计算成为开发人员面临的难题。

       产品研发期间,用户量小、业务单一,架构师为了产品能够快速迭代,大多采用集中式架构进行开发,项目也能保证质量。但是随着业务的增长,用户逐渐增多,功能不断扩展,这时集中式架构带来的许多问题接踵而至。遇到这种问题,最好的办法或许是系统重构,但考虑到成本太高,时间紧迫,大家基本上都会选择系统拆分。

       关于系统拆分,我们通常会按照业务逻辑进行拆分,相同的业务拆分成单独的子系统,尽量保证单一原则,以此来解决代码维护和高并发的问题。

       系统拆分之后,我们就需要考虑到各个子系统通信的问题了,通常情况下,我们都是使用基于HTTP的RPC实现通信。但在复杂的项目中,面临异步任务、容错、分布式消息处理、并行计算等问题,就显得有点不足。这时,如果有一个使用简单并能够解决上述问题的框架,就会得到大家的拥抱,Akka因此而生。

       上述说了这么多废话,大家看着也累,现在我们就直奔主题,初识Akka。

     Akka简介

        Akka是在java虚拟机JVM平台上,使用Scala语言编写的一款高性能、高容错性的分布式和并行应用框架。Akka提供了基于JAVA和Scala两种API,大家可以很方便的使用。既然Akka就是为解决上述问题所生,那么它有哪些特点呢?

特点

描述

并行与并发

提供对并行与并发的高度概括

异步非阻塞

采用消息传递(异步非阻塞)进行通信

高容错性

为跨多JVM的分布式模型提供强劲的容错处理,号称永不宕机

持久化

消息以及状态可以被持久化,便于在JVM崩溃后进行恢复

轻量级

核心Actor大约只占300bytes,节约内存

       Akka处理并发问题,核心是Actor并发模型,Actor之间采用消息传递进行通信,是Akka最基本的执行单元。那么什么是Actor并发模型呢?

     Actor并发模型

       Actor模型,最小执行单元就是Actor实例。每一个实例都有自己的状态和行为,系统可以存在成千上万个Actor实例,它们通过消息传递进行通信。每个Actor能发送消息,也能接受消息。当我们要执行某个任务的时候,并不是调用某个Actor实例的接口或者是方法,而是通过发送消息。Actor的消息传递是异步的,也就是说,当一个任务被通知的时候,不用等到执行任务的Actor完成所有过程,就可以继续执行下一步,这种异步通信大大提高了程序的响应速度以及性能。另外,Actor从底层屏蔽掉了线程和锁机制的管理,让开发者可以更加的关注业务,提高开发效率。

       在Akka中,每个Actor都有自己的监管对象,也就是它的创建者,它们会负责子Actor的失败处理。另外,某些Actor也需要对生命周期进行监控,以便在不同时期做出正确的响应。监督和监控者也是一个Actor。Actor的创建不能通过"new"的方式,而是需要使用actorOf()或者actor-Selection的方式返回一个ActorRef对象,该对象可能存在本地,也可能存在远程。

       在一个项目中,所有的Actor共同组成了Actor系统,即ActorSystem结构。该结构是有层级的,我们必须按照该层次结构进行Actor管理。通常来讲,我们创建的Actor都应该有一个父级Actor,当然最顶层的Actor除外,它负责对子Actor的异常情况进行处理,例如:恢复子级、重启子级、停止子级、扩大化失败。关于这些异常的处理,后续我们会详细讲解。

       在Actor系统中,到底是怎样的一个层级关系呢?画一张图简单描述一下:

        从中我们可以看出Actor系统中,存在三类顶级的Actor,也就是Root、user、system。系统默认就会启动这三个顶级的Actor,我们创建的Actor只属于其中的一个分支—user。root是最顶层的Actor,所有的Actor都属于它,user、system是它的一个子分支,当我们使用ActorSystem.actorOf()创建Actor时,都属于user分支下,也是我们创建的最高级别Actor,通过ActorContext.actorOf()创建的Actor都是其子级。

        关于Actor并发模型,我们就先描述到这里,后续我们会更加完善的讲Actor的特点以及用法。

      Akka组件

        Akka除了核心使用Actor并发模型之外,还提供了许多其它丰富的组件,例如:邮箱、路由、持久化、网络(远程、集群)等,对分布式和并发进行了高度、统一的抽象,使我们能够轻松的实现一个完整的分布式应用。

        关于这几个组件,做一个简单的汇总:

组件

描述

邮箱

每个Actor都有自己的邮箱,其它Actor发送过来的消息都会进入该邮箱。Akka自带多种邮箱类型,也提供自定义邮箱接口

路由

消息可以通过Actor发送,也可以通过路由发送。可以选择不同的路由策略,比如轮询、广播等,路由也是一个Actor

状态持久化

Akka提供了Actor状态的持久化,便于我们在必要时恢复数据

网络(远程和分布式集群)

实现远程Actor和分布式集群的基础,包含I/O、TCP/UDP、序列号配置、节点管理、集群分片等

HTTP模块

支持HTTP服务端和客户端开发,快速构建高性能的Rest Web服务

     应用场景

       Akka提供这些组件,使得在rest web 、websocket服务、分布式消息处理、日志异步处理、密集数据计算等方向具有很强的能力。对大部分研发团队来说,从零搭建一个高并发的分布式架构,或许会面临诸多挑战,选择Akka,可以帮助你快速搭建。

       看到这里,相信大家对Akka有了一个大致的了解,关于如何使用Akka,Actor是如何工作的,下一节,我们再来详谈。

       以上内容是我在阅读<<Akka实战>>时,关于Akka的基本内容做的一个总结,如果有不对的地方,望大家批评指正,谢谢。

Actor简介(一)        在开发初期,业务单一、系统简单,一台机器或许就能支撑,这个时候,单机上的任务大多直接调用API的方式就能完成。然而当业务需求日益增多,功能逐渐复杂化,我们就需要考虑把项目拆分成分布式环境,这时,多系统通信就需要通过网络实现。JDK内置的并发包在单机上游刃有余,在分布式环境中,就不是那么完美了。Akka通过Actor很好的解决了远程通信问题。      Actor初识       ... 阅读详情

相关推荐

【项目实战】分布式计算和通信框架(AKKA)一个用于构建高并发、分布式、可容错、事件驱动的应用程序的工具包和运行时。

Actor模型是一种并发编程模型,它将计算机系统中的并发实体抽象为Actor,每个Actor都是一个独立的计算单元,它们之间通过消息传递进行通信。Actor之间的通信是异步的,无需共享内存,因此可以避免共享内存带来的并发问题。Actor模型可以轻松地编写出高并发、分布式、可容错的应用程序,因此被广泛应用于分布式系统和并发编程领域。

奶爸的编程之路,也就一周冷个三天 5711

Akka框架

1. 重要概念 2. Actor模型 3. Akka架构简介 多核处理器的出现使并发编程(Concurrent Programming)成为开发人员必备的一项技能,许多现代编程语言都致力于解决并发编程问题。并发编程虽然能够提高程序的性能,但传统并发编程的共享内存通信机制对开发人员的编程技能要求很高,需要开发人员通过自身的专业编程技能去避免死锁、互斥等待及竞争条件(Race Condition)等,熟悉Java语言并发编程的读者们对这些问题的理解会比较深刻,这些问题使得并发编程比顺序编程要困难得多。 Sca

hellozhxy的博客 5017

【akka】初识Akka 简单介绍

Akka是一个用来开发支持并发、容错、扩展性的应用程序框架,基于actor模式的实现。在actor模型的上下文中,所有的活动实体都被认为是互不依赖的actor,actor之间的互相通信是通过彼此之间发送异步消息来实现的。每个actor都有一个邮箱(Mailbox)来存储接收到的消息,因此每个actor都维护着自己独立的状态。

九师兄 1153

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。Actor 模型:Akka 的核心构建块是 Actor,它是一种轻量级并发原语。Actor 之间通过消息通信进行互动,每个 Actor 都有自己的状态和行为,它们之间是相互隔离的,这有助于构建高度可伸缩的系统。并发性和并行性。

小工匠 1万+

Akka:Scala与Java的高性能并发框架

本文还有配套的精品资源,点击获取 简介:Akka是一个高性能、容错的并行计算框架,使用Scala编写,通过Actor模型实现分布式计算。其核心概念包括轻量级线程Actor,通过消息传递实现并发,监督和监控机制提供强大的容错能力,Cluster支持真正的分布式计算,而持久化特性确保了数据在系统崩溃后的可恢复性。Akka Streams提供声明式数据流处理,配合Play Fra...

weixin_42515842的博客 2722

2、TCGA数据处理(差异分析前处理)

注意:1、是R语言中用于读取文本文件并创建数据框的函数。它可以从文本文件中读取数据并将其存储为数据框的形式,每一列代表一个变量,每一行代表一个观察值。2、括号要成对,不能少了;3、file = 'TCGA-LIHC.htseq_counts.tsv'引号可以是单或双引号,建议单;4、逗号主要中英文,都是用英文模式才没错;5、.tsv文件类型必须要有,不能删除,否则读不进来;6、上面代码将TCGA-LIHC.htseq_counts.tsv文件读入并赋值给count1。

PLW_12的博客 2668

高性能并发模型AKKA架构原理详解

Actor 模型是一种消息驱动的并发模型。唯一地址(ActorRef)私有状态收到消息时的行为Actor 之间通过异步消息传递,无需共享内存,天然避免了线程安全问题。Akka 通过 Actor 模型实现了高效的并发和分布式系统开发,核心架构由 ActorSystem、Actor、Mailbox、Dispatcher 等组成。它通过消息驱动、监督策略、分布式能力,为现代高并发应用提供了强大支撑。

onlymscn的博客 1122

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2389

初识Akka之Router

背景介绍          简单来说Akka是一个用于构建服务端分布式应用的框架,其具有高并发、可扩展、容错性等特点。Akka中的基本单位是Actor,Actor可以与线程来作为类比,有自己的标识符、存储空间、调度策略、生命周期等。每个Actor相互之间的交互都是通过消息(可以是字符串、二进制数据、自定义对象等)来实现的,这样就避免了每个Actor的耦合。更重要的是生成一个Actor只占用40多

igoqhb的专栏 4833

Intel RealSense D435深度相机实战:从数据采集到点云生成的完整避坑指南

本文详细介绍了Intel RealSense D435深度相机的实战应用,从数据采集到点云生成的完整流程,并提供了避坑指南。内容包括环境配置、硬件调优、数据采集技巧、点云生成核心技术及典型场景解决方案,帮助开发者高效利用D435进行机器人导航、三维重建等应用。

weixin_29054195的博客 474

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5718

初识Akka Stream

背景 响应式编程 响应式编程目前在编程领域都算式流行词汇了,作为Scala的创造公司Lightbend 公司(前身是 Typesafe)发起了响应式宣言(Reactive Manifesto)。Akka、Rx系列甚至Spring最新版本的WebFlux都加入到这场流行文化中。 响应式编程用一句话总结可能也无法马上理解,其实它本身也没有新的东西,主要式关注基于事件驱动的快速异步响应,当然为达到目的也...

weixin_34185512的博客 2363

多思计组实验实验三、存储器读写实验

实验三、存储器读写实验

qq_53089329的博客 3653

初识Akka之简介(一)

Akka初识之Actor模型

sinat_38030631的博客 238

2026.11.12:2026.11.12最新的Ubuntu26.04安装docker-ce

本文介绍了在Ubuntu 26.04系统上安装Docker CE的完整步骤。首先需要卸载旧版本的Docker组件,然后通过设置官方仓库进行安装。具体步骤包括:更新系统、安装必要依赖、添加Docker GPG密钥、配置稳定版仓库源、安装Docker Engine及containerd。文章还提供了安装特定版本Docker的方法,并说明了如何将用户加入docker组以获取权限,最后设置Docker开机自启。整个过程详细清晰,适合在Ubuntu系统上部署Docker环境的用户参考。

拥抱具身智能,昇腾Ascend C 522

云原生监控:Prometheus+Grafana监控Nginx实战

在云原生环境中,应用的高可用性和性能优化至关重要。Nginx作为一款广泛使用的高性能Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,对其进行有效的监控能够及时发现潜在问题,保障服务的稳定运行。本文章的目的是详细介绍如何使用Prometheus和Grafana构建一套完整的监控系统来监控Nginx,范围涵盖从环境搭建、数据采集、存储到可视化展示的整个流程。

AI云原生与云计算技术学院 1575

Akka学习指南(Java版)——2.初识事件驱动API

在继续学习更复杂的基于 Actor 的应用程序之前,需要了解一些事件驱动编程模型中的基本抽象概念:Promise和 Future。在前文中,我们已经了解过如何向一个 Actor 发送消息,以及如何在 Actor 内根据接收到的事件进行不同的响应行为。 但是,如果想要通过发送消息向 Actor 请求获取一些输出结果呢?比如说需要从内存键值存储中获取一条记录。 1. 常见阻塞式 IO 案例 几乎每个开发者都很熟悉阻塞式的代码。进行 IO 操作时,编写的都是阻塞式的代码。当我们调用一个同步的 API 时,调用的方

代码时光 594

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

akka入门与实践(读书摘要)

第1章 初识Actor 概述 Actor是一种并发计算的理论模型,akka是Actor模型的一种实现,通常是指一个分布式工具集,用于协调远程计算资源来进行一些工作。 Actor模型的起源 Actor模型来源于1973年发表的名为《A Universal Modular Acotr Formalism For Atrifical Intelligence》论文,该论文提出了并发计算的理论模型...

weixin_38300458的博客 959

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

akka+java+教程,Akka入门与实践 java java教程 Actor模型 响应式架构

章初识Actor11.1本章概述11.2什么是Akka11.2.1Actor模型的起源11.2.2什么是Actor21.2.3Actor和消息传递21.3本书示例系统71.3.1示例1:处理分布式状态71.3.2示例2:完成更多工作81.4配置环境81.4.1选择一门语言91.4.2安装Java——OracleJDK891.4.3确认Java环境配置101.4.4安装Scala101.4.5安装T...

weixin_42515089的博客 447

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Actor初识

Akka -构建与JVM上的 高并发、分布式和可快速恢复的消息驱动应用的工具集 我们相信编写出正确的具有容错性和可扩展性的并发程序太困难了。这多数是因为我们使用了错误的工具和错误的抽象级别。Akka就是为了改变这种状况而生的。通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台(工具)。那什么是 actor模型?(Actor m...

weixin_34023982的博客 309

Scala入门之初识Scala

初识Scala 定义 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸 缩的语言、并集成面向对象编程和函数式编程的各种特性。 -------百度百科 Scala即Scalable Language,Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并...

David_house的博客 335

spray-can的初识

1.根据自已的理解 其实spray-can的主要部分有 IO-HTTP,listener与handle IO-HTTP是我们的system actor后,listener actor前的一个actor,他负责管理TCP,HTTP等的"管理员" the manager actor for the given IO extension   而listener是一个注册在IO Actor的,绑

u013571243的专栏 1090

初识Flink

Apache Flink是一个用于分布式流和批处理数据处理的开源平台。Flink的核心是流数据流引擎,为数据流上的分布式计算提供数据分发,通信和容错。Flink在流引擎之上构建批处理,覆盖本机迭代支持,托管内存和程序优化。 一、Flink 的下载安装启动 设置:下载并启动Flink Flink可在Linux,Mac OS X和Windows上运行。为了能够运行Flink,唯一的要求是安装一个...

小米吃辣椒的博客 1198

初识Scala

文章目录初识Scala什么是ScalaScala的特性面向对象特性函数式编程静态类型并发性基础语法基础语法标识符引用 初识Scala 什么是Scala Scala 是 Scalable Language 的简写,是一门多范式的编程语言 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。 Funnel是把函数式编程思想和Petri网相结合的一种编程语言。 Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Ja

giantleech的博客 160
上一篇: elk(elasticsearch+logstash+kibana)安装入坑
下一篇: centos7常用命令
西红柿丶番茄
博客等级 码龄10年 21粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值