Spark的PRC是通过Akka类库实现的,Akka由scala开发,基于Actor开发模型实现
Akka-高可靠、高性能、可扩展
轻松实现分布式RPC的功能
Actor为Akka的核心,是一个封装了状态和行为的对象,Actor之间可通过交换信息的方式进行通信
每个Actor都有自己的Mailbox。通过Actor能简化锁和线程管理
特性:
1.提供了高级抽闲,简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发
2.提供了异步非阻塞、高性能的事件驱动编程模型
3.超级轻量级事件处理(每GB内存有几百万Actor)
ActorSystem
在Akka中,ActorSystem是一个重量级的结构
需要多个线程分配。所以通常ActorSystem是一个单例对象
可以通过这个ActorSystem创建很多Actor
Actor
在Akka中,Actor负责通信,其中包含一些重要的生命周期方法:
1.preStart()方法:该方法在Actor对象构造方法执行后执行,整个Actor生命周期中仅执行一次
2.receive()方法:该方法在Actor的preStart()方法执行完后执行,用于接收消息,会反复执行
案列
用Akka实现RPC通信
实现Spark集群间通信使用
1.Worker中创建ActorSystem–>创建Actor(Worker)。Worker请求的参数封装、序列化发送给Master
2.Masker中也有ActorSystem–>创建Actor(Master)。Master接受Worker的参数、反序列化,模式匹配(因为可能不单单接受了这个Worker的序列,所以要模式匹配)
3.Master讲执行后的结果发送给Worker