有了HTTP,为什么还要RPC?

面试官:来,讲一下RPC 调用和 HTTP 调用的区别吧 OSI网络七层模型 在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层: (从上到下) 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等; 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断; 第四层:传输层。管理着网络中的端到端的数据传输; 第五层:网络层。定义网络设备间如何传输数据; 第六层:链路层。将上面的网络层的数据包封装成数据帧, 阅读详情

很长时间以来都没有怎么好好搞清楚 RPC(即 Remote Procedure Call,远程过程调用)和 HTTP 调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!

本文简单地介绍一下两种形式的 C/S 架构,先说一下他们最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的。

我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!下面来具体说一说 RPC 服务和 HTTP 服务。

OSI 网络七层模型
在说 RPC 和 HTTP 的区别之前,我觉的有必要了解一下 OSI 的七层网络结构模型(虽然实际应用中基本上都是五层)。

有了HTTP,为什么还要RPC?
它可以分为以下几层:(从上到下)

第一层:应用层。定义了用于在网络中进行通信和传输数据的接口。
第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等。
第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断。
第四层:传输层。管理着网络中的端到端的数据传输。
第五层:网络层。定义网络设备间如何传输数据。
第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输。
第七层:物理层。这一层主要就是传输这些二进制数据。
有了HTTP,为什么还要RPC?
实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。

我们应该将重点放在应用层和传输层这两个层面。因为 HTTP 是应用层协议,而 TCP 是传输层协议。

好,知道了网络的分层模型以后我们可以更好地理解为什么 RPC 服务相比 HTTP 服务要 Nice 一些!

RPC 服务
从三个角度来介绍 RPC 服务,分别是:

RPC 架构
同步异步调用
流行的 RPC 框架
RPC 架构

先说说 RPC 服务的基本架构吧。我们可以很清楚地看到,一个完整的 RPC 架构里面包含了四个核心的组件。

分别是:

Client
Server
Client Stub
Server Stub(这个Stub大家可以理解为存根)
有了HTTP,为什么还要RPC?
分别说说这几个组件:

客户端(Client),服务的调用方。
服务端(Server),真正的服务提供者。
客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。
RPC 主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候 RPC 的优势就比较明显了。实际的开发当中是这么做的,项目一般使用 Maven 来管理。

比如我们有一个处理订单的系统服务,先声明它的所有的接口(这里就是具体指 Java 中的 Interface),然后将整个项目打包为一个 jar 包,服务端这边引入这个二方库,然后实现相应的功能,客户端这边也只需要引入这个二方库即可调用了。

为什么这么做?主要是为了减少客户端这边的 jar 包大小,因为每一次打包发布的时候,jar 包太多总是会影响效率。另外也是将客户端和服务端解耦,提高代码的可移植性。

同步调用与异步调用
什么是同步调用?什么是异步调用?同步调用就是客户端等待调用执行完成并返回结果。

异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。

这个过程有点类似于 Java 中的 Callable 和 Runnable 接口,我们进行异步执行的时候,如果需要知道执行的结果,就可以使用 Callable 接口,并且可以通过 Future 类获取到异步执行的结果信息。

如果不关心执行的结果,直接使用 Runnable 接口就可以了,因为它不返回结果,当然啦,Callable 也是可以的,我们不去获取 Future 就可以了。

流行的 RPC 框架
目前流行的开源 RPC 框架还是比较多的。下面重点介绍三种:

①gRPC 是 Google 最近公布的开源软件,基于最新的 HTTP2.0 协议,并支持常见的众多编程语言。

我们知道 HTTP2.0 是基于二进制的 HTTP 协议升级版本,目前各大浏览器都在快马加鞭的加以支持。

这个 RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。

②Thrift 是 Facebook 的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的 IDL 定义文件自动生成服务代码框架。

用户只要在其之前进行二次开发就行,对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

③Dubbo 是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。协议和序列化框架都可以插拔是及其鲜明的特色。

同样的远程接口是基于 Java Interface,并且依托于 Spring 框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。

HTTP 服务
其实在很久以前,我对于企业开发的模式一直定性为 HTTP 接口开发,也就是我们常说的 RESTful 风格的服务接口。

的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。

利用现成的 HTTP 协议进行传输。我们记得之前本科实习在公司做后台开发的时候,主要就是进行接口的开发,还要写一大份接口文档,严格地标明输入输出是什么?说清楚每一个接口的请求方法,以及请求参数需要注意的事项等。

比如下面这个例子:

POST http://www.httpexample.com/restful/buyer/info/shar
接口可能返回一个 JSON 字符串或者是 XML 文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。

