RPC和HTTP的区别

news2024/12/28 9:54:55

目录

1、RPC是什么

1.1 概念

1.2 RPC的组成部分

1.3 常见的 RPC 技术和框架

1.4 RPC的工作流程

2、HTTP是什么

2.1 概念

2.2 HTTP的消息格式

2.3 HTTP响应状态码有哪些

3、⭐RPC和HTTP的区别

小结


1、RPC是什么

1.1 概念

RPC(Remote Procedure Call)是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。打个比方:有两台服务器A、B,一个应用在A服务器上部署,其需要调用B服务器上的应用,但是由于不在一个一个服务器(内存空间),不能直接调用,因此需要通过网络来传输调用的语义和数据。RPC主要包含通讯协议、序列化、资源(接口)描述、服务框架、性能、语言支持等方面的内容。

RPC常用于分布式系统中,例如云计算、微服务架构、分布式数据库、消息队列等,它可以让不同的服务之间进行远程调用,从而实现分布式系统的协作。

1.2 RPC的组成部分

图片来源:远程过程调用_百度百科

RPC的组成部分包括:

  1. 客户端(Client):服务调用方。
  2. 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数信息打包成网络信息,再通过网络传输发送给服务端。
  3. 服务端存根(Server Stub):接收客户端发送过来的请求消息进行解包,然后再调用本地服务进行处理。
  4. 服务端(Server):服务的真正提供者。
  5. Network Service:底层传输,可以是TCP或HTTP。

此外,RPC中还涉及了序列化、反序列化、通信协议、服务接口描述和服务发现等关键方面。

序列化是将数据结构或对象状态转换为可以存储或传输的格式的过程,反序列化则是相反的过程。

通信协议定义了客户端和服务器之间的通信规则,包括消息格式、消息传输机制等。

服务接口描述定义了服务的功能和输入/输出参数,以便客户端能够正确地调用服务。服务发现则用于确定客户端如何找到所需的服务。

因此,RPC架构设计需要考虑以下几个方面:(引自RPC是什么?架构设计科普)

  1. 接口设计:RPC的基础是远程调用,因此接口设计是关键。接口应该设计清晰、简洁、易于理解,并且具有良好的扩展性和兼容性。

  2. 通信协议:RPC的通信协议需要支持高效的数据传输和序列化,同时也需要支持可靠性和安全性等方面的需求。常用的通信协议有HTTP、TCP、UDP等

  3. 数据传输格式:RPC通信的数据需要进行序列化和反序列化。常见的序列化格式有JSON、Protobuf、Thrift等。选用合适的数据传输格式可以提高RPC的性能和扩展性。

  4. 负载均衡和容错处理:在分布式系统中,服务的负载均衡和容错处理是必不可少的。RPC架构需要考虑如何实现负载均衡和容错处理,例如使用负载均衡算法、使用备用服务等。

  5. 安全性和可靠性:在RPC架构中,数据的安全性和可靠性也是非常重要的。需要考虑如何保证数据传输的安全性和可靠性,例如使用加密协议、数据压缩等。

RPC架构设计需要综合考虑以上多个方面的需求,并根据实际场景进行选择和实现,以实现高效、可靠、安全、可扩展的RPC系统。

图片来源:RPC是什么?架构设计科普

1.3 常见的 RPC 技术和框架

该段内容引自:花了一个星期,我终于把RPC框架整明白了!-实现一个最简单的rpc框架

RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:

  • 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
  • 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
  • 通信框架:MINA 和 Netty。

目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。

下面重点介绍三种:

  • gRPC:是 Google 公布的开源软件,基于***的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。
  • Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。
  • Dubbo:是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是极其鲜明的特色。

1.4 RPC的工作流程

图片来源:花了一个星期,我终于把RPC框架整明白了!-实现一个最简单的rpc框架

2、HTTP是什么

2.1 概念

HTTP,全名为HyperText Transfer Protocol,即超文本传输协议。它是一种请求/响应协议 —— 客户端发出一个请求,服务器响应这个请求并返回。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

2.2 HTTP的消息格式

