RPC与HTTP的关系

news2025/2/26 2:18:04

首选理清楚关系

RPC与HTTP是两个不同维度的东西

HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议,是一种传输协议,平时通过浏览器浏览网页网页,用到的就是 HTTP 协议。

RPCRemote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式

RPC这种调用方式,主要有两部分组成

  1. 传输协议
  2. 序列化方式

传输协议有多种,比如HTTP协议、自研协议等。

序列化方式有很多种,比如二进制流,JSON,XML等

所以HTTP协议只是RPC中传输协议中的一种

如果传输协议与序列化方式选择HTTP与JSON,只要封装的好,也能实现这个远程调用,也能称之为RPC。

只不过早期的RPC因为传输效率的原因,大多没有选择HTTP与JSON,而是自研协议与二进制传输。

网上区分RPC与HTTP的文章太多了,我也没必要重复,所以我提供一种新的角度,就是根据历史的发展进行解释。

历史发展

早期互联网,大多是C/S架构,并且不需要对外开发API,仅自己内部调用(中国互联网对外开放事件:3Q大战),并且大家的带宽还很低,此时的HTTP协议还是1.0(1.0传输效率低,具体为什么,后面会讲)。

基于以上背景,当时需要一种高效率的传输方式,并且不需要考虑兼容性。

所以在传输协议的选择上,基于TCP的自研协议的RPC就应运而生了。

也是因为上述相同的历史背景,所以当时传输信息的序列化方式不是现在流行的JSON或者XML,而是二进制流,因为体积更小,传输效率更高。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内部系统

但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;

其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

RPC额外优势

一般RPC框架,不仅仅有传输功能,还添加了很多其他功能,比如服务发现、负载均衡、链路追踪、限流降级等等。比如这里的Dubbo

在这里插入图片描述

为什么不直接使用TCP协议?

这里就不赘述,简单说TCP协议有自身的问题,比如粘包问题等,直接使用会有问题,所以都是基于TCP的自研协议。

RPC 协议 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/

HTTP协议为什么效率低?

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。

在这里插入图片描述

HTTP请求报文

在这里插入图片描述

这里可以看出,HTTP协议为了传输内容,前后增加了很多“冗余”的字段,当然这里的“冗余”是为了通用性与兼容性,毕竟HTTP协议要兼容大多数不同的浏览器与不同的设备。

但是如果不需要考虑兼容性,只针对具体的设备,那就是真冗余了

为什么现在用了HTTP协议?

现在很多是直接使用HTTP协议,并且现在很多RPC框架也是使用的HTTP协议,原因如下

  • 因为HTTP也一直在升级,也优化了性能
  • 网友的带宽也在提升,对性能要求没这么高了
  • 兼容性,之前接口仅需支持单个设备,现在需要支持多设备了,而HTTP的兼容性是最好的,几乎所有设备都会支持
  • 成本问题:自研也需要开发成本,还要考虑兼容性。

基于以上原因,如果对性能没有极致要求,没必要自研协议,直接使用HTTP协议

总结

RPCRemote Procedure Call),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式,只要能够实现这种调用方式都可以称为RPC

实现RPC有两个核心点,传输协议序列化方式,而HTTP只是传输协议中的一种。

参考

RPC 协议 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/

既然有 HTTP 协议,为什么还要有 RPC?

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

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

相关文章

全能数字音乐工作站(DAW)编曲FL Studio21.2.0官方中文版

FL Studio21.2.0官方中文版重磅发布纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换!Mac版新增对苹果M2/1家族芯片原生支持。全能数字音乐工作站(DAW)编曲、剪辑、录音、混音,26余年的技术积…

LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字

