「 计算机网络 」HTTP和RPC的区别与联系

news2024/11/20 11:31:30

「 计算机网络 」HTTP和RPC的区别与联系

参考&鸣谢

HTTP 和 RPC 的区别 小十七_

Http协议和Rpc协议有什么区别? 俗人杂念

为什么要自研RPC框架?HTTP和RPC的区别 starine

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


文章目录

  • 「 计算机网络 」HTTP和RPC的区别与联系
    • 一、引言
    • 二、什么是HTTP协议
    • 三、什么是RPC协议
    • 四、HTTP和RPC的区别
      • 功能特性
      • 实现原理
      • 应用层面
    • 五、为什么许多大公司还要自研 RPC 框架?
    • 六、联系


一、引言

在微服务中,什么时候用HTTP协议?什么时候用RPC协议?

我们通常采用的原则为:向系统外部暴露采用HTTP,向系统内部暴露调用采用RPC方式。 也就是说前后端之间(网关之前)用http,各个服务之间用rpc。

那么为什么这样用呢?

有人说HTTP与RPC采取不同的协议,RPC所传输的数据是经过压缩的二进制数据,但是HTTP协议同样支持gzip压缩算法。其次,HTTP的报头包括太多无效信息,但是20-60字节的首部长度会对业务有很大影响吗?以现阶段计算机处理及网络传输速度,影响很大吗?或者能用增加服务器的方式去解决的问题,为什么很多公司要自研RPC框架呢?

首先需要解释:RPC是远程方法调用,即一个应用调用另一个应用的接口。 如何在一个应用中调用另一个应用?可以通过HTTP协议,也可以通过自定义的TCP协议实现通信。最终实质上完全相同,都是通过Socket解析调用方的参数,最后再将处理结果通过Socket传输。

HTTP 既然也是 RPC 的一种实现?为什么公司还要自研 RPC 框架?为什么他们的应用进程不之间通过HTTP协议完成交互?

最主要的原因还是RPC框架包含了重试机制,路由策略,负载均衡策略,高可用策略,流量控制策略等等。 如果应用进程之间只使用HTTP协议通信,显然是无法完成上述功能的。


二、什么是HTTP协议

HTTP(Hypertext Transfer Protocol)(超文本传输协议)是一种用于传输超媒体文档(例如HTML)的应用层协议。它是Web应用程序开发中最常用的协议之一,也是互联网上数据交换的基础。HTTP使用TCP/IP协议作为其传输层协议,主要用于Web浏览器和服务器之间的通信,以及在移动应用程序和Web服务之间进行数据交换。

HTTP 协议规定了浏览器和服务器的一种通信格式,让任何浏览器和服务器都可以以这种形式正常交流,比如:

image-20230412150248153

数据传输通常是基于 TCP/IP 协议的。但是 HTTP 本身没有规定数据传输一定要用什么协议,只要是可靠的传输其实都可以,目前基本都是基于 TCP/IP 的。


三、什么是RPC协议

RPC(远程过程调用)是一种在分布式系统中实现进程间通信(IPC)的技术。它允许程序调用另一个地址空间的函数或过程,而无需了解底层网络细节。RPC通常用于分布式系统中,其中不同的节点需要相互通信。RPC协议隐藏了网络通信的细节,使得开发者可以像调用本地函数一样调用远程函数或过程。

本地过程调用,之前在单体时代,我们服务中的 service 调用的就是我们服务中的方法

const data = await this.user.getUserList()

但是现在都是微服务的方式,根据业务模块做了不同服务的拆分,比如校验服务、基础服务等,不同的小组维护不同自己模块的服务。

不同服务之间需要进行通信,就可以使用 rpc 的方式

const data = await userRpc.getUserList()

四、HTTP和RPC的区别

RPC主要用于系统内部服务调用,传输效率高(基于TCP,报文小),性能消耗低(高效的二进制传输、字节小、序列化耗时少),服务治理方便。

http是超文本协议,其包含的信息往往比较臃肿,网关之前一般用http,服务之间能用rpc协议就用rpc协议,除非少部分情况,一些旧的服务它可能只支持http,或者一些node开发团队只能用http,也不太好改成rpc。


功能特性

HTTP是一个属于应用层的超文本传输协议,是万维网数据通信的基础,主要服务在页面端和服务端的数据传输。

RPC 是一个远程过程调用协议,它的定位是实现不同计算机应用之间的数据通信,屏蔽通信底层的复杂性,让我们在实际使用过程中能像调用本地服务一样去完成远程服务的调用,所以这两个协议在定位上完全不同的。


