0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RPC接口和HTTP接口的区别与联系

jf_ro2CN3Fa 来源:芋道源码 2023-06-17 14:54 次阅读

HTTP服务

RPC接口和HTTP接口的区别与联系

参考文献

HTTP接口和RPC接口都是生产上常用的接口,顾名思义,HTTP接口使用基于HTTP协议的URL传参调用,而RPC接口则基于远程过程调用。

RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议),两者前者是一种方法,后者则是一种协议。两者都常用于实现服务,在这个层面最本质的区别是RPC服务主要工作在TCP协议之上(也可以在HTTP协议),而HTTP服务工作在HTTP协议之上。由于HTTP协议基于TCP协议,所以RPC服务天然比HTTP更轻量,效率更胜一筹。

两者都是基于网络实现的,从这一点上,都是基于Client/Server架构。

RPC(Remote Procedure Call)服务

RPC服务基本架构包含了四个核心的组件,分别是Client、Server、Clent Stub以及Server Stub。

0e1adabe-0cba-11ee-962d-dac502259ad0.png

Client (客户端) :服务调用方。

Server(服务端) :服务提供方。

Client Stub(客户端存根) :存放服务端的地址消息,负责将客户端的请求参数打包成网络消息,然后通过网络发送给服务提供方。

Server Stub(服务端存根) :接收客户端发送的消息,再将客户端请求参数打包成网络消息,然后通过网络远程发送给服务方。

RPC效率优势明显,在实际开发中,客户端和服务端在技术方案中约定客户端的调用参数和服务端的返回参数之后就可以各自开发,任何客户端只要按照接口定义的规范发送入参都可以调用该RPC服务,服务端也能按接口定义的规范出参返回计算结果。这样既实现了客户端和服务端之间的解耦,也使得RPC接口可以在多个项目中重复利用。

RPC调用分为同步方式和异步方式。同步调用即客户端等待调用完成并返回结果;异步调用即客户端不等待调用执行完成返回结果,变成单向调用或者通过回调函数等待接收到返回结果的通知。

流行的RPC框架

目前流行的RPC框架有很多,下面介绍常见的三种。

gRPC: gRPC是Google公布的开源项目,基于HTTP2.0协议,并支持常见的众多编程语言。HTTP 2.0协议是基于二进制的HTTP协议的升级版本,gRPC底层使用了Netty框架。

Thrift: Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL文件自动生成服务代码框架。Thrift对于底层的RPC通讯都是透明的,用户只需要对其进行二次开发即可,省去了一系列重复的前置基础开发工作。

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

HTTP服务

通过HTTP URL调用的服务,浏览器访问本质上也算HTTP服务,不同的是需要客户端浏览器渲染服务端返回的结果。

HTTP服务开发即开发ERESTful风格的服务接口。在接口不多、系统之间交互较少的情况下,是一种信息传递的常用通信手段。

HTTP接口的优点是简单、直接、开发方便,利用现成的HTTP协议进行传输。在服务开发的时候,约定一个接口文档,严格定义输入和输出,明确每一个接口的请求方法和需要的请求参数及其格式。

在内部子系统较多、接口较多的情况下,RPC框架的好处就凸显出现了,首先是长连接,不必每次通信都要像HTTP那样三次握手,减少了网络开销;其次是RPC框架一般都有注册中心,有丰富的监控发布方法;RPC接口的发布、下线、动态扩展等对调用方是无感知的、统一化的操作。

Restful

Restful web service是一种常见的rest应用,统一用于命名遵循rest风格的web服务。Restful服务是一种ROA(Resource-Oriented Architecture,面向资源的架构)。举一个例子就可以理解了:

Restful出现之前的HTTP接口:

http://127.0.0.1/user/query GET 根据用户id查询用户数据

http://127.0.0.1/user/save POST 新增用户

http://127.0.0.1/user/update POST 修改用户信息

http://127.0.0.1/user/delete GET/POST 删除用户信息

Restful式HTTP接口:

http://127.0.0.1/user GET 根据用户id查询用户数据

http://127.0.0.1/user POST 新增用户

http://127.0.0.1/user PUT 修改用户信息

http://127.0.0.1/user DELETE 删除用户信息

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

RPC接口和HTTP接口的区别与联系

RPC接口即相当于调用本地接口一样调用远程服务的接口;HTTP接口是基于http协议的post接口和get接口(等等,2.0版本协议子支持更多)。

传输协议

RPC:可以基于TCP协议,也可以基于HTTP协议。

HTTP:基于HTTP协议。

传输效率

RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2.0协议,也可以很好地减少报文体积,提高传输效率。

HTTP:如果时基于HTTP1.1的协议,请求中会包含很多无用的内容;如果是基于HTTP2.0,那么简单地封装一下还是可以作为一个RPC使用的,这时标准RPC框架更多是服务治理。

性能消耗

RPC:可以基于thrift实现高效的二进制传输

HTTP:大部分是通过json实现的,字节大小和序列化耗时都比thrift要更消耗性能

负载均衡

RPC:基本都自带了负载均衡策略

HTTP:需要配置Nginx,HAProxy实现

服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

RPC:能做到自动通知,不影响上游

HTTP:需要事先通知,修改Nginx/HAProxy配置

RPC主要用于公司内部服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器调用,APP接口调用,第三方接口调用等等。

RPC和HTTP都可以用于实现远程过程调用,如何选择?

从速度上看,RPC比HTTP更快,虽然底层都是TCP,但是http协议的信息往往比较臃肿,不过可以采用gzip压缩

