akka进阶(1) - supervisor strategy

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

团队从半年前开始构建一个机遇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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值