博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
akka进阶(1) - supervisor strategy
阅读量:6771 次
发布时间:2019-06-26

本文共 1042 字,大约阅读时间需要 3 分钟。

hot3.png

当我们设计并行系统时,常常会在这稳定性、可扩展性、实时性这几个特性上深究。

团队从半年前开始构建一个机遇akka的网络爬虫项目,现在项目已经上线运营。这段时间大家开始做一些细致的工作,或是性能调优,或是重构代码,从这个过程中了解到更多akka强大而简便的功能:

  • 提高系统级稳定性 -> supervisor strategy
  • 横向可扩展性 -> 不同routers
  • 实时性 -> 不同的router和dispatcher

这个系列的文章也抄抄官方文档的基本概念,但更多的是总结我们自己项目做下来的心得体会。本文基于一个项目的个人看法,不妨写的偏激一点,虽不全面不精准,但希望帮大家绕过一些坑。

1. supervisor strategy

在akka中,每个actor都是其子actor的supervisor。当一个子actor失败时,supervisor有两种策略:

  • OneForOneStrategy 只针对异常的那个子actor操作
  • OneForAllStrategy 对所有子actor操作

可选的行为有Resume Restart Stop Escalate

  • 想不到特别的情形会使用OneForAllStrategy,通常父actor会对不同的子actor进行不同的管理,或者是当做router简单的转发。若是Router,可以使用Kill或者PoisonPill来做停机重启的操作。

Actor是有默认的strategy的,默认的strategy的行为为

  • 当__ActorInitializationException__发生时将会停止失败的actor
  • 当__ActorKilledException__发生时将会停止失败的子actor
  • 当__Exception__发生时将会重启失败的子actor
  • 其他类型的__Throwable__将会转发给父actor
  • 默认的strategy设置是非常好用的,我们通常只是为了记录特定的日志才会稍微改动strategy。
  • 我认为已知的Exception应该在子Actor中处理掉,supervisor strategy的职责于是简化为未知故障的记录和之后的重启。

可以给supervisor strategy设置譬如这样的参数 (maxNrOfRetries = 10, withinTimeRange = 1 minute)

转载于:https://my.oschina.net/princeicelk/blog/774924

你可能感兴趣的文章
iptables工作原理(通俗理解)
查看>>
【函数】05、装饰器由浅入深
查看>>
DBMS_REPAIR example
查看>>
初识linux
查看>>
ORA-07445 [SIGBUS] [Object specific hardware error]错误一例
查看>>
Yii2的Html,Request组件详解
查看>>
使用ASP.NET实现Windows Service定时执行任务
查看>>
Linux下查看nginx、mysql、php的安装路径和编译参数
查看>>
VC++在内存中绘图
查看>>
Linux下IP地址配置
查看>>
DNS view
查看>>
Mahout数据承载
查看>>
快捷方式小箭头恢复(删除)
查看>>
Redis如何处理客户端连接
查看>>
使用HAProxy实现MySQL多slave的读负载均衡
查看>>
STL容器类型作为模块参数传递的问题 解决方案
查看>>
Mysql数据闪回的奇技淫巧(binlog2sql)
查看>>
单臂路由器实现不同vlan之间的数据交换
查看>>
关于IE下Checkbox标签的onchange事件兼容
查看>>
Linux 查看系统硬件信息汇总 (部份实例详解Centoso为例)
查看>>