首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

分布式系统:Akka 提供了构建分布式系统支持。您可以将 Actor 部署在不同节点,这些节点可以是物理机器或虚拟机。...对共享内存现代计算机架构误解 在多核CPU架构,多线程之间不再有真正共享内存,而是通过Cache行传递数据,使得共享变量内存可见性成为问题。...这些问题突出了Actor模型优势,因为它提供了一种更适应并发编程方式,通过消息传递来解决上述挑战,而不是依赖于共享内存和传统调用堆栈。 Actor模型在处理并发和分布式系统已经得到验证。...Actor之间相互隔离,不共享内存,每个Actor拥有自己私有状态变量。 每个Actor有自己地址,通过地址相互发送消息来通信,消息是异步传递。...Actor保持了封装性,因为消息处理是串行,不需要使用锁来同步多线程访问。 Actor状态是本地,不共享,通过消息传递数据,符合现代系统内存工作方式。

70840
您找到你想要的搜索结果了吗?
是的
没有找到

Akka 介绍

很多常用设计实践和已经接受程序模型不能解决一些重要挑战,这些挑战通常是现代计算机体系结构中固有的。...为了帮助你处理上面提到这些现实问题,Akka 提供了: 不使用低级并发结构多线程,例如原子或锁;让你免于考虑内存可见性问题。...例如,一个计算机操作系统是这样一个reactive system,它不会停止运行,而总是反应用户给输入,并且计算机各个组件之间要进行交流。...actor 模型贯穿整个 Akka 库,能够让你更加容易理解和使用它们,并且能够保证更好完整性。...通过学习 Akka 和如何使用 actor 模型,你将访问到庞大和深入工具集用来解决分布式并行系统遇到困难和挑战,通过统一编程模型,其中所有的东西都能够紧密和高效组合在了一起。

47120

Akka 介绍

很多常用设计实践和已经接受程序模型不能解决一些重要挑战,这些挑战通常是现代计算机体系结构中固有的。...为了帮助你处理上面提到这些现实问题,Akka 提供了: 不使用低级并发结构多线程,例如原子或锁;让你免于考虑内存可见性问题。...例如,一个计算机操作系统是这样一个reactive system,它不会停止运行,而总是反应用户给输入,并且计算机各个组件之间要进行交流。...actor 模型贯穿整个 Akka 库,能够让你更加容易理解和使用它们,并且能够保证更好完整性。...通过学习 Akka 和如何使用 actor 模型,你将访问到庞大和深入工具集用来解决分布式并行系统遇到困难和挑战,通过统一编程模型,其中所有的东西都能够紧密和高效组合在了一起。

45310

Akka 指南 之「Akka 简介」

许多常见实践和公认编程模型并不能解决现代计算机体系结构所固有的重要挑战。为了取得成功,分布式系统必须在组件崩溃而没有响应、消息丢失而没有在线跟踪以及网络延迟波动环境中进行处理。...这些问题经常发生在精心管理数据中心内部环境,在虚拟化架构更是如此。...通过学习 Akka 以及如何使用 Actor 模型,你将能够熟练使用大量工具集,这些工具可以在统一编程模型解决困难分布式/并行系统问题,在统一编程模型,所有东西都紧密且高效地结合在一起。...本入门指南提供了更高级别的信息,它涵盖了为什么 Actor 模型适合现代分布式系统需要,并且包括一个有助于进一步了解 Akka 教程。...这些主题包括: 为什么现代系统需要新编程模型 Actor 模型如何满足现代分布式系统需求 Akka 库和模块概述 一个基于 Hello World 示例「更复杂例子」以说明常见 Akka 模式

55530

使用Akka实现并发

我需要类似线程池东西来限制线程数。只需一个简单循环和线程数就可以了。该解决方案看起来很好,在架构很?, 然后我意识到我忘记了错误处理。...在Akka之后,我感受到了类似的快乐。Akka基于actors,所以actors是什么? Actors actors给你带来: 简单和高级并发和并行抽象。 异步,非阻塞和高性能事件驱动编程模型。...非常轻量级事件驱动进程(每GB堆内存数百万个actor)。 使用Akka非常容易。它可以作为依赖项添加到我们project.Simple jar文件。...示例来自Akka文档。...Akka所有内容都设计为在分布式环境工作:actor所有交互都使用纯消息传递,一切都是异步

1.4K20

Akka 指南 之「Actor 模型如何满足现代分布式系统需求?」

