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剔除)。
注:接收到消息后,进程不会停止,一直保持连接状态。