【网络】什么是RPC?RPC与HTTP有什么关系?

news2024/11/24 7:23:36

文章目录

  • RPC是什么
  • RPC和HTTP的关系和区别
  • [附]关于REST论文中提到的"HTTP不是RPC"


重点参考

凤凰架构-远程过程调用
既然有HTTP为什么还要有RPC?


RPC是什么

RPC(Remote Procedure Call):即远程过程调用,目的是为了让计算机能够跟调用本地方法一样去调用远程方法

RPC本身并不是一个具体的协议,而是对不同应用程序间通信的一种描述,一种通信思想。它可以使用很多技术来实现,有大量不同底层实现的RPC库(如早期的DCOM、CORBA,现在的dubbo、protobuf、grpc等等)。

RPC通常是基于TCP/UDP协议的,传输效率高、可定制性强、数据包小。

以下是一个远程过程调用的核心流程。RPC包含的就是从User stubServer stub的过程,包括了打包/解包、序列化/反序列化、发送/接收等通讯细节
在这里插入图片描述


RPC和HTTP的关系和区别

很多人喜欢把RPC与HTTP作比较,因为HTTP是web领域最常用的网络通信协议,而RPC也是进行网络通信的方法,并且有一些RPC库还是基于HTTP实现的。在大多数人看来,HTTP已经是比较万能的通信协议了,于是就对RPC的定位感到捉摸不透。

正如开头所说,RPC本身并不是一个具体的协议,而是一种设计,一种通信思想,通讯协议只是其中一部分。
RPC跟HTTP不是对立面,RPC也可以使用HTTP作为通讯协议

TCP是70年代出来的协议,RPC是80年代出现的,HTTP是90年代才开始流行的。
RPC比HTTP出现的更早。一直以来,都有大量的不同底层实现的RPC库(如早期的DCOM、CORBA,现在的Thrift、Dubbo、Protobuf、gRPC等等)。

但也正因为RPC仅仅是一种思想,所以互联网厂商并没有一种统一的协议可以使用。随着Web的发展,浏览器为了能够与所有的网站服务通信,就需要一个统一的通信标准,于是HTTP就成为了这个通信标准。而且不同于RPC"面向过程"的思想,HTTP以"面向资源"的思想构建Web服务,并大获成功。

区别

  1. "服务发现"机制不同。要向某个服务器建立连接,需要知道它的ip和端口。找到服务对应的ip和端口的过程,就是服务发现。

    • HTTP 依靠DNS做服务发现。通过域名+DNS解析服务器的ip,默认80端口(如果要用其它端口,可以在服务端做反向代理)
      (由于DNS也是服务发现的一种,所以也有基于DNS做服务发现的组件,如CoreDNS)
    • RPC 一般会有中间件来保存服务的ip和端口,比如consul等"服务发现"中间件,甚至Redis等存储服务。
  2. 协议不同

    • HTTP服务基于HTTP协议,HTTP是应用层协议,是位于TCP协议之上的。相比于TCP使用起来更方便,但效率更低。
      另外,HTTP1.1之前是短连接,1.1之后默认是长连接,HTTP2.0又在前者的基础上做了很多改进,性能可能比某些RPC协议还要好。
    • RPC通常基于TCP或UDP协议,效率更高,但使用起来更复杂。
      TPC是长连接的,UDP是无连接的。
  3. 传输的内容不同

    • HTTP 的设计目的是应用于Web服务,有固定的包格式,包括消息头、消息体。消息体的数据格式以字符串、图片音频文件为主,定制性弱。虽然数据最终都是以二进制的形式传输,但HTTP是应用层协议,只能使用接口提供的的固定的这些数据类型
    • RPC 大都是基于TCP/UDP的,包格式由使用者定义,定制型更强有效数据占比更高,且存储的直接就是二进制数据,用户想要传输什么,转为字节放入即可。
  4. 应用场景不同

    • HTTP多用于B/S,RPC多用于C/S。但现在已经分的没这么清了,因为B/S和C/S在融合,很多软件同时支持多端(比如百度云盘,即支持网页端,还支持手机端和PC端)
    • 现在HTTP多用于Web服务端与客户端的通信;RPC多用于服务器各个微服务之间的通讯,以及对延迟和带宽有要求的游戏通信
    • HTTP虽然方便,但性能较低。对性能有要求时,就需要直接使用RPC实现通信目的,加快传输效率,例如分布式服务间、游戏C/S端的高效、低延迟的通信需求。

