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.rhkb.cn/news/208238.html

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

相关文章

MySQL字符函数

在数据库中,字符函数是一组用于处理字符串的函数。这些函数可以帮助我们执行各种操作,如连接、比较、替换等。本文将介绍一些常用的MySQL字符函数,并演示如何在查询中使用它们。 1.concat() 函数 CONCAT() 函数用于连接两个或多个字符串。它…

Scrapy框架内置管道之图片视频和文件(一篇文章齐全)

1、Scrapy框架初识(点击前往查阅) 2、Scrapy框架持久化存储(点击前往查阅) 3、Scrapy框架内置管道 4、Scrapy框架中间件(点击前往查阅) 5、Scrapy框架全站、分布式、增量式爬虫 Scrapy 是一个开源的、…

前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由、组件库

文章目录 AjaxAjax特点 Promise 异步编程(缺)Promise基本使用状态 - PromiseState结果 - PromiseResult AxiosVue中使用AxiosAxios请求方式getpostput和patchdelete并发请求 Vue路由 - vue-router单页面Web应用(single page web application&…

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…

java设计模式学习之【原型模式】

文章目录 引言原型模式简介定义与用途实现方式UML 使用场景优势与劣势原型模式在spring中的应用员工记录示例代码地址 引言 原型模式是一种创建型设计模式,它允许对象能够复制自身,以此来创建一个新的对象。这种模式在需要重复地创建相似对象时非常有用…

蓝桥第一期模拟总结

文章目录 1.动态的 Tab 栏2.地球漫游3.迷惑的this4.燃烧卡路里5.魔法失灵了6.年龄统计 所有题目链接 1.动态的 Tab 栏 本题要实现一个tab栏固定效果,看见题目就想到css中的 position: fixed; 尝试了很久都没能实现效果,后来又想到了粘性定位 position: …

【.NET全栈】.net的微软API接口与.NET框架源码

文章目录 0 前言1 微软官方.net接口学习2 .NET框架源码总结 0 前言 如果浏览器打不开链接,换一个浏览器打开。 我是 打不开微软的链接,使用: 可以打开!!! 1 微软官方.net接口学习 https://docs.microsoft…

【UE】UEC++获取屏幕颜色GetPixelFromCursorPosition()

目录 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 二、函数的调用 三、运行结果 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 创建一个蓝图方法库方法 GetPixelFromCursorPosition(),并给他指定UF…

面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路

面试系列: 面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路 面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题 文章目录 一、前言二、常见面试问题回答思路问…

Linux下的文件IO之系统IO

1. 知识点 读入写出,切记以我们程序为中心向文件或者别的什么东西读入写出(输入流输出流) 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

05_MySQL主从复制架构

任务背景 ##一、真实案例 某同学刚入职公司,在熟悉公司业务环境的时候,发现他们的数据库架构是一主两从,但是两台从数据库和主库不同步。询问得知,已经好几个月不同步了,但是每天会全库备份主服务器上的数据到从服务…

5G承载网和大客户承载的演进

文章目录 移动4/5G承载网联通和电信4/5G承载网M-OTN(Metro-optimized OTN),城域型光传送网PeOTN(packet enhanced optical transport network),分组增强型OTN板卡增强型PeOTN集中交叉型PeOTN VC-OTN&#x…

2023-12-01 LeetCode每日一题(找出叠涂元素)

2023-12-01每日一题 一、题目编号 2661. 找出叠涂元素二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1,m * n] 内的 所有 整数。 从下标 0 开始遍历 arr 中的每…

750mA Linear Charger with Power Path Management

一、General Description YHM2711 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Linux中的UDEV机制与守护进程

Linux中的UDEV守护进程 udev简介守护进程守护进程概念守护进程程序设计守护进程的应用守护进程和后台进程的区别 UDEV的配置文件自动挂载U盘 udev简介 udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设…

CPU 使用率和负载Load

优质博文:IT-BLOG-CN 一、CPU 使用率 CPU使用率是 CPU处理非空闲任务所花费的时间百分比 。例如单核CPU 1s内非空闲态运行时间为0.8s,那么它的CPU使用率就是80%;双核CPU 1s内非空闲态运行时间分别为0.4s和0.6s,那么,…

MySQL之锁

MySQL之锁 锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制,MySQL中的锁是在服务器层或者存储引擎层实现的,保证了数据访问的一致性与有效性 MySQL锁可以按模式分类为:乐观锁与悲观锁。 按粒度分可以分为全局锁、表级锁…

Pandas教程06:DataFrame.merge数据的合并处理

DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键(键可以是列名或索引)将两个 DataFrame 连接在一起,这个过程类似于 SQL 中的 JOIN 操作。 #我的Python教程 #微信公众号:wdPy…

opencv知识库:利用cv2.resize()函数进行图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

高校学生宿舍公寓报修维修生活管理系统 微信小程序b2529

本课题要求实现一套基于微信小程序宿舍生活管理系统,系统主要包括(管理员,学生、维修员和卫检员)四个模块等功能。 使用基于微信小程序宿舍生活管理系统相对传统宿舍生活管理系统信息管理方式具备很多优点:首先可以大幅…