目录 88合并两个有序数组 1、题目要求 2、解题思路 (1)、暴力解法: (2)、双指针,使用第三数组的解法: 3、代码展示 (1)、暴力解法: (2&am…

ITSource 分享 第6期【网址云收藏系统】

项目介绍 本期给大家介绍一个 网址云收藏系统.。 你是否因为上网过程中收藏了很多网址找不到而发愁,如果浏览器没有登录账号开启同步的情况下,换个电脑,换个浏览器,以前收藏的网址就找不到了。 本期给大家推荐一个可以在线随时随地…

jmeter BeanShell预处理程序:报错Error invoking bsh method: eval...

1、jmeter运行报错: ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: " . . . Encountered "" at line 13, column 23. WARN o.a.j.m.BeanShellPreProcessor: Problem in BeanShell scri…

[毕设记录]@学术技能积累:学位论文查询与下载

文章目录 ProQuest国外学位论文中国集团全文检索平台OATD.org(Open Access Theses and Dissertations)DART-EuropeTUDelft 在上一篇blog里面看的那些论文,感觉看起来收获太小了… 不如去看硕士或者博士的学位论文 于是我先去调研一下哪里方便…

如何将SAP数据集成到任意云平台

十年前就在使用SAP的客户询问我当时突然出现的新事物:大数据。五年前,变成了数据湖和机器学习。现在一切都是关于数据集成,当然还有人工智能。有时处理数据的基本方法已经改变或者发展。有时只是名字的改变。例如,在过去十年中&am…

测试大佬的压箱绝技:教你app 自动化测试如何实现多设备并发

appiumpython appiumpython 实现单设备的 app 自动化测试 启动 appium server,占用端口 4723 电脑与一个设备连接,通过 adb devices 获取已连接的设备 在 python 代码当中,编写启动参数,通过 pytest 编写测试用例,来…

代码审计-锐捷EG易网关 cli.php 远程命令执行

首先登录到后台中(可以组合 锐捷EG易网关 管理员账号密码泄露漏洞) 关键部分代码为 使用 exec 函数执行传递的命令 构造payload: /cli.php?ashell notdelaytrue&commandid漏洞证明: 文笔生疏,措辞浅薄,望各位大佬不吝赐教…

【C语言】内存的动态分配与释放

🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 ​ 目录 什么是内存的动态分配? 内存动态分配函数 🎏malloc() 🎏calloc() 🎏realloc() 动态内存释放函数 🎏free() 常见的…

轻量封装WebGPU渲染系统示例<5>-多重纹理(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiTexturedCube.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …

【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析

【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析 1 题目 2023 年MathorCup 高校数学建模挑战赛——大数据竞赛赛道B:电商零售商家需求预测及库存优化问题电商平台存在着上千个商家,他们会将商品货物放在电商配套的仓库…

ChineseChess1 2023.10.29

中国象棋残局 中国象棋残局模拟器ChineseChess1 2023.10.29 原来圈粉丝,钓鱼,只要不要脸就OK!!

洛谷趣题【过河卒】参考题解

背景 今天逛洛谷才注意到这道题,原题连接【P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)】 对于爱下棋的我来说,当然是必刷之题。 题意 小卒起始点在左上角(0,0)处,我们的程序将接收两个坐标&#xff1…

解决历史图片创建时间错误(批量修改文件创建时间)

最近在整理历史文件,发现很多历史图片,截图,微信拍照等途径创建的图片没有创建时间和修改时间,导致在相册时间轴错误。集中出现在整理的当天。 这些图片基本在文件名都含有创建时间,大多格式如下: 对于其中…

集成Swagger

基于knife4j集成swagger 集成的步骤 1添加依赖 2配置包扫描 3给每个Controller配置API 4给每个方法&#xff08;接口&#xff09;配置入参、返回值的说明 5针对入参的实体、返回类型VO做配置 添加依赖 <dependency><groupId>com.github.xiaoymin</groupId…

web前端JS基础-----制作进度条

1&#xff0c;参考代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><progress id"pro" max"100" value"0"></progress><scrip…

hive 函数使用详解

一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,也陆续出现了很多函数,以满足日常数据查询与分析的各种场景。 二、hive 函…

阻塞队列.

目录 ♫什么是阻塞队列 ♫什么是生产-消费者模式 ♫实现一个阻塞队列 ♫BlockingQueue ♫什么是阻塞队列 阻塞队列是一种特殊的队列&#xff0c;它除了具备队列的先进先出的特点外&#xff0c;还具有以下特点&#xff1a; ♩.如果队列为空时&#xff0c;执行出队列操作&#xf…

设计模式:责任链模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《享元模式》 下一篇《解释器模式》 简介&#xff1a; 责任链模式&#xff0c;它是一种行为型设计模式&#xff0c;它将许多对象连接起来形成一条链&#xff0c;每个对象处理不同的请求&#xff0c…

腾讯云轻量应用服务器地域怎么选择比较好?

腾讯云轻量应用服务器地域怎么选比较好?腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置&#xff0c;如上海、广州和北京等地域&#xff0c;如何选择地域&#xff1f;腾讯云百科txybk.com关于地域的选择建议就近原则&#xff0c;用户距离轻量服务器地域越近&am…