RPC和HTTP的区别

目录

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

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

相关文章

pip常用命令总结

pip是一个命令行程序。安装pip完成后&#xff0c;系统会添加一个pip命令。大家最常用的就是pip install。 1、下面介绍一下它的选项&#xff1a; 1. -r&#xff0c;--requirement <file>&#xff0c;从给定的需求文件中进行安装&#xff0c;此选项可多次使用; 2. -c&…

YOLOv8改进 | 2023 | FocusedLinearAttention实现有效涨点

论文地址&#xff1a;官方论文地址 代码地址&#xff1a;官方代码地址 一、本文介绍 本文给大家带来的改进机制是Focused Linear Attention&#xff08;聚焦线性注意力&#xff09;是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测…

C++ Boost 异步网络编程基础

Boost库为C提供了强大的支持&#xff0c;尤其在多线程和网络编程方面。其中&#xff0c;Boost.Asio库是一个基于前摄器设计模式的库&#xff0c;用于实现高并发和网络相关的开发。Boost.Asio核心类是io_service&#xff0c;它相当于前摄模式下的Proactor角色。所有的IO操作都需…

leetCode 100. 相同的树 和 leetCode 101. 对称二叉树 和 110. 平衡二叉树 和 199. 二叉树的右视图

1.leetCode 100. 相同的树 C代码&#xff1a; class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p nullptr || q nullptr) return pq;return p->val q->val && isSameTree(p->left,q->left) && isSameTree(p->righ…

详解Java中的异常体系机构(throw,throws,try-catch,finally,自定义异常)

目录 一.异常的概念 二.异常的体系结构 三.异常的处理 异常处理思路 LBYL&#xff1a;Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 异常抛出throw 异常的捕获 提醒声明throws try-catch捕获处理 finally的作用 四.自定义异常类 一.异…

openEuler20.03学习01-创建虚拟机

赶个时髦&#xff0c;开始学习openEuler 20.03 (LTS-SP3) 操作系统iso下载地址&#xff1a;https://repo.openeuler.openatom.cn/openEuler-20.03-LTS-SP3/ISO/x86_64/openEuler-20.03-LTS-SP3-x86_64-dvd.iso 公司有现成的vmware环境&#xff0c;创建虚拟机i测试&#xff0c…

Java视频直播技术架构详解

引言 随着互联网的不断发展&#xff0c;视频直播技术成为在线娱乐和沟通的重要组成部分。在众多的视频直播平台中&#xff0c;Java作为一种强大而灵活的编程语言&#xff0c;被广泛应用于构建稳定、高效的视频直播系统。本文将深入探讨Java视频直播技术的架构&#xff0c;包括…

EM@常见平面曲线的方程的不同表示方式

文章目录 abstract常见曲线的不同形式小结:一览表分析圆锥曲线的极坐标方程非标准位置的圆锥曲线参数方程应用比较 refs abstract 常见平面曲线的方程的不同表示方式 常见曲线的不同形式 下面以平面曲线为对象讨论参数方程通常是对普通方程的补充和增强,曲线的普通方程(直角…

【pandas】数据透视表【pivot_table】

pivot_table pandas的pivot_table函数是一个非常有用的工具&#xff0c;用于创建一个数据透视表&#xff0c;这是一种用于数据总结和分析的表格形式。 以下是pivot_table的基本语法&#xff1a; pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean,…

[JVM] 字节二面~简述垃圾回收以及类加载过程,别说八股文,我想看到你自己的理解

GC 的三种收集方法&#xff1a;标记清除、标记整理、复制算法的原理与特点&#xff0c;分别用在什么地方&#xff0c;如果让你优化收集方法&#xff0c;有什么思路&#xff1f; ● 标记清除&#xff1a; 先标记&#xff0c;标记完毕之后再清除&#xff0c;效率不高&#xff0c…

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境爬虫模型训练实际应用 模块实现1. 数据准备1&#xff09;爬虫下载原始图片2&#xff09;手动筛选图片 2. 数据处理1&#xff09;切割得到人物脸部2&#xff09;重新命名处理后的图片3&#xff09;添加到数据集 3. 模型训练及…

系列五、Spring整合MyBatis不忽略mapper接口同目录的xxxMapper.xml

一、概述 默认情况下maven要求我们将xml配置、properties配置等都放在resources目录下&#xff0c;如果我们强行将其放在java目录&#xff0c;即将xxxMapper.xml和xxxMapper接口放在同一个目录下&#xff0c;那么默认情况下maven打包时会将这个xxxMapper.xml文件忽略掉&#xf…

C++中const有什么作用

const用于定义常量&#xff1a;const定义的常量编译器可以对其进行数据静态类型安全检查。const修饰函数形式参数&#xff1a;当输入参数为用户自定义的类型和抽象数据类型时&#xff0c;应该将值传递改为const &传递&#xff0c;可以提高效率。 void fun(A a); void fun(…

十大排序之归并排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;归并排序 时间复杂度O(n*logn)&#x1f387;1. 算法步骤思想&#x1f387;2、动画演示&#x1f387;3.代码实现 &#x1f412;个人主页 &#x1f3c5;算法思维框架 &#…

GraphQL—构建多服务架构的数据层

简介 作为 Facebook 在 2015 年推出的查询语言&#xff0c;GraphQL 能够对 API 中的数据提供一套易于理解的完整描述&#xff0c;使得客户端能够更加准确的获得它需要的数据 现在的web系统大多是基于restful的&#xff0c;我们知道&#xff0c;REST强调以资源来划分系统&#x…

老HIS面临的问题总结

在从业的10余年时间&#xff0c;从事pb开发和教学多年&#xff0c;应朋友的要求&#xff0c;写一篇关于老his的问题&#xff0c;今天终于得空书写。老his自1995年立项至今已走过20余年&#xff0c;目前仍有上千家医院在使用&#xff0c;可以说它在医疗信息化水平的提升和行业人…

Python基础入门例程64-NP64 输出前三同学的成绩(元组)

最近的博文: Python基础入门例程63-NP63 修改报名名单(元组)-CSDN博客 Python基础入门例程62-NP62 运动会双人项目(元组)-CSDN博客 Python基础入门例程61-NP61 牛牛的矩阵相加(循环语句)-CSDN博客 目录 最近的博文: 描述

lvm 扩容根分区失败记录

lvm 扩容根分区失败记录 1、问题描述2、错误描述3、解决方法重启系统进入grub界面&#xff0c;选择kernel 2.x 启动系统。然后同样的resize2fs命令扩容成功。 1、问题描述 根分区不足。 系统有2个内核版本&#xff0c;一个是kernel 2.x&#xff0c;另一个是kernel 4.x。 这次l…

C语言剔除相关数(ZZULIOJ1204:剔除相关数)

题目描述 一个数与另一个数如果含有相同数字和个数的字符&#xff0c;则称两数相关。现有一堆乱七八糟的整数&#xff0c;里面可能充满了彼此相关的数&#xff0c;请你用一下手段&#xff0c;自动地将其剔除。 输入&#xff1a;多实例测试。每组数据包含一个n(n<1000)&#…

知行之桥EDI系统HTTP签名验证

本文简要概述如何在知行之桥EDI系统中使用 HTTP 签名身份验证&#xff0c;并将使用 CyberSource 作为该集成的示例。 API 概述 首字母缩略词 API 代表“应用程序编程接口”。这听起来可能很复杂&#xff0c;但真正归结为 API 是一种允许两个不同实体相互通信的软件。自开发以…