浅谈RPC的理解

浅谈RPC的理解

前言

本文中部分知识涉及Dubbo,需要对Dubbo有一定的理解,且对源码有一定了解

如果不了解,可以参考学习我之前的文章:

  1. 浅谈Spring整合Dubbo源码(@Service和@Reference注解部分)

  2. 浅谈Dubbo服务导出到注册中心源码

  3. 浅谈Dubbo服务引入源码(@ReferenceBean依赖注入)

  4. 浅谈Dubbo核心概念及架构流程



RPC体系

RPC与HTTP协议都属于网络协议中的应用层,HTTP协议侧重描述通信层面的约定,而RPC更加侧重于远程过程调用的目的(可以使程序能在网络上请求远程计算机上的服务,而无须关心底层网络技术细节),即两者并不冲突,比如RPC框架的实现之一Feign,其底层通信就是使用的HttpClient。

基于RPC需要具备的各项能力,可以对整个RPC的调用过程进行分层,将各项能力分布在各层中,最终达成我们的目的。下图为RPC各层的梳理,同时将开源的Dubbo框架架构图中的各层RPC的各层进行了映射:

请添加图片描述

整体执行流程如下:

  1. 客户端调用:客户端通过本地调用远程过程的方式,就像调用本地方法一样;
  2. 数据序列化:客户端将调用的参数序列化为可以在网络上传输的格式,如二进制流或 JSON;
  3. 网络传输:序列化后的数据通过网络传输到远程服务器;
  4. 数据反序列化:服务器接收到数据后,将其反序列化为原始参数;
  5. 服务端执行:服务器执行相应的过程,并将结果返回;
  6. 结果序列化:服务器将执行结果序列化为可以在网络上传输的格式;
  7. 网络传输:序列化后的结果通过网络传输到客户端;
  8. 结果反序列化:客户端接收到结果后,将其反序列化为最终的返回值;
  9. 客户端接收结果:客户端获得最终的执行结果,完成整个过程。


Dubbo架构

在了解了RPC体系以后,再看Dubbo的架构图,尽管图中节点很多,但是我们可以很方便的抓住核心点(起码我很有感觉),即明白这是哪一层,这一层要干嘛,相关节点的大致作用。

请添加图片描述



最后

我们可以明确,类比于其他RPC框架,它们面对的问题、以及要解决的问题都是相同的,只不过不同的框架相关的实现有差异,仅此而已。

同时我们不难发现,不同RPC框架经常说的性能问题,其本质也就是①Message Protocol(消息管理层)、②Transfer/Network Protocol(传输管理层)、③描述后的URL(描述服务的协议方式)、④Registration Center(注册中心)之间的差异。

相关推荐

  1. RPC调用

    2024-03-18 06:46:01       37 阅读
  2. 对线程理解

    2024-03-18 06:46:01       14 阅读
  3. Vue2与Vue3双向绑定原理理解

    2024-03-18 06:46:01       26 阅读
  4. 基于中台模式大数据生态体系理解

    2024-03-18 06:46:01       27 阅读
  5. 封装

    2024-03-18 06:46:01       40 阅读
  6. IDEA目录

    2024-03-18 06:46:01       28 阅读
  7. MATLAB安装

    2024-03-18 06:46:01       21 阅读
  8. 对ASP.NET MVC(微软Web开发框架)理解

    2024-03-18 06:46:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 06:46:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 06:46:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 06:46:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 06:46:01       18 阅读

热门阅读

  1. 大语言模型相关工具使用链接

    2024-03-18 06:46:01       21 阅读
  2. LLaMA-2 简介:开源大型语言模型的新篇章

    2024-03-18 06:46:01       19 阅读
  3. Linux初级知识大全(一)

    2024-03-18 06:46:01       21 阅读
  4. Spark 用AnyFunSuite单元测试Scala详细教程

    2024-03-18 06:46:01       17 阅读
  5. 如何杀死服务器出现的僵尸进程

    2024-03-18 06:46:01       23 阅读
  6. ChatGPT:论文写作的新潮解决方案

    2024-03-18 06:46:01       20 阅读
  7. Linux TCP参数——tcp_abort_on_overflow

    2024-03-18 06:46:01       21 阅读
  8. 系统开发中的快速测试与调试策略

    2024-03-18 06:46:01       22 阅读