Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

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

作者头像
小小工匠
发布于 2023-09-17 01:00:50
发布于 2023-09-17 01:00:50
1.8K0
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

Akka概述

Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。

以下是 Akka 框架的关键概念和特点:

  1. Actor 模型:Akka 的核心构建块是 Actor,它是一种轻量级并发原语。Actor 之间通过消息通信进行互动,每个 Actor 都有自己的状态和行为,它们之间是相互隔离的,这有助于构建高度可伸缩的系统。
  2. 并发性和并行性:Akka 允许开发人员轻松编写并发和并行代码,而不必担心底层线程管理。它处理所有与多线程编程相关的复杂性,并提供了抽象,以便开发人员可以专注于业务逻辑。
  3. 分布式系统:Akka 提供了构建分布式系统的支持。您可以将 Actor 部署在不同的节点上,这些节点可以是物理机器或虚拟机。Akka 提供了透明的消息传递,使得在分布式环境中发送消息就像在本地一样简单。
  4. 容错性:Akka 强调容错性,允许开发人员构建可靠的系统。它提供了监督策略,允许在 Actor 发生故障时采取自定义的恢复操作。这有助于系统在故障时继续运行,提高了系统的可用性。
  5. 事件驱动:Akka 是基于事件驱动的,它的响应式编程模型适合处理异步事件。它允许开发人员构建反应迅速的系统,适用于大量的并发事件和消息。
  6. 扩展性:Akka 具有良好的可伸缩性,可以根据需求轻松扩展系统。您可以添加更多的节点或 Actor 来处理更多的负载。
  7. 插件和扩展:Akka 提供了丰富的插件和扩展机制,可以轻松集成其他库和框架,如 Akka HTTP、Akka Streams 等,以构建全栈应用程序。

为了保持回弹性,Akka采用了“让它崩溃(Let it crash)”模型,该模型已在电信行业成功用于构建具有自我修复功能的应用程序和系统。Actor模型还提供对透明分发的抽象,以及真正可伸缩和容错的应用程序的基础。

下面看下Akka的特性:

  • 可以更简单地构建并发和分布式系统 Akka基于Actor模型和Streams,让我们可以构建可伸缩的,并且可以高效使用服务器资源,使用多个服务器进行扩展的系统。
  • 回弹性设计 遵守“反应式宣言”的原则,Akka让我们编写出可以在出现故障时能够自我修复,并保持响应能力的系统。
  • 高性能 在单台计算机上可以处理高达每秒5000万条消息。内存占用少;每GB堆可以创建约250万个actor(参与者)。
  • 弹性和分散性 分布式系统没有单点故障,具有跨节点的负载平衡和自适应路由。具有群集分片的事件源和CQRS(Command Query Responsibility Segregation,读写责任分离)。使用CRDT(Conflict-free Replicated Data Types,无冲突的复制数据类型)实现最终一致性的分布式数据。
  • 反应流数据 具有回压的异步非阻塞流处理。完全异步和基于流的HTTP服务器和客户端为构建微服务提供了一个很好的平台。

传统编程模型存在的问题

对封装特性的挑战

  • 面向对象编程中的封装要求数据只能通过对象提供的方法间接访问,但多线程下多个线程同时修改对象内部数据会导致线程安全问题。
  • 解决线程安全问题的方式是使用锁,但锁的使用会影响性能、可能导致死锁,并且难以扩展到分布式系统中。

对共享内存在现代计算机架构上的误解

  • 在多核CPU架构中,多线程之间不再有真正的共享内存,而是通过Cache行传递数据,使得共享变量的内存可见性成为问题。
  • 使用volatile关键字或原子性数据结构可以解决共享变量的内存可见性问题,但会损害性能,需要谨慎选择需要修饰的变量。

对调用堆栈的误解

  • 传统的调用堆栈模型不适用于并发编程,因为异步任务无法通过调用堆栈传递异常或通知主线程。
  • 异步任务执行失败时,任务状态可能丢失,需要引入新的错误信令机制以及从故障中恢复的方法。

这些问题突出了Actor模型的优势,因为它提供了一种更适应并发编程的方式,通过消息传递来解决上述挑战,而不是依赖于共享内存和传统的调用堆栈。 Actor模型在处理并发和分布式系统中已经得到验证。


Actor模型解决了传统编程模型的问题

