zoukankan      html  css  js  c++  java
  • Spark Netty 通信框架解析

    1、RpcEndpoint: RPC端点

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

    说明:

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

    RpcEndpointRef的具体实现类是: NettyRpcEndpointRef

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

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

    3、Dispatcher:消息分发器

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

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

    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

  • 相关阅读:
    面试题58 二叉树的下一个结点
    面试题57 删除链表中重复的结点
    面试题56 链表中环的入口结点
    面试题55 字符流中第一个不重复的字符
    面试题54 表示数值的字符串
    面试题50 树中两个结点的最低公共祖先
    面试题53 正则表达式匹配
    面试题52 构建乘积数组
    面试题51 数组中重复的数字
    Qt链接库出错version Qt_5 not defined
  • 原文地址:https://www.cnblogs.com/hyunbar/p/12079457.html
Copyright © 2011-2022 走看看