RPC与HTTP的关系

首选理清楚关系

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.mzph.cn/news/125727.shtml

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

相关文章

10.2 一文读懂SPI与DSPI、QSPI、OSPI关系与异同

本文主要内容: 1 SPI与DSPI、QSPI、OSPI定义 2 SPI与xSPI对比 3 常用的nor flash 4 驱动架构 5 xSPI镜像烧录 1 SPI与DSPI、QSPI、OSPI定义 1)标准SPI 通过说的SPI,称为标准SPI,是一种串行外设接口,通过有4根线控制,CLK、CS、MISO、MOSI,可工作于4种模式,一般是主机…

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动(附项目源码)

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来,站在城外的人想冲进去,婚姻也罢,事业也罢,人生的欲望大都如此…

三.RocketMQ单机安装及集群搭建

RocketMQ单机安装及集群搭建 一:安装环境1.软硬件要求2.下载RocketMQ 二.安装单机MQ1.上传并解压2.目录介绍3.修改MQ启动时初始JVM内存4.启动NameServer与Broker5.测试RocketMQ 三.RocketMQ集群搭建1.集群概念特点2.集群模式分类3.集群工作流程4.双主双从集群搭建4.…

【C++】C++11常见特性

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

13.测试

13.1测试基础概念 13.2测试用例 13.3测试用例进阶 13.4web自动化测试(Selenium3Java) 13.5 Junit5(针对Java的单元测试框架) 13.6性能测试理论 13.7性能测试工具(LoadRunner)(简单扫盲)

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(11)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(10) 上一回弄清楚了drivers/gpu/drm/drm_framebuffer.c中的framebuffer_check函数中for (i = 0; i < info->num_planes; i++)中的前三句变量赋值代码,本回继续往下进行解析。为了便于理解,再次贴…

Python库学习(十一):数据分析Pandas[上篇]

1.介绍 1.1 Pandas是什么? Pandas是一个基于NumPy的分析结构化数据的工具集&#xff0c;NumPy为其提供了高性能的数据处理能力。Pandas被普遍用于数据挖掘和数据分析&#xff0c;同时也提供数据清洗、数据I/O、数据可视化等辅助功能。 Github_Star 40k : https://github.com/…

SPSS两独立样本t检验

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

残缺的棋盘-分治法【java】

题目描述&#xff1a; 使用分治法求解棋盘覆盖问题。 棋盘覆盖问题的描述&#xff1a; 残缺位置所在的四种不同情况&#xff1a; /*** 二分法不相似情况&#xff1a;残缺棋盘* by* 小俱的一步步*/ public class CanquedeQP {private int size;private int[][] board;//所使…

宝塔安装mongodb插件失败的解决办法

安装时始终不成功。 进入控制台进行安装 /www/server/php/71# pecl install mongodb WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update pecl/mongodb requires PHP (version > 7.2.0, …

持续集成部署-k8s-部署利器-Helm

这里写目录标题 1. Helm 是什么?2. 快速安装 Helm2.1 前置条件2.2 Helm 版本与 K8s 版本对应关系2.3 离线安装 Helm3. Helm 常用命令1. Helm 是什么? Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级…

太极培训机构展示服务预约小程序的作用如何

太极是适合男女老幼的&#xff0c;很多地方也有相关的学校或培训机构&#xff0c;由于受众广且不太受地域影响&#xff0c;因此对培训机构来说&#xff0c;除了线下经营外&#xff0c;线上宣传、学员获取和发展也不可少。 接下来让我们看下通过【雨科】平台制作太极教培服务预…

OpenHarmony状态变量更改通知:@Watch装饰器

Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 说明&#xff1a; 从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 概述 Watch用于监听状态变量的变化&#xff0c;当状态变量变…

WSL启动时自动启动docker服务

Windows系统的WSL&#xff0c;当windows关机再开机后&#xff0c;WSL等于是重新开机的&#xff0c;默认情况下&#xff0c;不会启动Docker服务。例如在Ubuntu 22.04中&#xff0c;需要使用命令 service docker start来启动。由于我习惯关机断电&#xff0c;因此每天开机打开WSL…

在RK3588Ubuntu中运行qtCreator报错

上一篇文章中的qt安装步骤执行完以后报错记录一下 chown lindikeji:lindikeji /usr/lib/aarch64-linux-gnu/qt5/examples -R chown: invalid user: ‘lindikeji:lindikeji’ 运行这个 老提示没有用户组&#xff0c;我就切换至管理员账户运行 chown lindikeji /usr/lib/aarch64…

Apriori算法

Apriori算法是关联规则挖掘算法&#xff0c;也是最经典的算法。 Apriori算法是一种用于挖掘数据集中频繁项集的算法&#xff0c;进而用于生成关联规则。这种算法在数据挖掘、机器学习、市场篮子分析等多个领域都有广泛的应用。 Apriori算法是为了发现事物之间的联系的算法&am…

Uni-app智慧工地可视化信息平台源码

智慧工地的核心是数字化&#xff0c;它通过传感器、监控设备、智能终端等技术手段&#xff0c;实现对工地各个环节的实时数据采集和传输&#xff0c;如环境温度、湿度、噪音等数据信息&#xff0c;将数据汇集到云端进行处理和分析&#xff0c;生成各种报表、图表和预警信息&…

可视化 | 数据可视化降维算法梳理

文章目录 &#x1f4da;数据描述&#x1f407;iris&#x1f407;MNIST &#x1f4da;PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;Kernel-PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;MDS&#x1f407;算法流程&#x1f407;图像描述 &#…

《微聊》JMeter性能测试报告

文章目录 准备工作JMeter准备工作本地配置代理 测试规划测试方向预期方向异常处理 压力测试录制注册功能压力注册功能压力脚本录制录制功能压力测试脚本完善注册功能压力测试结果 登录功能压力录制登录功能压力测试脚本构造压力测试数据完善登录功能性能测试脚本登录功能压力测…

13年测试老鸟,软件测试经验总结分享,这几年你走了多少坑...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试阶段划分 …