Actor模型

  • Actor模型用于处理并发计算,每个Actor代表一个基本的计算单元,可以接收消息并基于消息进行计算处理。
  • Actor之间相互隔离,不共享内存,每个Actor拥有自己的私有状态变量。
  • 每个Actor有自己的地址,通过地址相互发送消息来通信,消息是异步传递的。
  • Actor模型允许构建分布式系统,不限于单个JVM内。

【Actor系统图】

使用消息传递避免锁和阻塞

  • Actor之间通信通过消息传递而不是方法调用,不会导致发送消息的调用线程被阻塞。
  • Actor保持了封装性,因为消息的处理是串行的,不需要使用锁来同步多线程访问。
  • Actor的状态是本地的,不共享,通过消息传递数据,符合现代系统中内存工作方式。
  • Actor可以高效地处理大量消息,充分利用多核CPU的潜力。

使用Actor优雅地处理错误

  • Actor模型中不存在共享调用堆栈,因此错误处理方式不同。
  • 目标Actor可以回复错误消息,提示发生错误情况,错误作为普通消息处理。
  • Actor模型中采用树状层次结构的监督机制,父Actor可以对子Actor的故障进行监控和处理。
  • 监督程序可以决定是否重新启动子Actor或停止子Actor,确保系统的可恢复性和健壮性。

小结

