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

Akka 指南 之「调度

文章目录 调度 依赖 简介 默认调度 查找调度 为 Actor 设置调度 调度类型 更多调度配置示例 阻塞需要小心管理 问题:在默认调度上阻塞 解决方案:用于阻塞操作的专用调度 阻止操作的可用解决方案...调度 依赖 调度(Dispatchers)是 Akka 核心的一部分,这意味着它们也是akka-actor依赖的一部分: <!...阻塞需要小心管理 在某些情况下,不可避免地要执行阻塞操作,即让线程休眠一段不确定的时间,等待发生外部事件。...然后,Akka 中基于fork join池的调度尝试通过向池中添加更多线程来补偿此阻塞(default-akka.actor.default-dispatcher 18,19,20,...)。...第一种可能性特别适用于本质上是单线程的资源,例如数据库句柄,传统上一次只能执行一个未完成的查询,并使用内部同步来确保这一点。

1.8K21

你有必要了解一下Flink底层RPC使用的框架和原理

Akka介绍 由于Flink底层Rpc是基于Akka实现,我们先了解下Akka的基本使用。 Akka是一个开发并发、容错和可伸缩应用的框架。...它也可以显式等待响应,这使得可以执行同步操作。但是,强烈不建议同步消息,因为它们限制了系统的伸缩性。每个actor有一个邮箱(mailbox),它收到的消息存储在里面。...endpointId, "endpointId"); // 通过RpcService启动RpcServer this.rpcServer = rpcService.startServer(this); // 主线程执行,...final long timeToRun = runAsync.getTimeNanos(); final long delayNanos; // 若为0或已经到了调度时间,则立刻进行调度 if (...Rpc(本地/远程)调用,可以看到底层也是通过Akka提供的tell/ask方法进行通信;经过上述步骤就完成Rpc(本地/远程)调用,可以看到底层也是通过Akka提供的tell/ask方法进行通信; 4

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

分布式系统模式11-HeartBeat

选择的请求间隔要大于服务之间的网络往返时间。所有服务等待至超时间隔,该间隔是用于检查心跳的请求间隔的数倍。一般来说, 超时间隔>请求间隔>服务之间的网络往返时间。...,调度执行一个方法来发送心跳消息。...否则,它可能会导致长时间的延迟,从而错误地检测到发送服务宕机,甚至当它在定期发送心跳时也是如此。Request Pipeline 可以用来确保服务在发送心跳之前不会等待前一个请求的响应。...像[consul]和[akka]这样的框架异步发送心跳。这也可能是接收服务上的问题。一个正在进行磁盘写入的接收服务,只能在写入完成后才检查心跳,从而导致错误的故障检测。...Akka已知已在2400台服务上试用。Hashicorp Consul 通常在一个组中部署数千个Consul 服务

99820

阅读源码|Spark 与 Flink 的 RPC 实现

Spark 的实现类似于 Akka 中 AskPattern 引入 PromiseActorRef 的方式,生成一个 Promise 并在对应的返回收到时完成,这个 Promise 作为 ask 的返回值...相关的回调逻辑发生在 NettyRpcEnv#askAbortable 中,可以看到,本地消息中 Promise 的完成发生在发送消息的同一个线程上,而远端消息中 Promise 的完成一路探查到 TransportClient...和 TransportChannelHandler 可以发现完成在 Netty 的 channelRead0 上,也就是说,Spark 的 ask 返回的 Future,其完成的时间点并不一定和 RpcEndpoint...Dispatcher 线程中等待,否则立即执行,对于 callAsync 也就是 ask,还会通过 tell 返回结果。...后者则是直接拿到 Akka ActorSystem 中的 Dispatcher 作为 Executor,将动作发布到 ActorSystem 的 Dispatcher 中去调度执行。

1.2K20

ElasticMQ 0.7.0:长轮询,使用Akka和Spray的非阻塞实现

如果队列中没有消息,,ElasticMQ将等待MessageWaitTime几秒钟直到消息到达,而不是用空响应完成请求。...独立的服务现在是一个单一的jar包。...像以前一样,您也可以使用任何基于JVM的语言来运行嵌入式服务。 实现说明 出于好奇,下面是对ElasticMQ如何实现的简短描述,包括核心系统,REST层,Akka数据流使用和长轮询实现。...完全放弃请求或使用某个value完成该请求仅仅取决于它的路由。该请求也可以在另一个线程中完成 - 或者,例如,在未来某个线程运行完成时。这正是ElasticMQ所做的。...使用Akka调度程序,我们还计划在指定的时间超过之后发回空列表并删除条目。 当新消息到达时,我们只需从map上等待一个请求,然后尝试去完成它。

1.5K60

Akka 指南 之「术语及概念」