但是对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC 框架的好处就显示出来了,首先就是长链接,不必每次通信都要像 HTTP 一样去 3 次握手什么的,减少了网络开销。

其次就是 RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

总结
RPC 服务和 HTTP 服务还是存在很多的不同点的,一般来说,RPC 服务主要是针对大型企业的,而 HTTP 服务主要是针对小企业的,因为 RPC 效率更高,而 HTTP 服务开发迭代会更快。

总之,选用什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估,从而在仔细比较两种开发框架对于整个项目的影响,最后再决定什么才是最适合这个项目的。

一定不要为了使用 RPC 而每个项目都用 RPC,而是要因地制宜,具体情况具体分析。

既然有 HTTP 协议,为什么还要有 RPC? 阅读详情

相关推荐

智能制造 | 如何快速自动生成站位表及自动与BOM校验?

一、站位表(SMT行业中)是SMT上料防错的基础信息,用于对需上料物料与产线、贴片机位置、飞达规格型号、用量,建立基础资料。 SMT站位表是否正确? 首先需要人工确认站位表与SMT程序的是否符合,上料员依照站位表安装好后,确认人员需有第三方确认者 (品管确定)核对。 站位表内容包括什么? 站位表内容为:SMT站位号相对应的物料编码,元件位号,飞达大小/间距,数量等等,根据不同公司的要求而定义。 就目前来说,基本每一款贴片机都可以输出站位清单 但对于企业来说,直接输出的站位清单一般不直接使用,需要进行手动处理

vayoinfo111的博客 4944

RPC与HTTP的区别与联系

直接入正题吧,经过收罗文章,个人理解大概有以下几点: 1.本质区别 http是协议,rpc是方法,rpc的实现可能也会用到http http在应用层,rpc在传输层(长连接,少了三次握手,不过http2.0也可以链接复用了) http中所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。而rpc仅通过序列化发送有效数据,省去了很多无效的数据,提高传输效率。 h...

流浪天空 1万+

Keil环境下单片机串口通信实战:如何用printf发送中文(附完整代码)

本文详细解析了在Keil开发环境下,单片机通过串口通信发送中文信息时产生乱码的根本原因及解决方案。核心在于理解并统一编码(如GB2312或UTF-8),并正确重定向printf函数。文章提供了针对STC89C52和STM32F103的完整代码示例,涵盖工程配置、编码设置、调试技巧,帮助开发者实现稳定可靠的中文串口输出。

weixin_29168675的博客 468

【每日一问】RPC 调用和 HTTP 调用的区别

基础网络协议总结

weixin_45589713的博客 4123

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 539

Cadence Virtuoso实战:用gm/Id方法搞定折叠式共源共栅放大器设计(附完整仿真流程)

本文详细介绍了在Cadence Virtuoso设计环境中,运用gm/Id方法高效设计折叠式共源共栅放大器的完整实战流程。该方法通过工艺特征曲线,将设计指标映射到晶体管尺寸与偏置,有效克服深亚微米工艺下传统方法的不足。文章以TSMC 180nm工艺为例,从指标拆解、参数查找、电路搭建、仿真验证到问题调试,提供了清晰、可复现的操作指南,并探讨了自动化脚本与版图考量,助力工程师和学生提升模拟IC设计效率与成功率。

jwt8token的博客 648

RPC调用和HTTP调用的区别