正如我们在「调用栈假象」中看到,如果它期望返回值,那么发送 Actor 要么阻塞,要么在同一线程执行另一个 Actor 工作。相反,接收 Actor 在回复消息传递结果。...数百万个 Actor 可以有效地安排在十几个线程,从而充分发挥现代 CPU 潜力。任务委托是 Actor 天然执行方式。...Actor 状态是本地而不是共享,更改和数据通过消息传播,消息是映射到现代内存架构实际工作方式。在许多情况下,这意味着只传输包含消息数据缓存线,同时将本地状态和数据缓存在原始核心上。...我们需要考虑两种错误: 第一种情况是,由于任务错误(通常是一些验证问题,如不存在用户 ID),目标 Actor 委派任务失败。...Akka 要求所有 Actor 都被组织成一个树形结构,即一个创造另一个 Actor Actor 成为新 Actor 父节点。这与操作系统将流程组织到树方式非常相似。

1.2K30

线程框架模型总结

Reactor:Apache Netty整体架构基于Reactor模式; 3. ActorAkka是在JVMActor模型实现。...因此Actor在空间(分布式)和时间(异步驱动)上解耦。而Akka是Lightbend(前身是Typesafe)公司在JVMActor模型实现。...在akka系统官网上主要介绍了现代并发编程模型所遇到问题,里面主要提到了三个点 (1) 在面向对象语言中一个显著特点是封装,然后通过对象提供一些方法来操作其状态,但是共享内存模型下,多线程对共享对象并发访问会造成并发安全问题...加锁在编程语言层面无法防止隐藏死锁问题 (2) Java并发模型是通过共享内存来实现,cpu中会利用cache来加速主存访问,为了解决缓存不一致问题,在java中一般会通过使用volatile来标记变量...因此从某种意义上来说是没有共享内存,而是通过cpu将cache line数据刷新到主存方式来实现可见。

72930

基于Scala并发编程模型Akka

二、Akka  Actor 模型 2.1  Actor模型介绍         Akka 处理并发方法基于 Actor 模型。在基于 Actor系统里,所有的事物都是 Actor。...但是有一个重要区别,那就是Actor模型是作为一个并发模型设计和架构,而面向对象模式则不是。Actor 与Actor之间只能通过消息通信。...对并发模型进行了更高抽象 异步、非阻塞、高性能事件驱动编程模型 轻量级事件处理(1GB内存可容纳百万级别个Actor) 为什么 Actor 模型是一种处理并发问题解决方案呢?...实际上说明了Dispatcher Message内部是一个线程池,receive()方法实际是从自己Mail Box取出消息,内部类似于调用Runnablerun方法。...ServerToClientMessage("我听不懂你亲意思,客服还在不断学习哦~") } } } } //为了服务端能够独立运行,定义一个伴生对象 object ChatServer

1.2K20

聊聊Akka

技术背景 在产品不断发展过程,一个不可忽视挑战是大数据带来存储和计算问题,存储暂且不表(Akka不直接提供数据存储方案,当然,在Akka基础也可以实现类似的分布式文件存储系统),我们来看看数据计算问题...Akka是什么 Akka是一款高性能高容错性分布式&并行应用框架,遵循Apache 2开源许可,底层通过JVM另外一个流行语言Scala实现,提供Java&ScalaAPI(本书采用Java进行代码演示...在ActorSystem基础Akka也提供了一些配套组件,比如持久化,Http服务,网络服务等,他们都是构建高可用分布式应用不可或缺部分,基本架构体系和周边产品如图1-4所示。 ?...图1-4 Akka基本架构体系及周边产品 Actor组件 在AkkaActor是一个高度抽象对象引用,它包含以下几个要素: 引用(ActorReference) Actor引用不同于普通对象引用...在底层实现Actor是运行于线程池之上,肯定会存在多个Actor共享同一个线程情况,那么会不会出现并发问题呢?

2K30

3.4 Spark通信机制

RPC 远程过程调用协议(Remote Procedure Call Protocol, RPC)是一种通过网络从远程计算机程序请求服务,而不需要了解底层网络技术协议。...RPC假定某些传输协议存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型,RPC跨越了传输层和应用层。RPC使得开发分布式应用更加容易。RPC采用C/S架构。...Actor模型常见于并发编程,它由Carl Hewitt于20世纪70年代早期提出,目的是解决分布式编程一系列问题。其特点如下: 1)系统所有事物都可以扮演一个Actor。...AKKA优势如下: 1)易于构建并行与分布式应用(simple concurrency & distribution):AKKA采用异步通信与分布式架构,并对上层进行抽象,如Actors、Futures...3)高性能(high performance):在单机每秒可发送5000万个消息。内存占用小,1GB内存可保存250万个actors。