温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star、Fork,纠错。...典型的场景是一个调度算法,它总是选择高优先级的任务而不是低优先级的任务。如果传入的高优先级任务的数量一直足够多,那么低优先级任务将永远不会完成。...例如,客户机向服务发送无序数据包(如 UDP 数据报)P1和P2。由于数据包可能通过不同的网络路由传输,因此服务可能先接收到P2,然后接收到P1。...等待自由(Wait-freedom) 如果保证每个调用都以有限的步骤完成,则方法是无等待(wait-free)的。如果一个方法是有界“无等待”的,那么步骤的数量有一个有限的上限。...根据这个定义,无等待方法永远不会被阻塞,因此不会发生死锁。此外,由于每个参与者都可以在有限的步骤之后(调用完成时)继续进行,因此无等待方法没有饥饿。

77160

ElasticMQ 0.7.0:使用Akka和Spray的长轮询,非阻塞实现

如果队列中没有消息,而不是正在完成空响应的请求,ElasticMQ将等待MessageWaitTime秒钟,直到消息到达。...现在,独立服务是一个单一的jar文件。...像以前一样,您也可以使用任何基于JVM的语言来运行嵌入式服务。 实现说明 出于好奇,下面简单描述下ElasticMQ是如何实现的,包括核心系统,REST层,Akka数据流的使用和长轮询的实现。...该请求也可以在另一个线程中完成; 或者,例如,在某个未来完成。这恰好是ElasticMQ所采用的。...使用Akka调度程序,我们还计划在指定的超时之后发回空列表并删除条目。 当新消息到达时,我们只需从map上获取一个等待请求,然后尝试完成它。同样,所有同步和并发问题都由Akka和参与者模型来处理。

1.5K90

Java多线程模型

线程调度 延伸阅读 线程调度是指系统为线程分配处理器使用权的过程,主要调度方式有两种,分别是协同式线程调度(Cooperative Threads-Scheduling)和抢占式线程调度(Preemptive...虽然Java线程调度是系统自动完成的,但是我们还是可以“建议”系统给某些线程多分配一点执行时间,另外的一些线程则可以少分配一点——这项操作可以通过设置线程优先级来完成。...Callable是类似于Runnable的接口,其中call方法类似于run方法,所不同的是run方法不能抛出受检异常没有返回值,而call方法则可以抛出受检异常并可设置返回值。...在使用actor模型的时候需要使用第三方Akka提供的框架。 生产者消费者模型 生产者消费者模型都比较熟悉,其核心是使用一个缓存来保存任务。...下面的代码示例是使用akka actor for scala演示。使用的时候也可以使用java Thread来实现该模型。

40240

Spark源码系列(一)spark-submit提交作业过程

在receive方法里面,就是等待接受回应了,有两个Response分别对应着这里的launch和kill。 线索貌似到这里就断了,那下一步在哪里了呢?...具体的Akka的用法,大家还是参照官网吧,Akka确实如它官网所言的那样子,是一个简单、强大、并行的分布式框架。...小结: Akka的使用确实简单,短短的几行代码即刻完成一个通信功能,比Socket简单很多。但是它也逃不脱我们常说的那些东西,请求、接收请求、传递的消息、注册的地址和端口这些概念。...app.state = ApplicationState.RUNNING } } } } } } 它的调度是这样的...难怪在作业调度的时候,看到别的actor叫driverActor。 不过这篇文章还有存在的意义, Akka调度这块,和我现在正在写的第三篇以及第四篇关系很密切。

1.9K60

PowerJob 技术综述,能领悟多少就看你下多少功夫了~

由图可见,整个 PowerJob 系统由调度中心(powerjob-server)和执行(powerjob-worker)构成。...对外部分面向用户,即提供 HTTP 服务,允许开发者在前端界面上可视化得完成任务、工作流等信息的配置与管理;对内部分则负责完成开发者所录入任务的调度和派发,同时维护注册到本注册中心所有执行集群的状态。...执行是一个普通的 Jar 包,需要接入调度中心的应用依赖该 Jar 包并完成初始化后,powerjob-worker 便正式启动并提供服务。...调度中心和执行之间通过 akka-remote 进行通讯。...调度中心可以多实例部署来进行水平扩展,提升调度性能的同时做到调度中心高可用,执行也可以通过集群部署实现高可用,同时,如果开发者实现了 MapReduce 这一具有分布式处理能力的处理,也可以调动整个集群的计算资源完成任务的分布式计算

1.1K30

大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

