1. 什么是RPC?
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。在OSI网络通信模型中,RPC跨域了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

2. RPC架构
一个完整的RPC架构里面包含了四个核心的组件,分别是Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。
(1)客户端(Client),服务的调用方
(2)客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方.
(3)服务端(Server),真正的服务提供者.
(4)服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法.

3. RPC的调用过程:

(1) 客户端(client)以本地调用方式(即以接口的方式)调用服务;
(2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);
(3) 客户端通过sockets将消息发送到服务端;
(4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);
(5) 服务端存根( server stub)根据解码结果调用本地的服务;
(6) 本地服务执行并将结果返回给服务端存根( server stub);
(7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);
(8) 服务端(server)通过sockets将消息发送到客户端;
(9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);
(10) 客户端(client)得到最终结果。
RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。
注意:无论是何种类型的数据,最终都需要转换成二进制流在网络上进行传输,数据的发送方需要将对象转换为二进制流,而数据的接收方则需要把二进制流再恢复为对象。

注意: RPC存根的实现方式: 代理

  1. 自定义的远程调用框架图:

    rpc-sample-client相当于client-functions,通过接口方法发起请求;而rpc-client相当于client-stub,负责把方法和参数序列化并发送给查找到的服务器。

rpc-server相当于server stub,负责把客户端发送过来的消息反序列化,并通过反射调用本地服务,再把本地服务返回的结果序列化发送给客户端;

rpc-sample-server则相当于server-functions,提供本地服务并返回得出的结果给rpc-server。

rpc-client等待接收rpc-server返回的结果,并将结果反序列化,再把反序列化最终得到的结果返回给rpc-sample-client。

rpc-common提供基于netty的序列化与反序列化方法,并封装rpc请求和rpc响应,序列化和反序列的对象就是封装好的RpcRequest和RpcResponse。

rpc-registry则是基于zookeeper设计的分布式服务器动态上下线通知的应用程序,通过rpc-registry可以查找服务器或者注册服务器,用于均衡负载。

rpc-client与rpc-server之间的通信是基于netty的,netty底层也是sockets设计,但是效率比sockets高。

1. RPC原理解析相关推荐

  1. 深度解析xxl-rpc之RPC原理

    一.什么是RPC? RPC(remote process  call),中文是远程过程调用的意思.怎么理解这个远程过程调用呢?可以这样理解,可以与本地的过程调用对比下,本地过程调用,也就是调用函数或者 ...

  2. 代理模式的原理解析入门

    什么是代理模式? 它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能. 我们通过一个简单的例子来解释一下这段话. 这个例子来自我们在第 25.26.39.40 节中讲的性能 ...

  3. 【Hadoop】HDFS操作、数据上传与下载原理解析、高级特性及底层原理

    HDFS操作.数据上传与下载原理解析.高级特性及底层原理 1 HDFS操作 1.1 Web Console网页工具 1.2 命令行 1.2.1 普通的操作命令 1.2.2 管理员命令 1.3 Java ...

  4. RPC原理(1)之深入RPC原理简介

    一.RPC调用原理图 下面这张图是我们微服务一次Http调用请求图: 首先在请求的过程中我们知道是有三次握手,四次挥手的流程,具体流程如下: 1.浏览器请求服务器(订单服务),请求建立连接,首先客户端 ...

  5. 湖仓一体,Hologres加速云数据湖DLF技术原理解析

    Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时 ...

  6. 湖仓一体,Hologres加速云数据湖DLF原理解析

    本期我们将带来Hologres高性能分析引擎加速查询云数据湖DLF的技术原理解析. 随着云服务被接受的程度不断提升,云用户日益愿意将其收集的数据存储在低成本的对象存储里,比如OSS,S3等.与此同时, ...

  7. Android插件化之DroidPlugin原理解析

    文章目录 DroidPlugin原理解析 插件包安装 插件包解析和加载 插件Activity启动解析 插件service启动分析 插件receiver分析 插件provider分析 插件加载独立性 插 ...

  8. 时序数据库-2-[IoTDB]的原理解析

    清华自研时间序列数据库Apache IoTDB原理解析 时序数据库 Apache-IoTDB 源码解析之前言(一) 时序数据库 Apache-IoTDB 源码解析之系统架构(二) 时序数据库 Apac ...

  9. Spark Shuffle原理解析

    Spark Shuffle原理解析 一:到底什么是Shuffle? Shuffle中文翻译为"洗牌",需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节 ...

最新文章

  1. index.php.前端控制器,前端控制器 - Symfony开源 - Symfony中国
  2. MySQL Cluster集群配置方案
  3. 使用 Maven 执行 java main class(java应用程序)
  4. java中断一个线程
  5. 设计模式学习笔记十:单例模式(Singleton Pattern)
  6. 2019你还没搭建个人博客吗?进来看看
  7. Python数据分析之pandas入门
  8. Ubuntu18.04 关于使用vnc的踩坑
  9. Linux机器件拷贝文件
  10. (数据库系统概论|王珊)第九章关系查询处理和关系优化-第一节:查询处理
  11. bzoj1500: [NOI2005]维修数列
  12. Python项目实践:国家财政数据趋势演算
  13. Flink的累加器和广播变量、广播流、分布式缓存
  14. python json转csv_python – 如何将JSON转换为CSV?
  15. eclipse测试java程序_java-同一项目中的Eclipse junit测试
  16. paip.设置自定义404不起作用解决.txt
  17. PyTorch源码解读之torch.utils.data.DataLoader
  18. 查理·芒格:投资与人生皆是自我修行-1
  19. java工作日志,如何写工作日志
  20. FOC——18.单片机CPU内核框图

热门文章

  1. java实现踢下线用户_java中如何踢人下线?封禁某个账号后使其会话立即掉线!...
  2. windowsSP2 下 用 FINDPASS 截取密码
  3. Linux-Centos设置Redis自启及关闭Nginx自启
  4. 配置文件夹右键菜单的打开方式
  5. ajax 辅助方法区别,jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
  6. Socket 编程原理
  7. mysql federated 效率,MySQL中的FEDERATED引擎
  8. PS教程:如何在 Photoshop 中制作流行艺术效果
  9. 有关MYSQL绿色包的安装方法
  10. 非结构化数据存储方案