一.远程调用方式 无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型 RPC的框架:webservie(c

会玩代码的劫 1万+

nRF52832——大量数据传输时导致蓝牙断开连接,且无法被搜索到的解决方案(广播参数的设置、程序设计方法)

有时蓝牙通信单次发送数据量较大,且连续发送多次的时候,你会发现蓝牙就会出现异常,可能运行30min,40min,或者1h后,蓝牙就不能传输数据了,且无法被搜索到,用主机扫描蓝牙时可能会提示类似这样的DEBUG信息:bta_gattc_mark_bg_conn unable to find the bg connection mask for bd_addr=xx:xx:xx:xx:xx:xx。

数字世界 万物互联 2008

RPC和HTTP的区别?

本文对比分析了RPC与HTTP协议的差异及应用场景。从概念上看,RPC是一种远程调用方式,而HTTP是应用层协议。主要区别体现在请求流程中的编解码层(RPC使用protobat协议)、协议层(RPC可定制化)和网络传输层(RPC建立TCP连接池)。RPC优势在于数据传输效率高、性能更好,适用于微服务架构,但也存在服务治理依赖性强等缺点。使用场景方面,RPC适合内部微服务间频繁调用,HTTP(特别是HTTP2)更适合对外服务。

m0_70325779的博客 2077

0基础学习diffusion_model扩散模型【易理解的公式推导】Denoising Diffusion Probabilistic Models

去噪扩散概率模型。本文是笔者在学习扩散模型时的一些笔记与心得,在公式推导过程中能够保证自己是一步一步去推导并且理解了的。概述是我认为比较重要的部分能够帮助理解公式的推导,具体的公式推导在每一小节中进行。1、扩散过程:如上图所示,扩散过程为从右到左X0→XTX0​→XT​的过程,表示对图片逐渐加噪,且Xt1X_{t+1}Xt1​是在XtX_{t}Xt​加躁得到的,其只受XtX_{t}Xt​的影响,因此扩散过程是一个马尔科夫过程。X0X_0。

zik的博客 2402

机器学习特征选择-t检验

在特征选择的过程中通过计算检验统计量值,比较特征之间的统计量的大小,并降序排列,选取统计值较高的特征,从而起到去除差别小的特征(此差别小的特征难以区分不同的额类别)的目的。 以t检验(Student's t test)为例: 假设检验 通过比较两类样本的随机变化,通过计算其p值决定是否拒绝零假设,也即是说:通过计算p值,若p值小于某一阈值则认为两个样本具有显著差异,两个样本是不同的,此时拒绝...

heda3的博客 6700

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

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

_江屿_ 527

【云原生技术】K8s 在拉取镜像时报错tls: failed to verify certificate: x509: certificate signed by unknown authority

原因 Kubernetes 节点在拉取镜像时会对 Harbor 的 HTTPS 证书做严格校验; 日志里的核心报错是: ``` tls: failed to verify certificate: x509: certificate signed by unknown authority ``` 说明 Harbor 返回的服务器证书要么是自签发,要么缺少在系统信任链里的根/中级 CA,节点因此拒绝连接。 你需要让 **所有负责拉镜像的节点(containerd 或 Docker 守护进程)

weixin_46453070的博客 2876

RPC 是什么?为什么有了 HTTP 还要用 RPC

RPC 是什么?为什么有了 HTTP 还要用 RPC

m0_46671240的博客 1297

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

为什么有了 HTTP 还要 RPC

哈喽大家好,我是咸鱼随着互联网技术的发展,分布式架构越来越被人们所采用。在分布式架构下,而这时候就需要一种协议来支持远程过程调用,以便实现不同应用程序之间的数据交换和信息传递。其中常用的协议包括 HTTP 协议和 RPC 协议HTTP 协议和 RPC 协议都是用于计算机之间进行通信的协议。那么小伙伴们有没有想过为了解答上面的疑问,我们先从这两个协议的介绍开始。

s_alted的博客 2116

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

有了http为什么还要RPC ?

尽管HTTP广泛用于Web开发,但在需要高性能、复杂函数调用、多语言支持或双向通信的分布式系统中,RPC仍然有明显的优势。RPC简化了远程服务调用的过程,并提供了比HTTP更灵活的通信模型和更高效的传输机制。因此,RPC在许多现代分布式系统、微服务架构、实时通信系统中仍然占据着重要地位。

言之。 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

水w的博客 3274

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

而RPC,因为它定制化程度更高,可以采用体积更小的protobuf或其他序列化协议去保存结构体数据,同时也不需要像HTTP那样考虑各种浏览器行为,比如302重定向跳转啥的。,而像gRPC和thrift这样的具体实现,才是协议,它们是实现了RPC调用的协议。,还可以放各种东西,比如消息体是否被压缩过和消息体格式之类的,只要上下游都约定好了,互相都认就可以了,这就是所谓的。最后留个问题吧,大家有没有发现,不管是HTTP还是RPC,它们都有个特点,那就是消息都是客户端请求,服务端响应。

Atoops的博客 315

有了HTTP,为什么还要RPC

rpc于tcp的区别

xiaoxiaode_shu的博客 1024

有HTTP为什么要有RPC?

从一次"微服务改造后性能下降50%"的架构问题出发,深度剖析HTTP在内部服务调用中的性能瓶颈。通过HTTP文本协议的开销、连接复用的局限、以及服务治理的缺失对比,揭秘为什么公司内部用RPC而不是HTTP、为什么Dubbo比Spring Cloud Feign快5倍、以及阿里为什么从HSF到Dubbo再到gRPC的演进。配合抓包对比协议开销,给出微服务架构的通信协议选型指南。

比较是偷走幸福的小偷 4390

有了 HTTP,为什么还要 RPC?

有了HTTP,为什么还要RPC?

长安明月的博客 650
上一篇: 新技术学习不完全指北:以 Rust 为例
下一篇: 北漂八年架构师大厂面经及答案分享:Redis+多线程+Spring全家桶
跟着我学Java
博客等级 码龄6年 660粉丝 1341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值