从Scala的2.11.0版本开始,Scala的Actors库已经过时了。早在Scala2.10.0的时候,默认的actor库即是Akka。
使用 Akka 可以让你从为 Actor 系统创建基础设施和编写控制基本行为所需的初级(low-level)代码中解脱出来。为了理解这一点,让我们看看你在代码中创建的 Actors 与 Akka 在内部为你创建和管理的 Actor 之间的关系,Actor 的生命周期和失败处理。
「Actor Model」为编写并发和分布式系统提供了更高级别的抽象。它减少了开发人员必须处理显式锁和线程管理的问题,使编写正确的并发和并行系统变得更容易。1973 年卡尔·休伊特(Carl Hewitt)在论文中定义了 Actors,然后通过 Erlang 语言所普及,并且在爱立信(Ericsson)成功地建立了高度并发和可靠的电信系统。
为了使用集群分片(Cluster Sharding),你必须在项目中添加如下依赖:
所以我从一个简单的Java程序开始,运行一个while循环直到EOF,然后进行JDBC调用来存储值。这是需要花一个小时才完成了,但后来我意识到程序的运行时比创建程序花费的时间更长。因此,任务并不像看起来那么容易。那可以做些什么呢?当然,我意识到我需要并行完成任务。
在前面的主题中,我们解释了如何在大范围(in the large)内查看 Actor 系统,也就是说,如何表示组件,如何在层次结构中排列 Actor。在这一部分中,我们将通过实现设备 Actor 来在小范围(in the small)内观察 Actor。
使用 LightBend 平台(包括 Scala 和 Akka)的一个主要好处是简化了并发软件的编写过程。本文讨论了 LightBend 平台,特别是 Akka 如何在并发应用程序中处理共享内存。
经常有人问: Akka的Actor和Scala的Actor有什么不同?这里的回答是,从actor 模型角度讲,没什么不同,它们都实现了actor model.
写散文时,最难的部分往往是写前几句话。在开始构建 Akka 系统时,也有类似的“空白画布(blank canvas)”感觉。你可能会想:哪个应该是第一个 Actor?它应该保存在哪里?它应该做什么?幸运的是,与散文不同,既定的最佳实践可以指导我们完成这些初始步骤。在本文的其余部分中,我们将研究一个简单的 Akka 应用程序的核心逻辑,以向你介绍 Actors,并向您展示如何使用他们来制定解决方案。该示例演示了帮助你启动 Akka 项目的常见模式。
关于「Actor Systems」的前一节解释了 Actor 如何形成层次结构,以及在构建应用程序时是最小的单元。本节将孤立地研究一个这样的 Actor,解释在实现它时遇到的概念。有关所有细节的更深入参考,请参考「Actors」。
The Actor Model for Concurrent Computation
本文介绍了如何使用 Akka 进行并行编程,包括 Actor 的创建和停止、消息传递、以及基于层次结构的容错机制。通过示例代码,展示了如何在 Akka 中实现并行编程,并总结了 Akka 在并行编程中的优势和适用场景。
在开始讨论Akka中对Actor的生命周期管理前,我们先探讨一下所谓的Actor编程模式。对比起我们习惯的行令式(imperative)编程模式,Actor编程模式更接近现实中的应用场景和功能测试
近日常有同学来问我如何阅读代码,关于这个问题的一般性答案我特别提了一个问题并自问自答。出于提供一个实际的例子的考量,正好此前综合地阅读 Spark 的 RPC 实现、Flink 基于 Akka 的 RPC 实现和 Actor Model 的通信模型,写成本文分享我阅读分布式计算系统 Spark 和 Flink 中的 RPC 实现的过程和思考。
对于Flink中各个组件(JobMaster、TaskManager、Dispatcher等),其底层RPC框架基于Akka实现,本文着重分析Flink中的Rpc框架实现机制及梳理其通信流程。
消息保证送达是指消息发送方保证在任何情况下都会至少一次确定的消息送达。AtleastOnceDelivery是一个独立的trait,主要作用是对不确定已送达的消息进行补发,这是一种自动的操作,无需
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
容错(fault tolerance)概念与 Actor 相关,为了使用这些概念,需要在项目中添加如下依赖:
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。
如前一主题「为什么现代系统需要新的编程模型」所述,常见的编程实践不能合适地满足现代系统的需求。幸运的是,我们不需要放弃我们所知道的一切。相反,Actor 模型以一种原则性的方式解决了这些缺点,允许系统以更好地匹配我们的构思模型(mental model)的方式运行。Actor 模型抽象允许你从通信的角度来考虑你的代码,这与大型组织中人员之间发生的交换没有什么不同。
让我们仔细看看用例所需的主要功能。在用于监测家庭温度的完整物联网系统中,将设备传感器连接到系统的步骤可能如下:
官网:https://guobinhit.github.io/akka-guide/
1. 为什么要调优? 1.1 实验:一个简单的示例 Play Framework2.1的基本设计思想是能够快速处理大量耗时较少的请求,比较耗时的请求采用异步方式完成。为了很好地说明这一点,让我们来看一个例子,编写控制器代码如下: public static AtomicInteger count = new AtomicInteger(0); public static Result test(Long id) { if(id!=0){ try { System.out.pr
原文地址:https://dzone.com/articles/elasticmq-070-long-polling-non
本章概述了监督(supervision)背后的概念、提供的原语及其语义。有关如何转换为真实代码的详细信息,请参阅 Scala 和 Java API 的相应章节。
本文介绍了Akka在Spark中的使用,包括Akka的主要特性和架构。首先介绍了Akka的入门知识,然后详细阐述了Akka在Spark中的使用,包括如何使用Akka进行RPC调用、如何使用Akka异步处理消息和如何使用Akka进行并行计算。最后,本文总结了Akka在Spark中的使用,并介绍了另一种基于Netty的RPC实现。
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境。 在Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用中,我们已经写好了一个Spark的应用。 本文的目标是写一个基于akka的scala工程,在一个spark standalone的集群环境中运行。 akka是什么? akka的作用 akka的名字是action kernel的回文。根据官方定义:akka用于r
上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“Akka 是一个为 Java 和 Scala 构建高并发、分布式和弹性消息驱动应用程序的工具包”。而 Akka 具有的一切特性,其实都源自于一个用于处理并发计算问题的模型——Actor 模型。
这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。
在前面几篇讨论里我们介绍了在集群环境里的一些编程模式、分布式数据结构及具体实现方式。到目前为止,我们已经实现了把程序任务分配给处于很多服务器上的actor,能够最大程度的利用整体系统的硬件资源。这是因为通过akka-cluster能够把很多服务器组合成一个虚拟的整体系统,编程人员不需要知道负责运算的actor具体在那台服务器上运行。当然,我所指的整体系统是一种分布式的系统,实质底层还是各集群节点作为完整个体独立运行的,所以核心理念还是需要将程序分割成能独立运算的任务,然后分派给可能分布在很多服务器上的actor去运算。在上一篇的cluster-load-balance里我们采用了一种fire-and-forget模式把多项独立任务分配给集群节点上的actor,然后任由它们各自完成运算,中途不做任何交互、控制。这也是一种典型的无内部状态的运算模式。对外界来讲就是开始、完成,中间没有关于运算进展或当前状态的交流需要。但在现实里,很多任务是无法完全进行独立细分的,或者再细分会影响系统效率。比如网上购物网站每个客户的购物车:它记录了客户在网上的所有商品拣选过程,每一个拣选动作都代表更新的购物车状态,直到完成结算。那么在一个可能有几十万用户同时在线购物的网站,保留在内存的购物车状态应该是任何机器都无法容纳的,只有回到传统的数据库模式了,还是要面对无法解决的多并发系统效率问题。这么分析,集群分片技术可能是最好的解决方法了。
3.4 Spark通信机制 前面介绍过,Spark的部署模式可以分为local、standalone、Mesos、YARN等。 本节以Spark部署在standalone模式下为例,介绍Spark的通信机制(其他模式类似)。 3.4.1 分布式通信方式 先介绍分布式通信的几种基本方式。 1. RPC 远程过程调用协议(Remote Procedure Call Protocol, RPC)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC假定某些传输协议的存在,如TCP或UD
akka-typed的actor从创建、启用、状态转换、停用、监视等生命周期管理方式和akka-classic还是有一定的不同之处。这篇我们就介绍一下akka-typed的actor生命周期管理。
为了使用分布式发布订阅(Distributed Publish Subscribe),你需要将以下依赖添加到你的项目中:
到目前为止,我们所看到的对话模式很简单,因为它们要求 Actor 保持很少或根本就没有状态。明确地:
0x00 前言 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。熟悉c和java并发编程的都会比较熟悉共享数据的策略,比如java程序员就会常用到java.util.concurrent包中同步、锁相关的数据结构。 使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争(data race)。处理各种锁的问题是让人十分头痛的一件事。 和共享数据方式相比,消息传递机制最大的优点就是不会产生数据竞争状态(data race)。实现消息传递有两种常见的类型:基于channel的消息传递和
作者 | 罗燕珊 Apache 基金会孵化器近日迎来新成员——Pekko ,但对于部分开发者来说,Pekko 应该不陌生。 事实上,Pekko 是 Akka 项目的一个分支。不久前, Akka 的许可证从 Apache 2 更改为 Business Source License 1.1,Pekko 作为新的分支从中拉出。根据介绍,Pekko 项目提供了一套工具和框架,涵盖了分布式并发系统的复杂问题空间。它旨在支持响应式宣言的设计原则,通过提供组件来有效地在服务器内扩展系统或跨多个服务器横向扩展,是高性能、
Akka 是一个开源的并发、分布式、基于消息驱动的框架,用于构建高可伸缩性、可靠性和并发性强的应用程序。它是基于 JVM(Java虚拟机)的,主要使用 Scala 编程语言开发,但也提供了 Java API,因此可以在 Java 和 Scala 中使用。
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境。 本文的目标是写一个Spark应用,并可以在集群中测试。 创建一个Scala的工程- SimpleAPP 建一个目录SimpleAPP mkdir SimpleAPP mkdir -p SimpleAPP/src/main/scala 建一个SimpleAPP/src/main/scala/SimpleApp.scala文件 这个程序会进行MapReduce计算,
Akka 是一个用于在 JVM 上构建高并发、分布式和容错的事件驱动应用程序的运行时工具包。Akka 既可以用于 Java,也可以用于 Scala。本指南通过描述 Java 版本的Hello World示例来介绍 Akka。如果你喜欢将 Akka 与 Scala 结合使用,请切换到「快速入门 Akka Scala 指南」。
为了使用集群客户端(Cluster Client),你需要将以下依赖添加到你的项目中:
当我初接触akka-cluster的时候,我有一个梦想,希望能充分利用actor自由分布、独立运行的特性实现某种分布式程序。这种程序的计算任务可以进行人为的分割后再把细分的任务分派给分布在多个服务器上的actor上去运算。这些服务器都处于同一集群环境里,它们都是akka-cluster中的节点(node)。akka-cluster的节点数量只需要通过系统配置方式按照计算能力要求随意增减,在集群上运行的分布式程序可以在不修改软件的情况下自动调整actors在各节点上的分布,重新平衡程序运算负载,不受任何影响继续运行。
flink-release-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/rpc/RpcService.java
Lightbend(最近由 Typesafe改名而来),是Akka背后的公司,最近发布了一款开源的微服务框架,Lagom(在瑞典语中,“刚刚好的”意思),它构建在Reactive平台之上。尤其是使用了Play框架和Akka家族产品,并添加了ConductR用于部署。默认情况下,Lagom是消息驱动和异步的,使用分布式CQRS持久化模式,并将事件溯源(event sourcing)作为主要实现。 按照Jonas Bonér(他是Lightbend的CTO和Akka的创建者)的说法,将其命名为Lagom的原因在
Gatling作为一款开源免费的性能测试工具越来越受到广大程序员的欢迎。免费当然是好的,最缺钱的就是程序员了;开源更好啊,缺啥功能、想做定制化的可以自己动手,丰衣足食。其实我最喜欢的原因是其提供了简洁强大的API,原生支持命令行运行,不像JMeter那样需要在界面上点来点去。另外其出色的扩展API和轻量级的HTML报表都值得让人称道。
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部,当我们获取一个元素时,它会返回队列头部的元素。
这个问题是这个样子,如果你的zookeeper集群不稳定,而且此前有部署过marathon集群,这下就经常会出现这种问题。marathon如果开启集群模式(--ha=true),如果zookeeper集群的节点连接出现延迟的问题或者其他问题,进而marathon无法确定其他节点的情况,失去竞选能力,然后自我毁灭。 zookeeper部署的时候要格外注意跟marathon集群的结合,另外如果你不启用marathon的集群模式,你最好关闭marathon的集群模式。
本文主要讲解Scala的并发(并行)编程,那么为什么题目概称geotrellis使用(六)呢,主要因为本系列讲解如何使用Geotrellis,具体前几篇博文已经介绍过了。我觉得干任何一件事情基础很重要,就像当年参加高考或者各种考试一样,老师都会强调基础,这是很有道理的。使用Geotrellis框架的基础就是Scala和Spark,所以本篇文章先来介绍一下Scala编程语言,同样要想搞明白Scala并发(并行)编程,Scala基础也很重要,没有Scala语言基础就谈不上Scala并发编程也就更谈不
在使用akka-typed的过程中发现有很多地方都简化了不少,变得更方便了,包括:Supervision,只要用Behaviors.supervise()把Behavior包住,很容易就可以实现这个actor的SupervisorStrategy.restartWithBackoff策略了。然后集群化的group router使用起来也很方便,再就是集群分片cluster-sharding了。下面我们就通过一个例子来介绍cluster-sharding的具体使用方法。
领取专属 10元无门槛券
手把手带您无忧上云