receive class SayHelloActor extends Actor {   // 循环的接收消息   // 1. receive方法,会被该 Actor 的 MailBox(实现了 Runnable...6、MailBox 实现了 Runnable 接口,是一个线程,一直运行并调用 Actor 的 receive 方法,因此当Dispather 发送消息到 MailBox 时,Actor 在r eceive...2、MailBox 实现了 Runnable 接口,处于运行的状态。 3、当有消息到达 MailBox,就会去调用 Actor 的 receive 方法,即将消息推送给 receive 方法。...// 2、服务端发送给客户端的协议 case class ServerMessage(mes: String) 16.9 Akka 网络编程-Spark Master Worker 进程通讯项目 16.9.1...println("开启了定时检测Worker心跳的任务")       import context.dispatcher // 使用调度时候必须导入dispatcher       context.system.scheduler.schedule

1.8K30

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

在不同的服务之间,「Akka HTTP」或「Akka gRPC」可用于同步(但不阻塞)通信,而「Akka Streams Kafka」或其他「Alpakka」连接可用于集成异步通信。...通常情况下,这是自动处理的,但在此过程中,如果出现网络故障,可能仍然需要将节点的状态设置为Down,以便完成删除。...默认调度程序应该足以执行集群任务,即不应更改akka.cluster.use-dispatcher。...如果在使用默认调度时出现与集群相关的问题,这通常表示你正在默认调度上运行阻塞或 CPU 密集型参与者/任务(actors/tasks)。...为这些参与者/任务使用专用的调度,而不是在默认调度上运行它们,因为这样可能会使系统内部任务匮乏。

4.6K60

Akka 指南 之「第 5 部分: 查询设备组」

指示查询等待响应的期限。将其作为参数将简化测试。...设置查询超时 由于我们需要一种方法来指示我们愿意等待响应的时间,现在是时候引入一个我们还没有使用的新的 Akka 特性,即内置的调度(built-in scheduler)功能了。...使用调度(scheduler)很简单: 我们可以从ActorSystem中获取调度,而ActorSystem又可以从 Actor 的上下文中访问:getContext().getSystem().scheduler...这需要一个ExecutionContext,它是将执行计时任务本身的线程池。在我们的示例中,我们通过传入getContext().dispatcher()来使用与 Actor 相同的调度。...scheduleOnce的返回值是Cancellable,如果查询及时成功完成,可以使用它取消定时。在查询开始时,我们需要询问每个设备 Actor 当前的温度。

1.1K20

Spark on Yarn 架构解析

一、Hadoop Yarn组件介绍: 我们都知道yarn重构根本的思想,是将原有的JobTracker的两个主要功能资源管理 和 任务调度监控 分离成单独的组件。...(可以基于现有的能力调度和公平调度模型) 2.NodeManager(NM)      节点管理,每个节点一个,实现节点的监控与报告。...NodeManager是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况(CPU、内存、硬盘、网络)并向调度汇报。...3.ApplicationMaster(AM)      应用控制,每个作业或应用一个,实现应用的调度和资源协调。具体来说呢,它进行数据的切分,为应用申请资源并分配给任务,完成任务监控与容错。...2.等待SparkContext初始化完成,最多等待spark.yarn.applicationMaster.waitTries次数(默认为10),如果等待了的次数超过了配置的,程序将会退出;否则用SparkContext

1.3K10

Java SE 快学到头了,总结一下 Java多线程部分吧

boolean isCancelled() 判断任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true boolean isDone() 判断任务是否已经完成,若任务完成,则返回 true...READY(就绪状态) 线程对象调用 start() 方法之后,等待 JVM 的调度,此时线程并没有运行。 2....线程的调度 1. 线程的调度的介绍 Java 虚拟机按照特定的机制为程序中的每个线程分配 CPU 的使用权,这种机制被称作线程的调度。 线程调度的两种模型:分时调度模型,抢占式调度模型。...执行服务类的 submit() 方法将 Runnable 接口或者 Callable 接口的实现类对象提交到线程池进行管理; 将 Callable 接口实现类对象提交到线程池进行管理 Future runAsync (Runnable runnable,Executor executor) 以 Runnable 函数式接口类型为参数,并传入指定的线程池执行

16610

浅谈Java多线程基础及其使用方式

在Java中,每个线程都有其自己的程序计数、堆栈和局部变量等资源,这些资源是线程私有的。多个线程可以同时执行,可以提高程序的并发性和效率。...当线程处于就绪状态时,它会被操作系统调度并分配CPU资源。在执行过程中,线程可能会因为某些原因而进入阻塞状态,例如等待I/O操作。当阻塞状态被解除时,线程会重新进入就绪状态,等待CPU资源的分配。...提高计算机资源的利用率:多线程可以同时利用多核处理的优势,将任务分配到不同的线程上并行执行,提高计算机资源的利用率。这尤其适用于数据密集型计算任务。...实现任务的并行处理:对于可以并行执行的任务,多线程可以将任务分解为多个子任务,并通过多个线程同时执行,从而加快任务的完成速度。...实现复杂的任务调度和协同:多线程可以用于实现复杂的任务调度和协同。不同的线程可以根据优先级或条件进行调度完成不同的任务,实现复杂的业务逻辑。

29050
领券