实现原理

http 协议是一个已经实现并且成熟的应用层协议(如图),它定义了通信的报文格式 Request Body 和 Request Header,以及 Response Body 和 Response Header。
也就是说,符合这样一个协议特征的通信协议,才是 http 协议。

RPC 只是一种协议的规范,它并没有具体实现,只有按照 RPC 通信协议规范实现的通信框架,也就是 RPC 框架,才是协议的具体实现,比如 Dubbo、 gRPC 等。
因此,我们可以在实现 RPC 框架的时候,自定义报文通信的协议规范、自定义序列化方式、自定义网络通信协议的类型等等
从这个层面来说,http 是成熟的应用协议,而 RPC 只是定义了不同服务之间的通信规范。


应用层面

http 协议和实现了 RPC 协议的框架都能够实现跨网络节点的服务之间通信

并且他们底层都是使用 TCP 协议作为通信基础。

但是,由于 RPC 只是一种标准协议,只要符合 RPC 协议的框架都属于 RPC 框架。
因此,RPC 的网络通信层也可以使用 HTTP 协议来实现,比如 gRPC、OpenFeign 底层都采用了 http 协议。


五、为什么许多大公司还要自研 RPC 框架?

HTTP 既然也是 RPC 的一种实现?为什么公司还要自研 RPC 框架?

HTTP协议可以说是目前最为主流的一种网络通信协议,但是很多大厂依然自研RPC框架,如字节、阿里以及腾讯等?为什么他们的应用进程不之间通过HTTP协议完成交互?

最主要的原因还是RPC框架包含了重试机制,路由策略,负载均衡策略,高可用策略,流量控制策略等等。
如果应用进程之间只使用HTTP协议通信,显然是无法完成上述功能的。

一般来说,HTTP服务主要是针对小企业的,因为虽然RPC效率和性能更高,但是HTTP服务开发迭代会更快。而且在接口不多、系统与系统交互较少的情况下,Http通信是常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议就可以进行服务间的数据传输。接口可能返回一个JSON字符串,然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。

但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了。首先是长链接,不必每次通信都要像http一样去3次握手,减少了网络开销;其次,RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作


六、联系

HTTP和RPC是两种不同的通信协议,它们都用于实现网络通信。虽然它们的目的和应用场景存在一定的差异,但它们之间也有一些联系。

具体而言,HTTP是一种基于文本的协议,常用于浏览器和服务器之间的通信,主要用于传输超文本和其他网络资源,如HTML文件、CSS样式表、JavaScript脚本等。而RPC是一种远程过程调用协议,它可以让程序在一个计算机上执行另一个计算机上的代码,并将结果返回给调用方。

尽管HTTP和RPC的应用场景存在较大的差异,但它们都依赖于底层的TCP/IP协议栈,且都需要进行数据序列化、网络传输和反序列化等操作。此外,在实际的软件开发中,很多情况下也会将它们结合起来使用,例如通过HTTP协议调用RPC服务,或者将RPC服务部署在HTTP服务器上,以便通过HTTP协议访问。因此,HTTP和RPC虽然有一定的差异,但在某些情况下也可以互补使用。

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

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

相关文章

工装识别工装检测系统 yolov7

工装识别工装检测系统通过yolov7python网络模型算法智能分析技术,工装识别工装检测系统对现场人员是否穿戴的进行实时分析,发现现场画面人员未按要求着装,系统会自动抓拍发出警报并讲违规图片视频保存下来,同步回传后台提醒监理人…

uniapp调用七牛云api实现文件上传-node.js向外提供uploadToken的接口-客户端不用下载七牛云的包和SDK-发起网络请求直接上传

uniapp调用七牛云api实现文件上传 实现思路: 1.使用node.js向客户端提供uploadToken,客户端获取uploadToken后使用七牛云的api接口发起网络请求,上传文件; node.js向外提供uploadToken的接口-客户端不用下载七牛云的包和SDK-&…

macOS电脑

UNIX操作系统有一个规范,名叫《单一UNIX规范》(Single UNIX Specification)。凡是符合这个规范的操作系统都可以叫UNIX操作系统,并且可以通过UNIX官方认证。 UNIX商标认证官网是:The Register of UNIX Certified Prod…

flink动态表的概念详解

目录 前言🚩 动态表和持续不断查询 stream转化成表 连续查询 查询限制 表转化为流 前言🚩 传统的数据库SQL和实时SQL处理的差别还是很大的,这里简单列出一些区别: 尽管存在这些差异,但使用关系查询和SQL处理流并…

