Akka咋设计:我猜,我猜,我猜猜猜

假如我要设一个像Akka一样的actor框架,该怎么设计呢?

猜猜看,看有哪些问题需要考虑。


  1. 对于actor模型来说,最重要的就是actor。
  2. 如果把每个actor构造成一个线程,会简单得多,但是线程的数目必须很少,而actor的数目很多,因此对于一个通用的actor框架,不可能每个actor分配一个线程。所以,actor必须是由别的组件驱动的,有一个不停运转的组件来在actor之间分发消息,也需要有别的组件在另外的线程中处理actor的启动,停止,deathWatch等事件。
  3. 那么,是什么驱动的actor呢?驱动的机制是怎么样的呢?最终的actor的执行环境肯定是一个线程池,那么对于这个线程池的使用,最重要的一点是明确“任务”的切分:怎么样的逻辑才能被做为一个任务提交给线程池呢?
  1. 对于任务粒度,可能包括以下这些选择
    1. 任务的定义为“处理所有actor的mailbox里的消息,每个actor处理一定数目”。这个定义明显太大了,而且当一个任务在一个线程里执行时,实际是要求这个线程处理很多消息。这样就使得整个actor system的处理速度受限于个别消息的处理速度
    2. 任务的定义为“处理这个actor的这些数目的消息”。这个是挺合理的选择。
    3. 任务的定义为“处理这一个消息”。这个粒度太细,效率会很低。
  2. 接下的问题是,这个驱动器的“驱动间隔”是什么?
    1. 时间驱动:它会隔一定时间检查actor的情况,生成任务。这种情况的问题在于如何避免在“检查这件事”上浪费CPU。
    2. 事件驱动:如果有消息发送,它就生成任务。这样的好处在于响应速度可以很快,问题在于如果每个消息都会生成任务,任务粒度就会太细;如果等着消息数目到了一定值再生成任务,那么反应就会变慢。
    3. 结合以上两种。时间和消息数量都会触发任务的生成。
  3. 下一个问题是,这个用于生成任务的驱动器应该是多线程工作的吗?如果是,如何协调多个线程生成任务的动作呢?


至此,可以看看Akka的源码,看它是怎么实现的了。Let‘s do it.

时间: 2024-06-20 08:33:55

Akka咋设计:我猜,我猜,我猜猜猜的相关文章

Java集合框架中隐藏的设计套路

我们的世界不应该只有"胡萝卜" 进入正题之前容我先扯点别的. 最近突然想到了一个驴子和胡萝卜不得不说的故事.说是一个人坐在驴子背上,用一根长杆绑着一根胡萝卜,然后把胡萝卜悬到驴子的面前,驴子以为只要向前走一步就可以吃到胡萝卜,于是不停地向前走,可是它始终无法吃到这根萝卜. 一千个读者就有一千个哈姆雷特,当然不同的人对这个故事也会有不同的理解.比如我们为了生活拼命地工作,却永远达不到财务自由,我们是不是也像一只忙碌的"驴子"呢? 所以,我们的世界不应该只有"

分布式应用框架Akka快速入门

本文结合网上一些资料,对他们进行整理,摘选和翻译而成,对Akka进行简要的说明.引用资料在最后列出. 1.什么是Akka Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. 官方网站 (http://akka.io/)的介绍是: Akka is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant ev

akka设计模式系列-Chain模式

链式调用在很多框架和系统中经常存在,算不得上是我自己总结的设计模式,此处只是简单介绍在Akka中的两种实现方式.我在这边博客中简化了链式调用的场景,简化后也更符合Akka的设计哲学. trait Chained{ def receive:Receive = Actor.emptyBehavior } trait IntReceiveChained1 extends Chained{ override def receive:Receive = super.receive orElse { cas

空心菜老师的世界观

< 希  望>   前  言 还从来没有什么东西,能给人类社会带来如此巨大的变化,除了科学. 科学改变了人类的认知.在科学出现之前,人们普遍相信神灵的存在,认为是神灵在主宰着世界.但科学引发了人们观念的大转变,无神论.唯物论.进化论成为了人们世界观中的主流思想. 科学改变了人类的能力.在科学技术的帮助下,人类变得空前强大,成功地占领了这个星球.自然界那些我们曾经的天敌,老虎.狮子.猎豹.豺狼,此时不是在野外狭窄的生存空间中苟延残喘,就是老老实实在动物园的笼子里晒太阳.人类战胜了天敌,战胜了饥饿

世界就是一场游戏——灵魂如何才不迷失

<世界就是一场游戏——灵魂如何才不迷失>   前  言 还从来没有什么东西,能给人类社会带来如此巨大的变化,除了科学. 科学改变了人类的认知.在科学出现之前,人们普遍相信神灵的存在,认为是神灵在主宰着世界.但科学引发了人们观念的大转变,无神论.唯物论.进化论成为了人们世界观中的主流思想. 科学改变了人类的能力.在科学技术的帮助下,人类变得空前强大,成功地占领了这个星球.自然界那些我们曾经的天敌,老虎.狮子.猎豹.豺狼,此时不是在野外狭窄的生存空间中苟延残喘,就是老老实实在动物园的笼子里晒太阳.

您是哪个等级的CSS开发人员?

我们在不断的学习,追求进步与提高,到底学到什么程度了,到底是 不是真的了解CSS,是哪个层次了呢.我们来对照一下. 第0级:CSS?那不是一个多人射击游戏吗?  CSS? Isn't that a multiplayer game? 有些人因为在找 CS:S(Counter Strike: Source)这款游戏的资讯而进到#CSS网站.不必担心这些人,他们不可能制作太多网页,所以对网络也不 会造成多大伤害. 第1级:是啊,我偶尔用它来移除连结的底线  Yeah, I use it to rem

Spark技术内幕:Client,Master和Worker 通信源码解析

Spark的Cluster Manager可以有几种部署模式: Standlone Mesos YARN EC2 Local 在向集群提交计算任务后,系统的运算模型就是Driver Program定义的SparkContext向APP Master提交,有APP Master进行计算资源的调度并最终完成计算.具体阐述可以阅读<Spark:大数据的电花火石!>. 那么Standalone模式下,Client,Master和Worker是如何进行通信,注册并开启服务的呢? 1. node之间的IP

Scala在挖财的应用实践--转载

原文地址:http://www.infoq.com/cn/articles/scala-architecture-wacai 编者按:本文是根据ArchSummit大会上挖财资深架构师王宏江的演讲<Scala在挖财的应用实践>整理而成. 这次分享有三个方面,1是介绍一下挖财当前的开发情况和后端的架构, 2是挖财选择Scala的原因,3是挖财使用Scala相关的技术时碰到的问题以及经验. 第一部分是团队的情况和后端技术的架构.近一年我们的开发团队从50人增长到了现在两百人,公司总人数扩张到600

雪球在股市风暴下的高可用架构改造分享

本文根据唐福林老师在“高可用架构”微信群所做的<股市风暴下的雪球架构改造经验分享>整理而成,转发请注明来自微信公众号ArchNotes. 唐福林,雪球首席架构师,负责雪球业务快速增长应对及服务性能与稳定架构优化工作.毕业于北京师范大学,硕士学位.之前曾任微博平台资深架构师,微博技术委员会成员.长期关注并从事互联网服务后端性能及稳定性架构优化工作. 雪球公司介绍 雪球 聪明的投资者都在这里. web 1.0:新闻资讯,股价信息,K线图 web 2.0:SNS 订阅,分享,聊天 web 3.0:移