HTTP消息的格式分为两种:请求消息和响应消息。

1. HTTP请求消息

HTTP请求消息分为请求消息头和请求实体内容两部分。

(1)请求消息头:

第一行必须由以下三部分组成:

a. 请求的方法(GET、POST和HEAD等)。

b. Web资源的路径(http://www.website.com/test/test.html中的/test/test.html部分)。

c. HTTP协议的版本(HTTP/1.0或HTTP/1.1)。

在请求消息头的其他行是请求头字段,每一行的格式是:“头字段”冒号“头字段的值”。请求头以一个空行结束。

(2)请求实体内容:

请求实体内容是请求发送的数据,它跟在请求头后面。根据请求方法的不同,请求实体内容可能是请求参数、表单数据、要上传的文件等。

2. HTTP响应消息

HTTP响应消息包括状态行、消息报头和响应正文三部分。

(1)状态行:HTTP版本和状态码,状态码表示请求的处理结果,如200表示成功,404表示找不到资源等。

(2)消息报头:响应头字段,包括响应的内容类型、响应的长度、响应的服务器信息等。

(3)响应正文:响应的具体内容,如HTML文档、图片、视频等。

以上就是HTTP消息的格式,它是一种通用的互联网协议格式,被广泛应用于Web浏览器和服务器的通信中。

2.3 HTTP响应状态码有哪些

HTTP响应状态码分为5类,每一类有不同的状态码。

1xx:信息响应,表示收到请求并继续处理。

2xx:成功响应,表示请求已被服务器接收、理解并处理。

3xx:重定向响应,要完成请求必须进一步执行的动作。

4xx:客户端错误响应,请求包含语法错误或者无法完成请求。

5xx:服务器错误响应,服务器在处理请求的过程中发生了错误。

其中,常见的HTTP响应状态码包括:

200:表示请求已成功,请求所希望的响应头或数据体将随此响应返回。

201:表示请求成功并且服务器创建了新的资源,且其URI已经随Location头信息返回。

301:被请求的资源已永久移动到新位置。

302:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求。

304:自从上次请求后,请求的网页未修改过。

401:请求要求身份验证。

403:服务器已经理解请求,但是拒绝执行它。

404:请求失败,请求所希望得到的资源未被在服务器上发现。

500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

503:由于临时的服务器维护或者过载,服务器当前无法处理请求。

以上是常见的HTTP响应状态码,根据不同的状态码,客户端可以了解服务器的处理结果和相关信息。

3、⭐RPC和HTTP的区别

RPC(Remote Procedure Call)和HTTP(Hypertext Transfer Protocol)是用于不同目的的通信协议。它们之间的主要区别如下:

  1. 目的:RPC旨在实现远程过程调用,即允许一个应用程序调用另一个应用程序中的函数或方法,就像本地调用一样。而HTTP则是用于在客户端和服务器之间传输超文本和其他内容。

  2. 技术实现:RPC通常使用自定义的协议来进行通信,例如gRPC使用Protocol Buffers进行序列化和反序列化。它可以使用多种传输协议,如TCP、UDP等。相比之下,HTTP使用标准的请求-响应模型,基于TCP协议进行通信。

  3. 数据格式:RPC通常使用二进制格式进行数据交换,这使得它更高效,适合处理大量的数据和复杂的数据结构。而HTTP使用文本格式,如JSON或XML,这使得数据可读性更好,但也增加了通信的开销。

  4. 接口风格:RPC通常采用面向服务的架构(SOA),通过定义接口和操作来实现服务的调用。它强调细粒度的方法调用。而HTTP是一种无状态的协议,只关注请求和响应的传输,不涉及具体的服务调用。

  5. 安全性:RPC通常提供更丰富的安全性选项,如身份验证、加密和访问控制。它可以通过使用传输层安全性协议(TLS)来保护通信。HTTP也支持安全性选项,如HTTPS,但功能相对较少。

  6. 适用场景:HTTP适用于构建开放式API平台或实现Web服务之间的调用。RPC适用于分布式系统中进行远程过程调用,它可以在不同语言、不同平台之间进行调用。

综上所述,RPC适用于需要高性能、低延迟、复杂数据结构和精确控制的应用程序间通信。而HTTP适用于广泛的互联网应用,如网页浏览、API调用等。选择合适的通信协议取决于具体的需求和场景。

小结

需要注意的是,RPC和HTTP这两个不是并行的概念RPC是一种设计架构,是为了解决不同服务器之间的调用问题。而HTTP是一种传输协议,RPC框架中也可以使用HTTP作为传输协议,使用的协议不同主要也是为了适应不同的业务场景需求。

参考:

远程过程调用_百度百科

RPC是什么?架构设计科普

谁能用通俗的语言解释一下什么是 RPC 框架? - 知乎

花了一个星期,我终于把RPC框架整明白了!-实现一个最简单的rpc框架


感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

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

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

相关文章

全国甲骨文识读大会用到哪些竞赛软件

2023年,全国甲骨文识读大会第1季在“中华字都安阳”举办,天纵竞赛软件为此次高端知识竞赛提供软件支持。 甲骨文识读大会分为海选、初赛、复赛、决赛4个阶段,不分年龄、性别、职业、地域,并邀请国内甲骨文和殷商文化方面专家学者组…

Unity-类-Vector

Vector矢量 是一个基本的数学概念,它允许你描述方向和大小。在游戏和应用中,矢量通常用于描述一些基本属性,如角色的位置、物体移动的速度或两个物体之间的距离。 矢量算术是计算机编程很多方面(如图形、物理和动画)的基础,深入了解这一主题对于充分发挥 Unity 的功能很有…

python实现炫酷的屏幕保护程序!

今天写了桌面保护程序。先来看看效果吧。 完全可以作为屏保程序了,老方式:以下是实现的代码: from tkinter import *from time import strftime​def update_time():global i, j current_time strftime(%H:%M:%S)time_label.config(textcu…

软件工程简明教程

软件工程简明教程 何为软件工程? 1968 年 NATO(北大西洋公约组织)提出了软件危机(Software crisis)一词。同年,为了解决软件危机问题,“软件工程”的概念诞生了。一门叫做软件工程的学科也就应…

前车之鉴: 适用于所有select选择框的 全选反选逻辑,如何只用单个change事件优雅完成

文章目录 实际效果1.1 效果展示1.2 核心功能 Show CodeQ & A彩蛋 实际效果 1.1 效果展示 1.2 核心功能 区别网上其他思路,我这里不需要使用原生点击事件,将全选反选逻辑收敛在一个change事件上 此前已经看过一些全选逻辑同学尝试过后,会…

NX二次开发UF_CURVE_ask_combine_curves 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_combine_curves Defined in: uf_curve.h int UF_CURVE_ask_combine_curves(tag_t combine_curve_feature, tag_t * first_curve_tag, UF_CURVE_combine_curves_directi…

【阿里云】图像识别 智能分类识别 增加垃圾桶开关盖功能点和OLED显示功能点(二)

一、增加垃圾桶开关盖功能 环境准备 二、PWM 频率的公式 三、pthread_detach分离线程,使其在退出时能够自动释放资源 四、具体代码实现 图像识别数据及调试信息wget-log打印日志文件 五、增加OLED显示功能 六、功能点实现语音交互视频 一、增加垃圾桶开关盖功能…

vue3(一)-基础入门

一、导入vue.js 1.可以借助 script 标签直接通过 CDN 来使用 Vue <!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> -->2.也可以下载vue.global.js文件并在本地导入 <script src"./lib/vue.global.js">&…

3、Qt使用windeploy工具打包可执行文件

新建一个文件夹&#xff0c;把要打包的可执行文件exe拷贝过来 点击输入框&#xff0c;复制一下文件夹路径 点击电脑左下角&#xff0c;找到Qt文件夹&#xff0c; 点击打开 “Qt 5.12.0 for Desktop” &#xff08;我安装的是Qt 5.12.0版本&#xff09; 输入“cd bin”&#xff…

转录组学习第5弹-比对参考基因组

比对参考基因组 在构建文库的过程中需要将DNA片段化&#xff0c;因此测序得到的序列只是基因组的部分序列。为了确定测序reads在基因组上的位置&#xff0c;需要将reads比对回参考基因组上&#xff0c;这个步骤叫做比对&#xff0c;即文献中所提到的alignment或mapping。包括基…

代码随想录算法训练营第30天|回溯总结 332. 重新安排行程

回溯是递归的副产品&#xff0c;只要有递归就会有回溯&#xff0c;所以回溯法也经常和二叉树遍历&#xff0c;深度优先搜索混在一起&#xff0c;因为这两种方式都是用了递归。 回溯法就是暴力搜索&#xff0c;并不是什么高效的算法&#xff0c;最多再剪枝一下。 回溯算法能解…

自动语音识别 支持86种语言 Dragon Professional 16 Crack

从个体从业者到全球组织&#xff0c;文档密集型行业的专业人士长期以来一直依靠 Dragon 语音识别来更快、更高效地创建高质量文档&#xff0c;减少管理开销&#xff0c;以便他们能够专注于客户。了解 Dragon Professional v16 如何通过单一解决方案提高标准&#xff0c;为各个业…

YB4556 28V、1A、单节、线性锂电池充电IC

YB4556 28V 、 1A 、单节、线性锂电池充电 IC 概述: YB4556H 是一款完整的采用恒定电流 / 恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V&#xff0c;6.5V 自动过压保护&#xff0c;充电电流可达 1A。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒…

推荐6款本周 yyds 的开源项目

&#x1f525;&#x1f525;&#x1f525;本周GitHub项目圈选: 主要包含 链接管理、视频总结、有道音色情感合成、中文文本格式校正、GPT爬虫、深度学习推理 等热点项目。 1、Dub 一个开源的链接管理工具&#xff0c;可自定义域名将繁杂的长链接生成短链接&#xff0c;便于保…

云计算领域的第三代浪潮!

根据IDC不久前公布的数据&#xff0c;2023年上半年中国公有云服务整体市场规模(IaaS/PaaS/SaaS)为190.1亿美元&#xff0c;阿里云IaaS、PaaS市场份额分别为29.9%和27.9%&#xff0c;都远超第二名&#xff0c;是无可置疑的行业领头羊。 随着人工智能&#xff08;AI&#xff09;…

ADRC自抗扰控制原理

这里写目录标题 TD跟踪微分器ESONLSEF后续把公式的核心原理分析一下 参考链接&#xff1a;ADRC自抗扰控制&#xff0c;有手就行 ADRC是升级版的PID&#xff0c;由TD&#xff08;跟踪微分器&#xff09;&#xff0c;ESO&#xff08;扩张状态观测器&#xff09;&#xff0c;NLSEF…

C语言—sizeof和strlen的区别

sizeof和strlen的区别 1、两者无联系 2、 sizeof&#xff1a;计算数组&#xff0c;变量&#xff0c;类型所在空间的大小&#xff0c;单位是字节 strlen&#xff1a;求字符串的长度&#xff0c;\0之前的字符个数&#xff0c;只针对字符串求长度 3、sizeof是操作符 strlen是库…

现代图标集wxArtProvider发布 —— 发布于2023年11月21日

Perazz发布了wxMaterialDesignArtProvider&#xff0c;这是一个自定义的wxArtProvider类&#xff0c;从MaterialDesign、SimpleIcons、FontAwesome和FluentUI系统数据集中提供基于SVG的图标。所有这些数据集都有许可证&#xff08;MIT、CC BY 4.0、CC0 1.0、Apache 2.0&#xf…

PyQt6把QTDesigner生成的UI文件转成python源码,并运行

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

LeetCode二叉树小题目

Q1将有序数组转换为二叉搜索树 题目大致意思就是从一个数组建立平衡的二叉搜索树。由于数组以及进行了升序处理&#xff0c;我们只要考虑好怎么做到平衡的。平衡意味着左右子树的高度差不能大于1。由此我们可以想着是否能用类似二分递归来解决。 如果left>right,直接返回nul…