从难度上看,RPC实现较为复杂,http相对简单

从灵活性上看,HTTP更胜一筹,因为它不关心实现细节,跨平台,跨语言

两者有不同的使用场景:

如果对效率要求更高,并且开发过程使用统一的技术栈,那么RPC还是不错的

如果需要更加灵活,跨语言、跨平台,显然HTTP更合适

再插一句,最近新兴的微服务概念更加强调独立、自治、灵活,而RPC限制较多。因此微服务框架中,一般都会采用HTTP的Restful服务,像在公司内部使用hsf协议,对接外部系统使用微服务。

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RPC
    RPC
    +关注

    关注

    0

    文章

    110

    浏览量

    11493
  • 浏览器
    +关注

    关注

    1

    文章

    1007

    浏览量

    35214
  • HTTP接口
    +关注

    关注

    0

    文章

    21

    浏览量

    1763

原文标题:既然有了HTTP,为什么还要RPC?(VIP典藏版)

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通信网络技术:RPC服务和HTTP服务的区别分析

    很长时间以来都没有怎么好好搞清楚 RPC(即 Remote Procedure Call,远程过程调用)和 HTTP 调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive
    的头像 发表于 11-26 13:52 2685次阅读

    通过http使用RPC服务的方法

    通过http使用RPC服务
    发表于 02-16 07:18

    Restful 和 RPC 是什么关系与区别

    本文详细介绍了关于Restful 和 RPC的关系与区别,详细分析请看下文。
    的头像 发表于 02-07 15:35 3.8w次阅读
    Restful 和 <b class='flag-5'>RPC</b> 是什么关系与<b class='flag-5'>区别</b>

    端口和接口有什么区别联系

    本文首先介绍了端口的概念、分类及作用,其次介绍了接口的概念与显示器接口的类型,最后介绍了端口和接口区别联系
    发表于 04-23 16:54 6.1w次阅读
    端口和<b class='flag-5'>接口</b>有什么<b class='flag-5'>区别</b>和<b class='flag-5'>联系</b>吗

    接口测试与前端测试的区别联系

    主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?
    发表于 05-26 09:44 4515次阅读
    <b class='flag-5'>接口</b>测试与前端测试的<b class='flag-5'>区别</b>与<b class='flag-5'>联系</b>

    为什么需要RPC接口

    论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP
    发表于 07-13 17:46 2581次阅读

    闲聊HDMI、DVI、VGA三个接口区别联系

    今天来聊聊一篇关于dvi接口:HDMI、DVI、VGA接口有什么联系的文章,现在就为大家来简单介绍下dvi接口:HDMI、DVI、VGA接口
    发表于 07-17 10:55 5345次阅读

    总线、接口和协议的区别联系深度解读

    总线、接口和协议,这三个词常常被联系在一起,但是我们心里要明白他们的区别
    的头像 发表于 09-01 13:49 2.9w次阅读
    总线、<b class='flag-5'>接口</b>和协议的<b class='flag-5'>区别</b><b class='flag-5'>联系</b>深度解读

    HTTPRPC

    TCP是传输层的协议,而基于TCP造出来的HTTP和各类RPC协议,它们都只是定义了不同消息格式的应用层协议而已。
    的头像 发表于 11-23 08:54 878次阅读
    <b class='flag-5'>HTTP</b>和<b class='flag-5'>RPC</b>

    HTTPRPC区别联系

    HTTPRPC的相同点:底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务。
    的头像 发表于 11-23 08:55 1777次阅读
    <b class='flag-5'>HTTP</b>和<b class='flag-5'>RPC</b>的<b class='flag-5'>区别</b>与<b class='flag-5'>联系</b>

    RPC接口HTTP接口哪一个更好?

    HTTP接口RPC接口都是生产上常用的接口,顾名思义,HTTP
    发表于 06-13 09:18 1154次阅读
    <b class='flag-5'>RPC</b><b class='flag-5'>接口</b>与<b class='flag-5'>HTTP</b><b class='flag-5'>接口</b>哪一个更好?

    基于Client/Server架构的HTTP接口RPC接口

    HTTP接口RPC接口都是生产上常用的接口,顾名思义,HTTP
    发表于 06-13 09:18 716次阅读
    基于Client/Server架构的<b class='flag-5'>HTTP</b><b class='flag-5'>接口</b>和<b class='flag-5'>RPC</b><b class='flag-5'>接口</b>

    什么是HTTP协议?什么是RPC协议?二者如何选择使用?

    为什么有了HTTP,还需要RPC协议呢?在进行说明之前,首先我们需要了解什么是HTTP协议,什么是RPC协议。
    的头像 发表于 08-11 09:25 2468次阅读
    什么是<b class='flag-5'>HTTP</b>协议?什么是<b class='flag-5'>RPC</b>协议?二者如何选择使用?

    RPC 和 REST 区别是什么

    区别呢? 有使用经验的人,就会知道: 前者(RESTful)主要用于各组件之间的通信(如nova与glance的通信),或者说用于组件对外提供调用接口 而后者(RPC)则用于同一组件中各个不同模块
    的头像 发表于 11-02 10:40 2965次阅读
    <b class='flag-5'>RPC</b> 和 REST <b class='flag-5'>区别</b>是什么

    jtag接口和swd接口区别

    jtag接口和swd接口区别 JTAG (Joint Test Action Group) 接口和 SWD (Serial Wire Debug)
    的头像 发表于 12-07 15:29 5826次阅读