Akka简介与实现RPC通信流程

1、akka通信:

①akka是一个通信框架,基于Actor编程模型实现,底层使用Netty来实现远程RPC通信;

②可以是单机的,也可以是分布式的;Akka中内置了许多的mailboxes;

③在akka里,Actor之间通信的唯一机制就是消息传递;

④spark1.6版本之前,spark分布式节点之间的消息传递使用的就是Akka,底层也就是actor实现的;1.6之后底层使用的netty传输。

2、Actor简介:

①Actor是用来收发消息,处理逻辑的,Actor就是通过收发消息实现并发的;

②Actor和Actor直接是可以发送消息的,Actor自己也可以给自己发送消息;

③消息是有类型的,里面封装的数据(case class);

④Actor是有生命周期的,是由ActorSystem创建的,ActorSystem负责创建、管理和监控Actors;

⑤ActorSystem是单例的(object),一个进程只要有一个即可;Actor是多例的可以创建多个实例;

⑥消息的接收者可以将消息返回给消息的发送者;

⑦会有一个Actor池,每个Actor会处理不同的事件;

⑧Actor做的事情可能会抛出异常,而它自己无法从中恢复。在这种情况下,需要再生成(created )一个新的Actor来顶替它。换句话说,这个新的Actor会忽略刚才那条消息,继续处理剩余的消息。这些也被称为指令(Directive)。

3、RPC通信的简单流程:

①启动Master;Master内部启动一个定时器,用于定期检测并移除超时的Worker;

②启动所有的Worker;

③所有的Worker向Master发送请求建立连接,并向Master发送注册信息;(注册信息包括:workerId、内存、CPU等使用情况)

④Master将接受的Worker信息保存起来;

⑤Master给所有的Worker返回注册成功的消息;

⑥Worker接收到返回的信息,并且定期向Master发送心跳;

⑦Master更新心跳时间,并计算是否超时(是否需要将Worker剔除)。

注:接收到消息后,进程不会停止,一直保持连接状态。

Akka简介与实现RPC通信流程