1、RpcEndpoint: RPC端点

Spark针对每个节点(Client、Master、Worker)都称之为一个RpcEndpoint,且都实现RpcEndpoint接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果需要发送(询问)则内部调用Dispatcher的对应方法

说明:

  • RpcEndpoint 用来接收消息
  • RpcEndpointRef 用来发送消息

RpcEndpointRef的具体实现类是: NettyRpcEndpointRef

2、RpcEnv:Rpc上下文(Rpc环境)

每个RpcEndpoint运行时依赖的上下文环境称为 RpcEnv

3、Dispatcher:消息分发器

PC 端点需要发送消息或者从远程 RPC 端点接收到的消息,分发至对应的指令收件箱/发件箱

  • 如果指令接收方是自己则存入收件箱
  • 如果指令接收方不是自己则放入发件箱
 // class NettyRpcEnv
private[netty] def send(message: RequestMessage): Unit = {
// 获取接收者地址信息
val remoteAddr = message.receiver.address
if (remoteAddr == address) {
// Message to a local RPC endpoint.
// 把消息发送到本地的 RPC 端点 (发送到收件箱)
try {
dispatcher.postOneWayMessage(message)
} catch {
case e: RpcEnvStoppedException => logWarning(e.getMessage)
}
} else {
// Message to a remote RPC endpoint.
// 把消息发送到远程的 RPC 端点. (发送到发件箱)
postToOutbox(message.receiver, OneWayOutboxMessage(serialize(message)))
}
}

4、Inbox:指令消息收件箱

一个本地 RpcEndpoint 对应一个收件箱

5、RpcEndpointRef:RpcEndpointRef 是对远程 RpcEndpoint 的一个引用

当我们需要向一个具体的 RpcEndpoint 发送消息时,一般我们需要获取到该RpcEndpoint 的引用,然后通过该引用发送消息

6、OutBox:指令消息发件箱

对于当前 RpcEndpoint 来说,一个目标 RpcEndpoint 对应一个当前的发件箱,如果向多个目标 RpcEndpoint 发送信息,则有当前会有多个 OutBox

当消息放入 Outbox 后,紧接着通过 TransportClient 将消息发送出去。

消息放入发件箱以及发送过程是在同一个线程中进行

7、RpcAddress:表示远程的RpcEndpointRef的地址,Host + Port。

8、TransportClient:Netty通信客户端

一个 OutBox 对应一个 TransportClient,TransportClient 不断轮询OutBox,根据 OutBox 消息的 receiver 信息,请求对应的远程 TransportServer

最新文章

  1. SQLSERVER系统视图,系统表,sys.sql_modules视图
  2. C++ 使用SQLite
  3. 论文笔记之:Deep Attention Recurrent Q-Network
  4. 转:DateTime的灵活运用
  5. oracle删掉重复数据的语法
  6. c# 与 winform 界面开发
  7. iOS触摸事件处理--备用
  8. silverlight 双坐标轴
  9. kinect for windows - DepthBasics-D2D详解之三
  10. Advanced Installer 制作.NetWeb部署安装包
  11. mysql故障解决笔记
  12. set排序(个人模版)
  13. Java核心-多线程-并发控制器-CountDownLatch倒数闩
  14. 【bzoj 3786】星系探索
  15. InnoDB中锁的查看
  16. 二、认识Xcode(第一个工程:Hello world)
  17. flex 上下div固定, 中间div自适应
  18. Graylog日志管理系统---搜索查询方法使用简介
  19. vue中使用better-scroll实现滑动效果
  20. KStudio window上编译uclinux

热门文章

  1. Docker(六):Dockerfile命令详解
  2. Elasticsearch:aggregation介绍
  3. HTML5测试(二)
  4. 一些 sql 调优的总结
  5. latex beamer技巧
  6. sh_04_累加求和
  7. 【C++】关键字struct
  8. 第三周syh
  9. JSP 不能解析EL表达式的解决办法
  10. [ git ] eclipse如何与git 配合工作。