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

news2024/10/2 22:21:50

HTTP和RPC

什么是HTTP

HTTP协议(Hyper Text Transfer Protocol),又叫做超文本传输协议。平时上网在浏览器上敲个网址就能访问网页,这里用到的就是HTTP协议。

什么是RPC

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

像之前的单体时代,我们的 service 调用就是自己实现的方法,是本地进程内的调用。

public User getUserById(Long id) {
	return userDao.getUserById(id); // 这叫本地调用
}

现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。

但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种

public User getUserById(Long id) {
    return userConsumer.getUserById(id); // 远程调用
}

我们像调用本地方法那样去调用它,屏蔽掉一些网络细节,这样用起来岂不是很方便。

值得注意的是,虽然大部分RPC协议底层使用TCP,但实际上它们不一定非得使用TCP,改用UDP或者HTTP,其实也可以做到类似的功能。

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

RPC 调用使用的场景更多的公司内部的多个服务之间的通信。

服务的拆分独立部署,那服务间的调用就必然需要网络通信,用 Http的方式 调用当然可行,但是比较麻烦。

想要服务被拆分了但是使用起来还是和之前本地调用一样方便,所以就出现了 RPC 框架,来屏蔽这些底层调用细节,使得我们编码上还是和之前本地调用相差不多。

HTTP 协议比较的冗余,RPC 都是内部调用所以不需要太考虑通用性,只要公司内部保持格式统一即可。

HTTP和RPC有什么区别

我们来看看RPC和HTTP区别比较明显的几个点。

服务发现

首先要向某个服务器发起请求,你得先建立连接,而建立连接的前提是,你得知道IP地址和端口。这个找到服务对应的IP端口的过程,其实就是服务发现

HTTP中,你知道服务的域名,就可以通过DNS服务去解析得到它背后的IP地址。

RPC的话,就有些区别,一般会有专门的中间服务去保存服务名和IP信息,比如consul。想要访问某个服务,就去这些中间服务去获得IP和端口信息。

底层连接形式

以主流的HTTP1.1协议为例,其默认在建立底层TCP连接之后会一直保持这个连接(keep alive),之后的请求和响应都会复用这条连接。

RPC,也跟HTTP类似,也是通过建立TCP长链接进行数据交互,但不同的地方在于,RPC协议一般还会再建个连接池,在请求量大的时候,建立多条连接放在池内,要发数据的时候就从池里取一条连接出来,用完放回去,下次再复用,可以说非常环保。

由于连接池有利于提升网络请求性能,所以不少编程语言的网络库里都会给HTTP加个连接池,比如go就是这么干的。这一块两者也没太大区别。

传输的内容

基于TCP传输的消息:header是用于标记一些特殊信息、body则是放我们真正需要传输的内容。

可以看到像header里的很多信息,其实如果我们约定好之后,就不用每次都传输了,比如"content-type"这个字段。

RPC,因为它定制化程度更高,可以采用体积更小的protobuf或其他序列化协议去保存结构体数据,同时也不需要像HTTP那样考虑各种浏览器行为,比如302重定向跳转什么的。因此性能也会更好一些。

HTTP原理

RPC原理

扩展

HTTP2.0在HTTP1.1的基础上做了优化,性能可能比很多RPC协议都要好。

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

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

相关文章

详解Vision Transformer中的Encoder

一.Transformer架构 左半边是Encoder,右半边是Decoder。 二.Vision Transformer Vision Transformer取了Transformer的左半边。包含 Input EmbeddingPositional Encoding多头注意力机制 Add & Norm(前馈网络)Feed Forward Add & Norm 2.1 Input Embe…

Python 完美解决 Import “模块” could not be resolved ...