[附]关于REST论文中提到的"HTTP不是RPC"

摘自REST论文
在这里插入图片描述

如果想了解这个问题,不得不了解REST。关于REST,我在《【REST系列】详解REST架构风格》中有详细的解释

简单说。HTTP和RPC都是实现网络通信的方式,只是它们对待通信的理解方式有所不同:根据REST的思想得知,HTTP认为的通信是对资源的操作,而RPC认为的通信则是调用远程函数。

更简单地说。HTTP的设计是面向资源的,而RPC的本质是面向过程的。所以严格来说,HTTP确实不属于RPC。
平时我们只会觉得 它们都能传输我们想要传输的数据,而不会深究这些核心思想上的区别,这也无可厚非。

在REST思想中,Web通信实际上是对资源的操作。REST流行之前,Web通信还是以SOAP为主,而SOAP其实就是一个RPC的实现。从最终结果来看,HTTP"面向资源"的思想 在Web领域是成功的。

面向资源和面向过程,就像编程语言中的面向对象和面向过程。HTTP在Web领域的成功,并不能说明RPC思想不好,只能说HTTP比RPC更适合用于Web。它们各有优势,我们应当结合实际情况按需使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android中实现滑动的7种方法

Android中实现滑动的7种方法前置知识Android坐标系视图坐标系触控事件---MotionEvent获取坐标的方法实现滑动的7种方法layout方法offsetLeftAndRight()和offsetTopAndBottom()LayoutParamsscrollTo和scrollByScroller属性动画ViewDragHelper参考前置知识 Android坐标系 Andro…

【C++进阶】面向对象

程序 编写程序是为了让计算机解决现实生活中的实际问题。pascal之父、结构化程序设计先驱Niklaus Wirth提出程序 算法 数据结构。程序是完成一定功能的一些列有序指令的集合。指令 操作码 指令。将指令按一定的顺序进行整合,就形成了程序。 机器语言与汇编语言…

软件测试的案例分析 - 闰年5

