会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 Akka 使用系列之四: Future!

Akka 使用系列之四: Future

时间:2025-11-04 18:44:16 来源:益强数据堂 作者:数据库 阅读:489次

这篇文章介绍 Akka 的使用同步机制,以及 Spark 和 Akka 的系列恩怨情仇。

1. Akka 中的使用 Future

Akka 中的 Actor 发送和接收消息默认都是异步的。为了说明异步性,系列我们实行下面的使用数学老师和历史老师的 Actor:

class MathTeacherActor extends Actor with ActorLogging {     def receive = {         case "1+1等于多少?"           => {         Thread.sleep(1)         sender ! "1+1等于2"         }     } } class HistoryTeacherActor extends Actor with ActorLogging {     def receive = {         case "历史上规模***的众筹行动是什么?" => {             Thread.sleep(1)             sender ! "历史上规模***的众筹行动是 +1s"         }     } } 

如果我们在询问历史老师之后访问答案(如下面代码所示),我们发现并不能获取正确答案。系列原因就在于 Akka 是使用异步非阻塞的。

val res = historyteacher ?系列 "历史上规模***的众筹行动是什么?" println(res) 

实质上, historyteacher ? "历史上规模***的众筹行动是什么?" 返回的网站模板根本不是答案,而是使用一个 Future。在Akka中,系列 一个Future是用来获取某个并发操作的结果的数据结构。有了 Future,使用我们可以以同步(阻塞)或异步(非阻塞)的方式访问结果。下面是系列简单地以同步(阻塞)方式访问结果的示例。

class StudentActor(mathteacher:ActorRef,使用historyteacher:ActorRef)  extends Actor with ActorLogging{   def receive = {     case res:String => {         val future1 = historyteacher ? "历史上规模***的众筹行动是什么?"         val future2 = mathteacher ? "1+1等于多少?"         val res1    = Await.result(future1,10 second)         val res2    = Await.result(future2,10 second)         println(res1)         println(res2)     }  } } 

2. Akka 和 Spark

Spark 一开始使用 Akka 作为内部通信部件。在 Spark 1.3 年代,系列为了解决大块数据(如Shuffle)的使用传输问题,Spark引入了Netty通信框架。到了 Spark 1.6, Spark 可以配置使用 Akka 或者 Netty 了,这意味着 Netty 可以完全替代 Akka 了。再到 Spark 2, Spark 已经完全抛弃 Akka 了,全部使用 Netty 了。Sad。高防服务器

为什么 Spark 无情地有步骤有预谋地抛弃 Akka 呢?Spark 官方倒是给了一个说法:https://issues.apache.org/jira/browse/SPARK-5293。

A lot of Spark user applications are using (or want to use) Akka. Akka as a whole can contribute great architectural simplicity and uniformity. However, because Spark depends on Akka, it is not possible for users to rely on different versions, and we have received many requests in the past asking for help about this specific issue. For example, Spark Streaming might be used as the receiver of Akka messages - but our dependency on Akka requires the upstream Akka actors to also use the identical version of Akka.

Since our usage of Akka is limited (mainly for RPC and single-threaded event loop), we can replace it with alternative RPC implementations and a common event loop in Spark.

大意就是很多 Spark 用户希望同时使用 Spark 和 Akka ,但他们必须使用 Spark 依赖的那个版本的 Akka。Spark 主要用了 Akka 的 RPC 和 单线程 event-loop,因此 Spark 没有必要依赖完全的 Akka。最终,对 Akka 心心念念的 Spark 用 netty 实现下简易版本的 Akka。真爱啊。

3. 总结

到这里,Akka 使用系列就结束了。这个系列简单地过了一下 Akka 的基础知识,介绍其梗概。

【本文为专栏作者“李立”的原创稿件,转载请通过获取联系和授权】

戳这里,看该作者更多好文

云服务器

(责任编辑:系统运维)

推荐内容
  • 腾讯会议电脑使用技巧教程(掌握腾讯会议,提升工作效率的关键技巧)
  • 在数以亿计的网站中,我们应该抓住每一个可能带来宣传的机会,域名可以带有企业的名字,一般可以使用汉语拼音或者英语单词或者是相关缩写的形式,只要用户记住了你企业的名字,就能很容易的打出你的网站域名,同样的,记住了网站域名也能很快的记住你公司的名字。
  • 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
  • 域名不仅仅是一个简单的网站。对于有长远眼光的公司来说,在运营网站之前确定一个优秀的域名对有长远眼光的公司来说是非常重要的。这对今后的市场营销、产品营销和企业品牌建设都具有十分重要的意义。优秀的域名是企业在市场竞争中获得持久优势的利器。
  • 解决电脑上网弹出证书错误的方法(探索证书错误的原因及应对之道)
  • 4、参加域名拍卖会