1.6K50

3.4 Spark通信机制

RPC 远程过程调用协议(Remote Procedure Call Protocol, RPC)是一种通过网络从远程计算机程序请求服务,而不需要了解底层网络技术协议。...RPC假定某些传输协议存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型,RPC跨越了传输层和应用层。RPC使得开发分布式应用更加容易。RPC采用C/S架构。...Actor模型常见于并发编程,它由Carl Hewitt于20世纪70年代早期提出,目的是解决分布式编程一系列问题。其特点如下: 1)系统所有事物都可以扮演一个Actor。...AKKA优势如下: 1)易于构建并行与分布式应用(simple concurrency & distribution):AKKA采用异步通信与分布式架构,并对上层进行抽象,如Actors、Futures...3)高性能(high performance):在单机每秒可发送5000万个消息。内存占用小,1GB内存可保存250万个actors。

1.4K50

Akka 指南 之「调度器」

共享性:None 邮箱:任意,为每个 Actor 创建一个 用例:Bulkheading 驱动:任何akka.dispatch.ThreadPoolExecutorConfigurator。...请注意,同样提示也适用于管理 Akka 任何地方阻塞操作,包括流、HTTP 和其他构建在其响应式库。...然后,Akka 基于fork join池调度器尝试通过向池中添加更多线程来补偿此阻塞(default-akka.actor.default-dispatcher 18,19,20,...)。...具体大小应该根据你期望在此调度器运行工作负载以及运行应用程序计算机核数量(number of cores)进行微调。通常,核数周围小数字是一个很好默认值。...在Future执行阻塞调用,确保在任何时间点对此类调用数量上限,提交无限数量此类任务将耗尽内存或线程限制。

1.8K21

Akka 指南 之「消息传递可靠性」