文章目的 显示不同的博客能获得多少博客质量分 (这是关于博客质量分的测试 https://www.csdn.net/qc) 这个博客得了 83 分。怎么才能得到更多分数? 正文 我们谈了不少测试的名词, 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生…

Shiro学习认证和授权

Shiro学习笔记 认证 思路 获取当前的Subject,调用SecurityUtils.getSubject()方法;判断当前用户是否被认证,即是否已经登陆,调用Subject的isAuthenticated()方法进行判断;若没有认证,则把用户名和密码封…

C++11线程、互斥量以及条件变量

文章目录前言1、创建第一个线程2、线程对象的生命周期、等待和分离3、线程创建的多种方式4、互斥量4.1 独占的互斥量std::mutex4.2 递归独占互斥量recursive_mutex4.3 带超时的互斥量std::timed_mutex和std::recursive_timed_mutex4.4 std::lock_guard和std::unique_lock5、cal…

CSS常用内容总结(扫盲)

文章目录前言相关概念【了解】脚本语言什么是脚本语言脚本语言有什么特点常见的脚本语言什么是动态语言,什么是静态语言动态语言和静态语言两者之间有何区别CSSCSS是什么CSS的特点一、CSS代码怎么写基本语法规则引入方式内部样式内联样式表外部样式代码风格二、CSS的…

JavaWeb——进程详解

目录 一、操作系统 1、定义: 2、操作系统的基本功能: 二、进程 1、定义: 三、进程管理 1、PCB定义 (1)、身份标识 (2)、内存指针 (3)、文件描述符 2、操作系统…

Hadoop入门常见面试题与集群时间同步操作

目录 一,常用端口号 Hadoop3.x : Hadoop2.x: 二,常用配置文件: Hadoop3.x: Hadoop2.x: 集群时间同步: 时间服务器配置(必须root用户): (1&#xff09…

1639_perror的函数功能以及简单测试

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续分析之前的shell程序代码,看到了一个fork1的实现。 Fork之前还是看过的,但是也已经忘得差不多了,这个fork1就是fork的一种应…

4.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理

本文目录如下:一、Nacos微服务治理Nacos 下载 与 启动Spring Cloud 集成 NacosIDEA 同一个 Application 启动多次一、Nacos微服务治理 Nacos 下载 与 启动 https://github.com/alibaba/nacos/releases Nacos 下载与启动: F:\ProgramFiles\nacos\bin> .\startup…

MyBatis操作数据库

目录 MyBatis 功能架构 学习MyBatis 第一个MyBatis查询 1、创建数据库和表 2、搭建MyBatis开发环境 2.1、在项目中添加MyBatis框架 2.2、配置数据库连接信息 2.3、配置MyBatis中xml的保存路径(规则) 3、添加业务代码 3.1、创建实体类 3.2、构…

stack,queue

stack,queuestack的介绍和使用介绍使用模拟实现queue的介绍和使用介绍使用模拟实现priority_queue的介绍和使用介绍使用模拟实现容器适配器概念标准库中stack,queue的底层结构介绍deque原理缺陷deque作为stack,queue底层默认容器stack的介绍和使用 介绍 stack是适…

哪个牌子的蓝牙耳机音质好?音质比较好的蓝牙耳机排名

蓝牙耳机经过多年发展,无论是在外观设计还是性能配置上都有很大的进步,越来越多的蓝牙耳机开始注重音质表现,逐渐有HIFI音质、无损音质出现在大众视野。那么哪个牌子的蓝牙耳机音质好?接下来,我来给大家分享几款音质比…

【H2实践】之 SpringBoot 与 H2 数据交互

一、目标 本文是【H2实践】之认识 H2,【H2实践】之 SpringBoot 整合的后续。前文分别介绍了 H2 及其简单使用,并完成了 H2 与 SpringBoot 的整合。本文将紧接 【H2实践】之 SpringBoot 整合 探索实用 SpringBoot 结合 JPA 通过 web 接口操作 H2 数据库的…

Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

本次案例还是适合人文社科领域,金融或者新闻专业。本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了。 案例背景 有八个自变量,[微博平台可信度,专业性,可信赖性,转发量,…

Java对象结构与内置锁

Java对象结构与内置锁 Java内置锁的很多重要信息都存放在对象结构中 1.Java对象结构 Java对象包括三部分:对象头、实例数据和对齐字节 对象头: 第一个字段叫做Mark Word,用于存储自身运行时数据,例如GC标志位,哈希…

P1120 小木棍(搜索+剪枝)

题目链接:P1120 小木棍 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入: 9 5 2 1 5 2 1 5 2 1 样例输出: 6 分析:这道题一看数据范围就知道是搜索,但关键是需要剪枝。 首先我们求出所有木棍的长度和&am…

什么是刺猬理念

一、什么是刺猬理念刺猬理念是指把复杂的世界简化成单个有组织性的观点,一条基本原则或一个基本理念,发挥统帅和指导作用。核心是把事情简单化,把所有的挑战和进退维谷的局面压缩为简单的。二、刺猬理念的寓言故事狐狸是一种狡猾的动物&#…

Maix Bit(K210)保姆级入门上手教程---自训练模型之云端训练

Maix Bit(K210)保姆级入门上手教程系列 Maix Bit(K210)保姆级入门上手教程—环境搭建 Maix Bit(K210)保姆级入门上手教程—外设基本使用 这是K210快速上手系列文章,主要内容是,介绍…

《机器学习》基础概念之【P问题】与【NP问题】

《机器学习》基础概念之【P问题】与【NP问题】 这里写目录标题《机器学习》基础概念之【P问题】与【NP问题】一、多项式&时间复杂度1.1. 多项式1.2.时间复杂度二、P问题 & NP问题2.1. P问题2.2.NP问题2.3.举例理解NP问题-TSP旅行商推销问题三、NP-hard问题&NP-C问题…