Akka学习笔记(四):监督和监控

简介: <div style="margin:0px; padding:0px; border:0px; line-height:1.6; font-family:'Helvetica Neue',Arial,'Hiragino Sans GB',STHeiti,'Microsoft YaHei','WenQuanYi Micro Hei',SimSun,Song,sans-serif; font


Akka学习笔记(四):监督和监控

Supervision是什么

supervision表示actors之间的关系。监督者分配任务给下属,因此需要处理反馈的错误。根据不同的错误,监督者supervisor可以做如下操作:

  1. 恢复下属,让下属继续运行,继续接收message。当且仅当下属还可以正常运行
  2. 重启下属,清空status。一般是第一条情况中,child的异常导致无法正常运行。
  3. 关闭下属
  4. 关闭自己,向上一级汇报错误

上面的操作都是递归的。

警告
supervision发送的是system messages,用的mailbox也和普通的messages不一样。

顶层的Supervisors


一个actor system在启动期间,会至少创建3个actors,如上图所示

/user:监护Actor

它是用户创建的Actor的parent,命名为“/user”。使用system.actorOf()方法创建的Actor都是它的children。这意味着只要这个Actor终止了,系统中所有常规的Actor都会被关掉。在Akka 2.1中,可以设置Supervisor Strategy,配置项为akka.actor.guardian-supervisor-strategy,对应类名为SupervisorStrategyConfigurator。倘若这个Guardian Actor扩大了失败,按照前面描述的Supervisor策略,它会使得root guardian终止该Actor,从而使得这个Actor下的所有子Actor都停止,即关掉了整个Actor系统。

/system:系统监护Actor

名为“/system”。主要是为了在常规Actor被终止时,做到按序的shut-down顺序。它可以监控User Guardian。可以管理Top-Level的System Actor采用一种策略,可以在除了ActorInitializationException与ActorKilledException之外的异常出现时,无限制地重启它。

/:Root监护Actor

由于每个真正的Actor都有一个supervisor,因此,root guardian的supervisor不是一个真正的Actor。

当出现如下三类失败错误时,就可能Restart Actor:

  • 在收到特定消息时,发生系统错误,如编程的错误;
  • 在处理消息时,因为一些外部资源的原因出现错误;
  • Actor的内部状态出现问题

Restart的过程:

  1. 暂停Actor(这意味着在Restart期间,不会处理常规的消息,直到它被Resume)。同时,还会递归地暂停所有的children;
  2. 调用旧实例的preRestart钩子方法(默认情况下,会发送终止消息给所有children,调用children的postStop())。
  3. 等待所有的children被终止(调用context.stop())。这个过程是非阻塞的;
  4. 通过调用原来提供的工厂去创建新的Actor实例;
  5. 调用新实例的postRestart()方法(默认情况下,仍然要先调用preStart());
  6. 将restart的请求发送给执行第3步时没有被kill掉的children;然后遵循第2步递归地对children执行restart;
  7. resume actor。

Lifecycle Monitoring

对于Monitoring而言,能监控的状态就是alive到dead之间的迁移。因此,在Akka中,Lifecycle Monitoring指的就是DeathWatch。Monitoring主要指的是监控其他的Actor,而非Supervision层次中的Actor。

监控的Actor(Monitoring Actor)如果接受到一条Terminated消息,默认行为就会抛出DeathPactException。要侦听Terminated消息,可以调用ActorContext.watch(targetActorRef);停止监听则调用ActorContext.unwatch(targetActorRef)。

如果Supervisor不能简单地重启其Children,又必须终止他们,例如在初始化Actor时出现了错误,就可以使用Monitoring。此时,可以侦听这些children,然后重新创建他们,或者安排时间重试。

使用Monitoring的另一种常见情形是,在缺乏外部资源,且该外部资源属于该Actor的一个children,Actor需要失败。如果第三方通过system.stop(child)或者发送PoisonPill去终止child,supervisor就会受到影响。


目录
相关文章
|
25天前
|
存储 监控 Java
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)
20 0
|
存储 人工智能 Prometheus
ML 模型监控最佳工具(上)
如果您迟早将模型部署到生产环境,那么您将开始寻找 ML 模型监控工具。 当您的 ML 模型影响业务时,您只需要了解“事物是如何工作的”。 当事物停止工作时,你真正感受到这一点的第一刻。如果没有设置模型监控,您可能不知道哪里出了问题以及从哪里开始寻找问题和解决方案。
|
机器学习/深度学习 监控 Kubernetes
使用 Seldon Alibi 进行模型监控
虽然 Seldon 使在生产中部署和服务模型变得容易,但一旦部署,我们如何知道该模型是否在做正确的事情? 训练期间的良好表现并不一定意味着在生产运行几个月后表现良好。 现实世界中发生的事情是我们无法解释的,例如:输入数据逐渐偏离训练数据,以及异常值和偏差。
|
25天前
|
监控 算法 Java
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Gauge和Histogram篇)
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Gauge和Histogram篇)
29 0
|
3月前
|
机器学习/深度学习 Python
机器学习中的工作流机制
机器学习中的工作流机制
|
12天前
|
机器学习/深度学习 分布式计算 大数据
一文读懂Apache Beam:统一的大数据处理模型与工具
【4月更文挑战第8天】Apache Beam是开源的统一大数据处理模型,提供抽象化编程模型,支持批处理和流处理。它提倡"一次编写,到处运行",可在多种引擎(如Spark、Dataflow、Flink)上运行。Beam的核心特性包括抽象化概念(PCollection、PTransform和PipelineRunner)、灵活性(支持多种数据源和转换)和高效执行。它广泛应用在ETL、实时流处理、机器学习和大数据仓库场景,助力开发者轻松应对数据处理挑战。
17 1
|
11月前
|
消息中间件 存储 缓存
Storm核心组件、编程模型
Storm核心组件、编程模型
170 0
|
机器学习/深度学习 负载均衡 网络协议
PANAMA: 共享机器学习集群的网内聚合框架(下)
PANAMA: 共享机器学习集群的网内聚合框架(下)
452 1
PANAMA: 共享机器学习集群的网内聚合框架(下)
|
机器学习/深度学习 缓存 负载均衡
PANAMA: 共享机器学习集群的网内聚合框架(上)
PANAMA: 共享机器学习集群的网内聚合框架(上)
166 1
PANAMA: 共享机器学习集群的网内聚合框架(上)
|
机器学习/深度学习 数据采集 算法
机器学习中令你事半功倍的pipeline处理机制​
机器学习中令你事半功倍的pipeline处理机制​
机器学习中令你事半功倍的pipeline处理机制​

热门文章

最新文章