http://note.youdao.com/share/?id=d2163a7ba8ec1ec58e64683a961c5121&type=note

RPC是OB一个比较重要的各个组件间进行通信的实现机制。最近在看clog的代码,就顺着ObCLogRpc这个类,简单总结下OB进行RPC的几种写法,主要偏重于写代码和理解已有代码,不涉及到底层的RPC实现机制。
 
曲山的OB代码导读 5.3.2节客户端部分介绍了ObRpcStub,建议先行阅读。
 
后边是当前OB实现RPC的几种典型写法:
 
客户端
ObCLogRpc、ObUpsRpcStub和ObRootRpcStub都继承自common::ObCommonRpcStub,common::ObCommonRpcStub提供一些基础的RPC实现,其继承自ObGeneralRpcStub,ObGeneralRpcStub继承自ObRpcStub,后者封装了RPC的底层实现,包括ObClientManager的一个指针类型成员rpc_frame_。
客户端实现rpc的几种典型写法如下:
1)rpc_frame_ -> send_request
典型实现参考ObCommonRpcStub :: send_log,是一个同步调用方式。
 
2)rpc_frame_ -> post_request
典型实现参考ObCLogRpc::post_log,此实现是一个异步调用方式,需要在post_request中指明接收到响应后回调使用的handler;
 
3)调用send_*_return_*函数,是个同步调用方式,具体可参见OB代码导读相关章节,举例如下:
 int ObCommonRpcStub :: renew_lease(const common::ObServer& master, const common::ObServer& slave_addr, const in t64_t timeout_us)
{
  return send_1_return_0(master, timeout_us, OB_RENEW_LEASE_REQUEST, DEFAULT_VERSION, slave_addr);
}
 
4)调用send_param_*/deserialize_result_*两个配对的宏,具体实现可参考ObGeneralRpcStub::register_server,也是一个同步调用方式。
 
其实后两者就是调用1)来完成的,这些宏会进行展开,直接传递基础数据类型或是调用输出输出参数的serialize/deserialize方法进行序列化、反序列化后传递。
 
 
服务端
服务端的调用方式都是统一的。每个RPC调用都对应一个packet_code,在server的init_func_array函数中,使用宏REGISTER_HANDLE_FUNC注册特定类型的包(也即特定类型的RPC接口)的处理函数,如上文列出的ObCommonRpcStub :: renew_lease宏,其注册方式即为在ObRootWorker类的init_func_array函数中调用:
REGISTER_HANDLE_FUNC(OB_RENEW_LEASE_REQUEST, &ObRootWorker::rt_renew_lease);
 
然后在server的handler_packet中写上此类型包是由IO线程直接处理还是交给特定的worker线程处理。
 
所有注册的处理函数接口都是一致的,接受的都是ObRequestContext& context类型的参数,表示网络包。
 
收到包后如何处理可以参见ObRootWorker::rt_renew_lease,无非就是从网络包中反序列化输入参数,根据参数调用业务逻辑进行处理,然后将结果打包使用send_response方法返回给客户端。

OceanBase RPC机制简要说明的更多相关文章

  1. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  2. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  3. 理解Android系统的进程间通信原理(二)----RPC机制

    理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...

  4. 每天收获一点点------Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  5. Hadoop的RPC机制及简单实现

    1.RPC简介 Remote Procedure Call 远程过程调用协议 RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...

  6. Hadoop2源码分析-RPC机制初识

    1.概述 上一篇博客,讲述Hadoop V2的序列化机制,这为我们学习Hadoop V2的RPC机制奠定了基础.RPC的内容涵盖的信息有点多,包含Hadoop的序列化机制,RPC,代理,NIO等.若对 ...

  7. hadoop的RPC机制 -源码分析

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...

  8. Hadoop中的RPC机制

    1.  RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI ...

  9. Hadoop的RPC机制源码分析

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...

随机推荐

  1. [Hyper-V]给Hyper-V创建两块网卡备用

    描述 给Hyper-V创建两块网卡备用 步骤: 1 打开Hyper-V,在右侧Action栏,单击Virtual Switch Manager… 2 依次选择New Virtual network s ...

  2. centos 6.5卸载Mysql

    yum remove  mysql mysql-server mysql-libs mysql-server

  3. Visual Studio Developer Assistant 3月新功能展示

    Visual Studio Developer Assistant 3月添加了以下新功能: https://visualstudiogallery.msdn.microsoft.com/a116671 ...

  4. centos6.4 64位下安装nfs文件共享系统

    不知道谁装的服务器,默认自带,以下内容摘自互联网,配置部分按教程执行成功 一.环境介绍: 服务器:centos 192.168.1.225 客户端:centos 192.168.1.226 二.安装: ...

  5. How to use kingshard building a MySQL cluster

    How to use kingshard building a MySQL cluster https://github.com/flike/kingshard/blob/master/doc/Kin ...

  6. 【仅支持移动设备】Swipe.JS轻量级移动幻灯效果

    在线演示 本地下载 请使用手机直接访问地址: 单独页面展示效果

  7. paip.php 与js 的相似性以及为什么它们这么烂还很流行。。

    paip.php 与js 的相似性以及为什么它们这么烂还很流行.. php与js异常的流行,web 90%都被他们统治了.发现了他们有意思的一些共性.. 结构一番总结,得出了它们共有的特点.特性: = ...

  8. error C3861: “LOG4CPLUS_DEBUG”: 找不到标识

    头文件#include <log4cplus/loggingmacros.h>解决问题

  9. 匿名管道读取CMD回显信息

    之前用了很坑爹的做法去读取了cmd命令的回显信息,现在发现了用匿名管道的实现方法,由于楼主没有学过Windows核心编程,找了一个代码来凑数 存下来以后研究 #include <windows. ...

  10. Jquery easyui开启行编辑模式增删改操作

    Jquery easyui开启行编辑模式增删改操作 Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </ ...