Akka之BackoffSupervisor】的更多相关文章

一.背景 最近在开发一个项目,项目的各模块之间是使用akka grpc传输音频帧的,并且各模块中的actor分别都进行了persist.本周在开发过程中遇到了一个bug,就是音频帧在通行一段时间后,整个系统处于卡死状态,没有了反应.刚开始怀疑是akka grpc通信时,流中断了,或者没有传输过来,可是通过抓包和日志,发现流的每一帧已经接受到了.最后定位到问题时persist的原因,每次卡死之间都可以发现persit失败了.我们去看persist方法的源码可以发现上面的注解如下: /** * As…
在开始讨论Akka中对Actor的生命周期管理前,我们先探讨一下所谓的Actor编程模式.对比起我们习惯的行令式(imperative)编程模式,Actor编程模式更接近现实中的应用场景和功能测试模式.这是因为Actor是靠消息来驱动的,每种消息代表一项功能的运算指令.由于消息驱动式的程序是松散耦合的,每项功能都是在独立的线程中运算,互不干扰依赖,所以我们可以很自然的分开来实现各项功能以及独立测试每项功能.虽然Akka同时提供了Java和Scala两种API,但可能由于Akka本身是用Scala…
在上一篇讨论中我们谈到了监管:在Akka中就是一种直属父子监管树结构,父级Actor负责处理直属子级Actor产生的异常.当时我们把BackoffSupervisor作为父子监管方式的其中一种.实际上BackoffSupervisor与定义了supervisorStrategy的Actor有所不同.我们应该把BackoffSupervisor看作是一个一体化的Actor.当然,它的实现方式还是由一对父子Actor组成.监管策略(SupervisorStrategy)是在BackoffSuperv…
Actor模式最大的优点就是每个Actor都是一个独立的任务运算器.这种模式让我们很方便地把一项大型的任务分割成若干细小任务然后分配给不同的Actor去完成.优点是在设计时可以专注实现每个Actor的功能,在实际运算时由于每个Actor都在独立的线程里运行,能充分利用多核CPU的优势实现相似并行运算的效率.我们同样可以把一个独立的功能按不同的输入分配给多个Actor去完成以达到同样的效率提高目的,这就是Akka的Routing模式了.Routing模式的特点是所有运算Actor的运算逻辑都是相同…
在现实应用中akka-stream往往需要集成其它的外部系统形成完整的应用.这些外部系统可能是akka系列系统或者其它类型的系统.所以,akka-stream必须提供一些函数和方法来实现与各种不同类型系统的信息交换.在这篇讨论里我们就介绍几种通用的信息交换方法和函数. akka-stream提供了mapAsync+ask模式可以从一个运算中的数据流向外连接某个Actor来进行数据交换.这是一种akka-stream与Actor集成的应用.说到与Actor集成,联想到如果能把akka-stream…
个人觉得akka提供的cluster工具中,sharding是最吸引人的.当我们需要把actor分布在不同的节点上时,Cluster sharding非常有用.我们可以使用actor的逻辑标识符与actor进行通信,而不用关心其物理位置.简单来说就是把actor的actorPath或actorRef进一步抽象,用一个字符串表示. sharding可以表示为DDD领域中的聚合根,此时actor叫做“实体”.这些actor一般都具有持久化的状态.每个实体actor只运行在某个节点,我们可以在不知道a…
因为经常买双色球,嫌每次对彩票号麻烦,于是休息的时候做了个双色球兑奖的小程序,做完了发现业务还挺复杂的,于是改DDD重做设计,拆分服务,各种折腾...,不过这和本随笔没多大关系,等差不多了再总结一下,有空就写出来. 上面说了拆服务,拆成了录入,开奖,兑奖三个服务,三个服务开始是用消息队列的,不过后来发现其实就是服务的领域对象之间的交互,就联想到了Actor,面向对象于是一切都是对象,actor也是一切都是actor,看着就门当户对,于是就干掉消息队列...细节以后有机会再说. 上面其实也和这随笔…
Akka.NET 1.1近日发布,带来新特性和性能提升.InfoQ采访了Akka.net维护者Aaron Stannard,了解更多有关Akka.Streams和Akka.Cluster的信息.Aaron还阐述了与Akka for JVM实现有关的路线图计划. InfoQ:这个版本有什么突出的特性? Aaron Stannard:Akka.NET 1.1的主要目标是将Akka.Cluster由Beta测试版程序包变成最终版(RTM)程序包.该版本还提供了测试工具,对在生产环境里运行Akka.NE…
Akka.NET 是Java/Scala 流行框架Akka的一个 .NET 开源移植.可用于构建高并发,分布式和容错事件驱动的应用在 .NET 和 Mono 平台之上.Akka.NET 经过一年多的努力,发布 1.0 正式版,最新版本是1.0.4 ,具体参见 https://github.com/akkadotnet/akka.net/releases !Akka.NET 1.0 已经支持Mono平台,还有清晰的指南,还有 HOWTO,让开发者添加新特性的同时可以很方便的添加相关的文档 Code…
AKKA 笔记 - 有限状态机 -2 原文地址: http://rerun.me/2016/05/22/akka-notes-finite-state-machines-2/ 在上一节的Akka FSM笔记中,我们看了一些基本的使用Akka FSM和咖啡机的使用方式 - Actor的数据结构和一队我们要发给Actor的消息.这次的第二部分也是最终部分,我们会过一遍这些状态的实现细节. 总结 作为一个快速的总结,让我们先看一下FMS的结构和我们要发过去的消息. 状态和数据 FSM的三个状态和要在各…