文章目录 消息传递可靠性 一般规则 讨论:“至多一次”是什么意思? 讨论:为什么不保证传递? 讨论:消息排序 通信故障 在 JVM(本地)消息发送规则 小心你对这部分操作!...通常不令人担忧死信 消息传递可靠性 Akka 帮助你构建可靠应用程序,这些应用程序可以在一台机器中使用多个处理器核心(scaling up,纵向扩展)或分布在计算机网络(scaling out,横向扩展...讨论:“至多一次”是什么意思?...你可以在「Erlang 文档第 10.9 节和第 10.10 节中了解更多关于这种方法信息,Akka将密切关注它。...不建议依赖本节更强可靠性,因为它会将你应用程序绑定到仅本地(local-only)部署:为了适合在计算机集群运行,可能必须对应用程序进行不同设计(而不是仅使用某些 Actor 本地某些消息交换模式

1.7K10

Akka 指南 之「Akka 和 Java 内存模型」

Akka 和 Java 内存模型 使用 LightBend 平台(包括 Scala 和 Akka一个主要好处是简化了并发软件编写过程。...本文讨论了 LightBend 平台,特别是 Akka 如何在并发应用程序处理共享内存。 Java 内存模型 在 Java 5 之前,Java 内存模型(JMM)是定义有问题。...当多个线程访问共享内存时,可能会得到各种奇怪结果,例如: 线程看不到其他线程写入值:可见性问题。 由于没有按预期顺序执行指令而导致观察其他线程发生“不可能”行为:指令重新排序问题。...Actors 和 Java 内存模型 通过 Akka Actor 实现,多个线程可以通过两种方式在共享内存执行操作: 如果消息发送给某个 Actor(例如由另一个 Actor)。...Actors 和共享可变状态 由于 Akka 在 JVM 运行,所以仍然需要遵循一些规则。

95220

Akka 指南 之「集群使用方法」

何时何地使用 Akka 集群? 如果你打算使用微服务架构或传统分布式应用程序,则必须进行架构选择。这个选择将影响你应该如何使用 Akka 集群。...在微服务架构,你应该考虑服务内部和服务之间通信。...Cluster Sharding 将 Actor 分布在集群多个节点,并支持使用其逻辑标识符与 Actor 进行交互,但不必关心它们在集群物理位置。...Cluster Client 从不是集群一部分 Actor 系统到集群某个地方运行 Actor 通信。客户端不必知道目标 Actor 正在哪个节点运行。...Distributed Data 当需要在 Akka 集群节点之间共享数据时,Akka 分布式数据(Distributed Data)非常有用。

4.6K60

漫谈并发编程:Actor模型

熟悉c和java并发编程都会比较熟悉共享数据策略,比如java程序员就会常用到java.util.concurrent包同步、锁相关数据结构。...0x01 基本概念 Actor计算机科学领域中一个并行计算模型,它把actors当做通用并行计算原语:一个actor对接收到消息做出响应,进行本地决策,可以创建更多actor,或者发送更多消息...在Actor理论,一切都被认为是actor,这和面向对象语言里一切都被看成对象很类似。但包括面向对象语言在内软件通常是顺序执行,而Actor模型本质则是并发。...0x02 AkkaActor 我们会用到Akka框架提供Actor,因此在这里先大致介绍一下AkkaActor使用方式。...Akka官方文档提供了说明Actor生命周期图片,如下所示: ? 官网图不好看,盗一张感觉不错。大致能明白就好。 ?

2.2K40

Actor 并发控制模型使我想到了王者荣耀对战伤害控制实现

前言一般来说,我们有两种策略来在并发线程实现通信:共享内存和消息传递。...大多数传统语言,并发线程之间通信使用都是共享内存共享内存最大问题就是竞争,我们可以使用锁来解决竞争问题,但处理各种锁问题让人头痛不已。...Actor 模型是一种基于消息模型,在 Actor 模型,一切皆 Actor ;每个 Actor 有自己状态和行为,但不共享状态,状态由自己维护和修改;Actor 之间通过消息进行通信, 但每个 Actor...适用场景共享内存模型更适合高吞吐量、要求低延迟订单处理场景,因为它允许直接访问共享状态。...实际使用中大多数场景会混合两种模式使用,比如一些电子商务系统,例如使用共享内存来管理订单状态和库存,而使用 Actor 模型来处理异步通知、通信和与用户交互。

35252

快速入门 Akka Java 指南

相反,它公共 API 是通过 Actor 处理消息来定义。这可以防止 Actor 之间共享状态;观察另一个 Actor 状态唯一方法是向其发送请求状态消息。...轻量级:Lightweight,每个实例只消耗几百个字节,这实际允许数百万并发 Actor 存在于一个应用程序。...消息应该是不可变,因为它们在不同线程之间共享。 将 Actor 关联消息作为静态类放在 Actor 是一个很好实践,这使得理解 Actor 期望和处理消息类型更加容易。...位置透明性意味着,无论是在正在运行 Actor 进程内,还是运行在远程计算机上,ActorRef都可以保持相同语义。如果需要,运行时可以通过更改 Actor 位置或整个应用程序拓扑来优化系统。...你可能想知道 Actor 在不处理消息时候在做什么,比如,做什么实际工作?实际,它处于挂起状态,在这种状态下,它不消耗除内存之外任何资源。同样,这也展示了 Actor 轻量级和高效性。

7.9K31

从事分布式工作10余年,这本书颠覆了我认知!

而本书从基础点到点链路开始,循序渐进地增加复杂度,逐步构建出共享内存、共识、信号量、事务等更为复杂而实用分布式抽象,使我明白了分布式问题和算法之间内在联系,加深了我对分布式算法理解。...这给了我醍醐灌顶感觉,原来,设计分布式算法就是在设计自动机如何处理事件啊! 这让我想起了分布式开源框架Akka及其采用Actor模型。原来Actor模型就是本书所述自动机模型!...不看这本书,我大概只能基于Akka框架工作,而学习了这本书之后,我不用看Akka源码或架构文档,也能大概猜得出Akka框架工作原理和定位——Akka框架就是一套自动机运行时环境,基于Akka框架编程就是在定义自动机如何处理事件...基于这一等价性,读者可以利用现代计算机本地时钟、时钟同步协议以及原子钟等技术弥补网络不足,即使在网络异步情况下,也可以实现同步系统。...精彩书评 本书从算法与系统模型开始,详细论述了分布式系统涉及链路、失败检测和选主、可靠广播、共享内存、共识、基于时钟算法等核心内容,这些知识是构建大型分布式系统底层架构时需要使用,也是比较有难度和复杂性内容

28920
领券