总的来说,Akka 是一个强大的框架,适用于构建高度并发、分布式、可伸缩和容错性强的应用程序。它在金融、社交媒体、在线游戏等领域得到广泛应用,是构建响应式系统的有力工具。如果您需要构建这类应用程序,了解和使用 Akka 可能会非常有帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Akka事件驱动新选择
在高并发场景解决方案中,多从线程角度出发,以解决线程安全问题,锁范围又需要多业务场景考虑,何时上锁,何时解锁,何时自动过期等,而事件驱动是从执行什么操作驱动的,在软件系统的设计层面,两者关联性不大,一个强调安全,一个强调策略,那么有没有两者结合解决并发编程难的事件驱动解决方案呢?带着场景解决方案我们走进Akka。
疯狂的KK
2023/03/07
1.1K0
Akka事件驱动新选择
【算法与数据结构】--算法和数据结构的进阶主题--并行算法和分布式数据结构
并行计算是一种计算方法,旨在通过同时执行多个计算任务来提高计算性能和效率。与传统的串行计算不同,其中每个任务按顺序执行,并行计算允许多个任务同时执行。这种并行性通常通过将计算任务分解为较小的子任务,然后在多个处理单元上同时执行这些子任务来实现。
喵叔
2023/11/04
3590
Actor 并发控制模型使我想到了王者荣耀对战伤害控制实现
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/01/29
5351
Actor 并发控制模型使我想到了王者荣耀对战伤害控制实现
Akka 指南 之「为什么现代系统需要新的编程模型?」
几十年前,卡尔·休伊特(Carl Hewitt)提出了 Actor 模型,将其作为在高性能网络中处理并行任务的一种方法——当时还没有这种环境。如今,硬件和基础设施能力已经赶上并超过了休伊特的设想。因此,构建高需求(demanding requirements)的分布式系统会遇到传统面向对象编程(OOP)模型无法完全解决的挑战,但这可以从 Actor 模型中获益。
CG国斌
2019/05/26
8930
Java一分钟之-Akka:反应式编程框架
在当今高度并发和分布式系统的世界里,Akka作为一个开源的反应式编程框架,凭借其强大的并发处理能力和消息驱动模型,成为了Java开发者手中的利器。本文将带你快速入门Akka,探讨其核心概念、常见问题、易错点及如何避免,同时辅以代码示例,让你一分钟内领略Akka的魅力。
Jimaks
2024/06/12
1.7K0
Actor 分布式并行计算模型: The Actor Model for Concurrent Computation
The Actor Model for Concurrent Computation
一个会写诗的程序员
2021/12/20
2.2K0
Actor 分布式并行计算模型: The Actor Model for Concurrent Computation
Orleans - 1 .NET生态构建分布式系统的利器
在当今数字化时代,构建高效、可靠的分布式系统是许多企业和开发团队面临的挑战。微软的 Orleans 框架为解决这些挑战提供了一个强大而简单的解决方案。本文将介绍 Orleans 的核心概念,并通过一个简单的示例代码来演示其用法。
Chester Chen
2024/03/25
3170
Orleans - 1 .NET生态构建分布式系统的利器
Akka 指南 之「Actor 模型如何满足现代分布式系统的需求?」
如前一主题「为什么现代系统需要新的编程模型」所述,常见的编程实践不能合适地满足现代系统的需求。幸运的是,我们不需要放弃我们所知道的一切。相反,Actor 模型以一种原则性的方式解决了这些缺点,允许系统以更好地匹配我们的构思模型(mental model)的方式运行。Actor 模型抽象允许你从通信的角度来考虑你的代码,这与大型组织中人员之间发生的交换没有什么不同。
CG国斌
2019/05/26
1.3K0
Akka 指南 之「Akka 简介」
欢迎来到 Akka,它是一组用于设计跨越处理器和网络的可扩展、弹性系统的开源库。Akka 允许你专注于满足业务需求,而不是编写初级代码来提供可靠的行为、容错性和高性能。
CG国斌
2019/05/29
6480
传统开发被淘汰?Akka.NET 带你进入真正的响应式时代
在今天这个软件需要具备响应性(Responsive)、弹性(Resilient)、可扩展性(Elastic)和消息驱动(Message-driven)的时代,传统的单体架构和线程模型经常在高负载或复杂性下崩溃。
郑子铭
2025/06/09
1100
传统开发被淘汰?Akka.NET 带你进入真正的响应式时代
线程框架模型总结
1. Disruptor:Apache Storm底层应用了Disruptor来实现worker内部的线程通信;
章鱼carl
2022/03/31
8670
线程框架模型总结
分布式系统编程已停滞?!
随着 DeepSeek 等大模型的快速发展,人们开始意识到我们可能正处于新计算时代的开端。通用 x86 CPU 在数据中心的主导地位正加速衰退,分布式 GPU 集群和专用加速器正在崛起,这一转变速度甚至超出了许多人的预期。
深度学习与Python
2025/03/04
960
分布式系统编程已停滞?!
论软件开发中的并行与并发
并发与并行是计算机科学中处理多任务执行的核心概念。并发关注任务的协调与交错执行,而并行则强调任务的真正同时执行,以提升计算效率。尽管这两个术语常被混用,但它们代表了不同的任务执行方式。
AI.NET 极客圈
2025/04/06
1640
论软件开发中的并行与并发
.NET分布式框架 | Orleans 知多少
公司物联网项目集成Orleans以支持高并发的分布式业务,对于Orleans也是第一次接触,本文就分享下个人对Orleans的理解。
AI.NET 极客圈
2019/07/30
7050
.NET分布式框架 | Orleans 知多少
分布式架构知识体系
节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔断,幂等,分库分表,分片分区,自动运维,容错处理,全栈监控,故障恢复,性能调优
Java团长
2019/04/25
7890
分布式架构知识体系
聊聊Akka
当前社会,人们越来越享受互联网带来的种种便利,同时也对互联网产品有了更高的要求,比如更快的响应速度和更稳定的服务;另一方面,互联网产品在不断发展的过程中也面临着非常多的技术挑战,比如服务化、分布式、并行计算等,那么,Akka在其中的哪些领域可以一展身手呢?
猿天地
2018/07/25
2.3K0
聊聊Akka
并发模型比较
Golang 的特色之一就是 goroutine ,使得程序员进行并发编程更加方便,适合用来进行服务器编程。作为后端开发工程师,有必要了解并发编程面临的场景和常见的解决方案。一般情况下,是怎样做高并发的编程呢?有那些经典的模型呢?
Java知音
2018/09/21
2.1K0
并发模型比较
Akka事件驱动新选择入门
官网:https://guobinhit.github.io/akka-guide/
疯狂的KK
2023/04/09
5730
Akka(0):聊聊对Akka的初步了解和想法
本文主要探讨了如何利用Akka实现分布式计算,通过介绍Akka的Actor模型、消息驱动、松耦合和弹性伸缩等特性,以及Actor的代码结构、运行时状态、多播、监控和调试等方面的内容,帮助读者了解如何使用Akka进行分布式编程。同时,本文还介绍了Akka的一些高级特性,如持久化Actor、路由Actor等,并探讨了如何利用这些特性实现基于Akka的Microservice工具库。
用户1150956
2018/01/05
1.1K0
Akka 介绍
欢迎使用 Akka,Akka 是一套被用来在在多处理器核心和网络之间被设计可扩展和具有相关弹性的开源工具集。Akka 允许你更加关注商业需求而不是书写低级别的代码来提供可靠性,容错率和高性能。
HoneyMoose
2019/07/23
5460
相关推荐
Akka事件驱动新选择
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档