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. MongoDB 基础命令使用学习记录

    1. 启动 mongod 几个常用命令说明:--dbpath : 指定数据库相关文件的存储目录 --logpath: 指定日志文件的存储目录 --port: 指定数据库的端口,默认是 27017 -- ...

  2. Try..Finally..相信自己的眼睛

    问题提出 try { return x; } finally { x = null; } 上面这段代码到底怎么执行的? try..catch..finally 介绍 在MSDN中,try..catch ...

  3. node-webkit教程(7)Platform Service之APP

    node-webkit教程(7)Platform Service之APP 文/玄魂 前言 几个月前,要开发一个简易的展示应用,要求支持离线播放(桌面应用)和在线播放(web应用). 当时第一想到的是f ...

  4. Mac下安装zshell

    Mac 下安装zshell 什么是shell 大多数命令行用户接触最多的是Bash,因为Bash是各个版本操作系统(Linux&Mac)的默认shell. 查看当前使用的shell $ ech ...

  5. grunt使用小记之开篇:grunt概述

    Grunt是什么? Grunt是一个自动化的项目构建工具.如果你需要重复的执行像压缩,编译,单元测试,代码检查以及打包发布的任务.那么你可以使用Grunt来处理这些任务,你所需要做的只是配置好Grun ...

  6. 献上两个java小算法

    直接上代码: /** * Name: 求数组中元素重复次数对多的数和重复次数 * Description: * 数组中的元素可能会重复,这个方法可以找出重复次数最多的数,同时可以返回重复了多少次. * ...

  7. jenkins2 pipeline高级

    jenkins2 pipeline里groovy的高级用法.翻译自:https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL. ...

  8. 自旋锁-SpinLock(.NET 4.0+)

    短时间锁定的情况下,自旋锁(spinlock)更快.(因为自旋锁本质上不会让线程休眠,而是一直循环尝试对资源访问,直到可用.所以自旋锁线程被阻塞时,不进行线程上下文切换,而是空转等待.对于多核CPU而 ...

  9. xdebug影响php运行速度

    我在本地wamp的环境下面加了xdebug用来调试,但是我发现wordpress运行速度好慢,所有程序运行变得也很慢.开始以为是数据库有问题,找了半天,发现把xdebug的扩展去掉,就正常了. 目前配 ...

  10. Atitit. 单点登录sso 的解决方案 总结

    Atitit.  单点登录sso 的解决方案 总结 1. 系统应用场景and SSO模式选型 2 2. 系统应用的原则与要求 2 2.1. 开发快速简单::绝大部分系统来说,开发快速简单为主 2 2. ...