界面控件Telerik UI for WinForms使用指南 - 数据绑定 填充(一)

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件,所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms组件为可视化任何类…

RoBERTa 阅读笔记

RoBERTa 阅读笔记 https://arxiv.org/abs/1907.11692 总的来说,bert在模型上并没有做太多的改进,只是在训练数据和训练策略上进行了一个改进。 相较于BERT的改进 1. Masking策略 stastic: 原始 BERT 的 masking 是固定的,RoBERTa 给相同的…

ChatGPT: 智能对话时代的未来展望与应用实践

ChatGPT: 智能对话时代的未来展望与应用实践 简介 ChatGPT 是一种基于深度学习和自然语言处理技术的人工智能对话模型。它可以通过生成自然语言文本的方式,与用户进行交互式的对话。作为一种先进的对话生成模型,ChatGPT 在近年来快速发展的人工智能领域中…

首次发刊!Coremail管理员社区2023年Q1季刊发布

4月21日,Coremail安全邮件城市沙龙在北京正式开展,此次沙龙活动的主题为“践行教育信创,护航邮件安全”。广东盈世计算机科技有限公司服务副总裁、ICANN UA大使吴秀诚在活动上正式发布《Coremail管理员社区2023年Q1季刊》。 Coremail管理员社…

公网远程访问公司内网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻,不管是财务、生产、销售还是采购,都需要用到ERP系统来协助。…

基于spring+vue开发的音乐网站

摘要 随着科学技术的飞速发展,社会的各个领域都在努力与现代的先进技术接轨,以提高自身的优势。音乐推荐管理也不能排除在外。音乐推荐管理是一个管理系统,以实际运用为开发背景,采用JSP技术构建,使用软件工程开发方法…

《面试1v1》java注解

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:接下来,聊聊Java的注解,它们到底有什么用? 候选人: 注解的用处主要三个: 第一个,编译期使用。比如Override确保你正确重…

activeMQ持久化报错的问题

activeMQ持久化,启动activeMQ报错, INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource5148e82a) jvm 1 | WARN | Could not get JDBC connection: Cannot create PoolableConnectionFactory (Commun…

matlab点云的可视化-源码复制粘贴即可(一)

一、导入并可视化一个无属性的点云 clc; clear; close; % clear everything% Import a point cloud from a plain text file (run type(Lion.xyz) to see the contents of the file) pc pointCloud(Lion.xyz);% Generate a z-colored view of the point cloud pc.plot;% Set …

加密解密软件VMProtect入门使用教程(二):分析、破解和保护软件

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…

Vue ElementUI Axios 前后端案例(day03) 之 Axios

前置知识 AJAX 前置知识 答疑 问:我们是否可以这么理解,发送url请求就是服务器之间建立连接,tcp三次握手之后 其中与服务器进行数据交换:通过AJAX可以给服务器发送请求 就是连接建立以后 我们发送我们的浏览器数据 就是所谓的…

家用洗地机有什么优缺点?入门级家用洗地机

家用清洁产品近几年发展迅猛,扫拖机器人、洗地机等热门品类更是在家电产品销量普遍下滑的趋势下,仍然保持着大幅增长。越来越多的消费者开始关注清洁类产品,但扫拖机器人和吸尘器的清洁效果有限,洗地机会在功能上更加的完善&#…

2023年全国职业院校技能大赛软件测试赛题第1套

2023年全国职业院校技能大赛 软件测试赛题第1套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

通过适当的异常处理进行快速调试

编写良好的代码和异常处理 作为开发人员,开发中最令人恼火的部分通常是调试。与我共事过的大多数程序员都会赞同这种观点。通常,看到异常的第一反应是烦恼和沮丧的混合。易于调试的异常通常会在调试后的几分钟内产生根本原因。最让我烦恼的是那些在系统…

vue实现多布局模式

1、目标效果 源码地址:multipal-layout-demo: vue2实现多布局暗黑模式 默认布局:头部宽度100%,侧边栏、内容区 顶部布局:头部宽度100%,内容区 侧边栏布局:侧边栏高度100%,头部、内容区 2、原理…

python+vue课堂教学效果实时评价系统

系统权限按管理员,教师和学生这三类涉及用户划分。 (a) 管理员;管理员使用本系统涉到的功能主要有:个人中心,学生管理,教师管理,教学视频管理,教学课件管理,类型管理,视频…