首先扩展安装Python插件 Ctrl Shift P,在打开的输入框中输入 Python: Select Interpreter 搜索,选择 Python 解析器。 选好解析器后,就可以直接在 VS Code 里运行(快捷键 Ctrl F5)或调试(快捷键 F5&…

打造高效等级查询系统

在现代教育体系中,考试等级查询系统是学生、家长和校园必不可少的工具。易查分是一款功能强大、易于使用的在线成绩查询平台,可以帮助学生和家长方便查询学生的考试成绩和等级,了解学习情况,从而更好的制定学习计划和提供必要的支…

leetcode(力扣):203移除链表元素 leetcode(力扣):206反转链表 leetcode(力扣):876.链表的中间结点多种解法

目录 203.移除链表元素 解法一:将目标元素前一个元素存放地址改为下一元素地址 解法二:遍历原链表,把不是val的节点拿出来进行尾插到新链表​编辑 解法三:有哨兵位解法->头节点不存储有效数据​编辑 206.反转链表 方法一…

一次说清楚BCD编码

背景 在银行报文中,有很多用到BCD编码的地方,BCD编码和常见的二进制编码或者ASCII编码又有区别,所以很容易搞错,弄错概念,下面笔者就一次把BCD编码讲清楚。 一,概念 1,BCD编码,…

vue开发调试

1、调试方式 1.1 为什么调试 当遇到应用逻辑出现错误,但又无法准确定位的时候,同后台项目开发一样,可以在JS实现的应用逻辑中设置断点,并进行单步、进入方法内、跳出方法等调试,从而准确定位问题根源。 1.2 调试方法…

NC 添加IRule 后置前置规则

1、在保存后触发后置规则,找到保存的规则,在里面进行添加后置规则。 编写自己的规则,通过 CompareAroundProcesser 《AggCLMasterVo》 processor 的processor.addAfterRule(rule); 方法进行后置规则添加 Cl_SAVE_IRule : 实现 IR…

【API 管理】什么是 API 管理,为什么它很重要?

当今复杂的数字生态系统由许多相互关联的部分组成。API 作为看门人和连接器在其中发挥着关键作用——提供了许多最终用户甚至没有注意到的自动化机会和效率。 企业密切关注 API。它们对于应用程序、数据和各种客户交互的功能至关重要。 这使得 API 管理成为几乎每个部门的组织…

[计算机入门] 搜索文件

3.7 搜索文件 随着计算机的使用,里面存放的资料会越来越多,有些文件我们可能不记得存放在哪里了,这个时候就可以通过计算机自带的搜索功能进行搜索。 1、点击任务栏中的放大镜图标: 2、在弹出的窗口下方输入要查询的文件名&…

华为云云服务器评测|详解 Nacos 安装部署

环境配置 服务器云耀云服务器L操作系统CentOS 7.9 64bit | 公共镜像JDK64 bit JDK 1.8MavenMaven 3.2.xnacos-server2.2.3 下载地址 官方githubRelease 2.2.3 (May 25th, 2023) alibaba/nacos GitHub百度网盘链接:https://pan.baidu.com/s/1K8UE6iJL2ZnosUY83b…

案例聚焦:F5怎么样提升游戏玩家体验?

对手机游戏市场有过了解的小伙伴,定然对Deltatech Gaming Limited这个公司不会陌生。作为印度在线游戏和娱乐行业的领跑者,两个最受欢迎的多人游戏应用分别为多人游戏的 “Addagames” 和扑克类游戏 “Adda52” ,它们会定期举办在线联赛。而这…

【Apollo】Apollo的入门介绍

阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

c语言 3.0

💂 个人主页: 程序员爱摸鱼🤟 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦💅 想寻找共同成长的小伙伴,可以互粉哦 💬文章目录…

某堡垒机SQL注入漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、概述 中远麒麟堡垒机能够提供细粒度的访问控制,最大限度保护用户资…

前后端分离项目-基于springboot+vue的it职业生涯规划系统的设计与实现(内含代码+文档+报告)

it职业生涯规划系统在jdk环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务。总之,it职业生涯规划系统集中管理信息,有着保密性强,效率高,存储空间大…

xctf攻防世界 MISC之CatFlag

0x01.进入环境,下载附件 拿到的是一个无后缀的flag文件,用winhex打开后发现是奇奇怪怪的乱码,用kali的strings搜索也没找到flag情况。 0x02.问题分析 题目提示如图: 让直接cat就行,在kali中直接尝试输入&#xff1a…

百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会,可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0,发布首个大模型生态伙伴计划,而且也预告了文心大模型4.0的发布,大模型服务的成绩单也非常秀&#x…

198/213动态规划之打家劫舍系列

这两天在学习的时候,发现有个打家劫舍的题目,有意思的很,分享给大家。 基础题目 题目内容 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互…

Navicat 携手华为云 GaussDB,联合打造便捷高效的数据库开发和建模工具方案

近日, Navicat Premium 顺利完成与华为云 GaussDB的兼容性测试认证,并获得华为云授予的技术认证书。 ​ 合作 Navicat 作为华为云 GaussDB 生态工具合作伙伴以及 Gocloud 合作伙伴,此次合作旨在通过Navicat 多年来在数据库开发管理工具上的积…

uniapp 下拉框数据回显的问题

问题 : 现在是下拉框数据回显不了, 绑定的v-model 原因 : uniui 下拉框数据绑定要是 value text 这种格式的 解决办法: 将获取到的后端数据 转换为 需要的格式 ,再进行绑定 下拉框的数据 遍历