既然有了HTTP,为什么还要RPC?(VIP典藏版)

RPC架构设计方法论(完结) 1 可扩展RPC框架设计图RPC 本质上是一个远程调用,那肯定就需要通过网络来传输数据,所以采用TCP协议和HTTP协议,这两个模块共同构成了传输层。请求是调用了远程方法,方法出入参数都是对象数据,我们需要提前把对象转成可传输的二进制,即序列化过程。我们还需要在二进制数据里适当位置增加分隔符号来分隔出不同的请求,所以我们可以把这两个处理过程放在架构中的同一个模块,统称为协议模块。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/Solo95/

article/details/122640662

c4b027819a4fa732d02ddb3b4e0126e8.jpeg


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。

248ea5c1b20497c716833bf4675c38a7.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协议,对接外部系统使用微服务。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

053a98540bbb5a31bf86a4926be16aa5.png

已在知识星球更新源码解析如下:

5374294c6ac2ee437846757c4a085a7d.jpeg

8a7ab159938a7b9f5cf95041241e3dc0.jpeg

24b708780bcd38c81704f535f729cfe2.jpeg

eae11ffea236b7aba6b1cc6c56d40aee.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
为什么大厂都爱问RPC和REST?顺带把SOA、SOAP一次讲透! RPC、SOA、SOAP、REST,这四个技术名词几乎是Java社招面试中的高频考点,也是很多程序员最容易混淆的知识点。它们究竟有什么关系?又有哪些区别?本文通过一个轻松有趣的故事,带你一次性理清四者的定位、作用和应用场景,面试回答再也不怕说乱! 阅读详情

相关推荐

大数据集群为何必须用VIP?LVS+Keepalived实战解析

虚拟IP(VIP)是分布式系统中实现服务高可用与解耦的核心基础设施,其本质是在TCP/UDP四层提供无状态连接转发,透传客户端真实IP并保障毫秒级故障切换。相比Nginx、HAProxy等用户态代理,LVS基于内核Netfilter的DR模式可达成10Gbps级吞吐与微秒延迟,天然适配HDFS、YARN、HBase等强依赖源IP和低延迟的大数据组件。VIP支撑滚动升级、跨AZ容灾与自动化运维,已成为传统物理环境大数据平台的事实标准;而随着K8s Service与Service Mesh演进,VIP正从核心路

weixin_34080951的博客 394

RPC 调用和 HTTP 调用

文章目录前言网络七层模型RPC架构说道远程调用,得了解下*异步同步*同步调用与异步调用HTTP总结 前言 这边简单的介绍了下RPC的概念相关,对RPC想更深入的认识的可以看我之前写的博客【自定义RPC 有源码】 传送门: 自定义RPC源码实现 网络七层模型 在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等; 第三层:会话层。管理用户的会话,控制用

苦也不苦 954

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 289

一文搞懂OpenFeign(VIP典藏版)

远程调用说白了可以理解为不同服务之间方法的调用,实质上是两台主机间的网络通信 ,涉及到网络通信又必然会有序列化、反序列化,编解码等一些必须要考虑的问题,现在业界内比较流行的一些 RPC 框架,例如:Dubbo提供的是基于接口的远程方法调用,通过rpc远程调用框架,客户端只需要知道接口的定义即可调用远程服务。......

慕白Lee的博客 2030

(程序设计方法与实践)达拉崩吧的酒宴

达拉崩吧的酒宴 Description 很久很久以前,巨龙突然出现,带来灾难带走了公主又消失不见,王国十分危险,世间谁最勇敢,一位勇者赶来大声喊:“我要带上最好的剑,翻过最高的山,闯进最深的森林,把公主带回到面前”……最后,英雄 达拉崩巴斑得贝迪卜多比鲁翁 ,他战胜了巨龙 昆图库塔卡提考特苏瓦西拉松 ,国王把公主 米娅莫拉苏娜丹妮谢莉红 嫁给了 达拉崩巴斑得贝迪卜多比鲁翁 。 于是国王第二天要在 蒙达鲁克硫斯伯古比奇巴勒城 举办酒宴,一共准备了 N 桶酒。此时一位忠诚的仆人来报,有人在其中一桶酒里下毒,

What_If_I的博客 892

HT7533与1117稳压芯片动态特性对比:实测分析与优化策略

本文深入对比了HT7533与1117稳压芯片的动态特性,包括电压过冲和瞬态响应能力,并提供了实测数据与优化策略。HT7533适合低功耗设备,而1117在大电流和稳定性要求高的场景表现更优。文章还分享了PCB布局和电容选择的实用建议,帮助工程师根据项目需求选择合适的稳压芯片。

weixin_28454475的博客 610

一文搞懂Dubbo(VIP典藏版)

RPC(Remote Procedure Call):远程过程调用。目标是为了实现多台计算机/服务器,互相调用方法的解决方案。补充:他只是一个思想,并不是一个实现。通信协议序列化协议。

慕白Lee的博客 1082

Simlink与PX4硬件在环仿真(HIL)实现

Simlink与PX4硬件在环仿真(HIL)实现 介于涉及的知识比较多,这里只是简单的介绍一下,更多内容可以参考阿木实验室《基于matlab模型开发》课程。 硬件在环HIL介绍 simlink与PX4通信实现 硬件在环HIL介绍 为来贯彻万物都可以用数学公式表示,我们以simlink的角度来看我们的无人机,那么UAV可以分为以下的几个模块: 传感器模型 滤波器模块 控制器模...

Zipout的博客 6210

​​放弃RESTful迷信:为什么RPC-like HTTP API才是程序员的救赎​​

当我看到新人对照着“RESTful设计规范”在路由文件里绞尽脑汁地设计时,总忍不住想问:​​你们不觉得这种抽象是在自我折磨吗?​二、核心观点:RPC-like HTTP API更利于程序员的身心健康​- 为了RESTful把login()硬改成POST /sessions+ 直接写/login让所有人立即看懂​​三条生存法则​​:代码可维护性 > 架构纯洁性调试效率 > URL美观度程序员身心健康 > 学术教条​​记住​​:我们是在交付业务价值,不是参加架构选美大赛!

lsw_dabaojian的博客 424

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

2026年【江苏“信息与未来”编程思维】真题及题解(T6:桌面游戏)

王老师青少年编程 533

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 641

RPC服务和HTTP服务对比,Java校招面试经验

二、RPC服务 1、RPC架构 这个叫RPC啊,,恍然大悟! RPC主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了,实际的开发当中是这么做的,项目一般使用maven来管理。比如我们有一个处理订单的系统服务,先声明它的所有接口(这里指的是java中的interface),然后将整个项目打包为一个jar包,服务端这边引入这个二方库,然后实现相应的功能,客户端这边只需要引入这个二方库就可以调用了。 为什么这么做?主要是为了减少客户端这

m0_60388216的博客 182

【实战项目开发技术分享】机器人安全通过狭窄区域的方案

在机器人的应用领域中,有时会遇到需要机器人通过狭窄区域的情况。无论是室内还是室外,机器人需要具备适应性和灵活性,以便在狭窄的空间中进行安全、高效的导航。本文将提供一些如何让机器人通过狭窄区域的实现方案和思路,希望帮助读者可以根据实际的开发需要进行适当调整和扩展。

xiewf的博客 2万+

RPC远程调用(RMI的方式实现RPC、HttpClient实现RPC远程调用)

RPC是什么? 2.3RPC实现的技术: 3:RMI实现RPC远程调用: 3.1RMI介绍 3.2RMI实现vip访问orders 3.2.1开发服务生产者(provider) 3.2.1.1创建orders-provider项目 3.2.1.2创建Orders实体类 3.2.1.3创建OrdersService接口(继承Remote类,抛出该类特有的异常) 3.2.1.4创建O...

刘刘刘刘刘牛皮的博客 1936

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Node.js—RPC通信

Remote Procedure Call —— 远程过程调用 与ajax的相同点: 1.都是两个计算机之间的网络通信 2.需要双方约定一个数据格式 与ajax的不同点: 不一定使用DNS作为寻址服务(RPC一般是在内网里面互相请求) 应用层协议一般不使用http(RPC使用二进制协议) 基于TCP或UDP协议 ...

缓月 1269

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

告别Git的‘RPC failed’和‘HTTP 413’:一份写给非运维同学的协议切换避坑指南

本文针对Git常见的‘RPC failed’和‘HTTP 413’错误,提供了通俗易懂的解决方案。通过比喻快递拒收的场景,解释了HTTPS协议限制和RPC通信问题,并详细介绍了如何切换到SSH协议以提升传输效率和稳定性。适合非运维开发者快速解决Git传输问题。

weixin_30425949的博客 391

Statistics and Machine Learning Toolbox

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

REST“面向资源”,RPC“面向动作”,这句话到底啥意思?

点餐方式自助点餐机 (HTTP/REST)私人厨师 (RPC)关注点菜品(资源)动作(服务)沟通方式标准化的按钮定制化的指令耦合度松耦合(任何顾客都会用)紧耦合(你得知道厨师的电话和技能)效率标准、通用,但可能啰嗦高效、直接,但不够通用。

郑龙飞 738

如何手写一个RPC?,2024年最新先收藏了

现代RPC系统,如JSON-RPC:一个无状态、轻量级的远程过程调用(RPC)协议,以JSON(JavaScript Object Notation)作为数据格式,可以使用各种传输协议。ProxyFactory,动态代理模式,主要在调用的过程当中屏蔽网络通讯相关的一些细节,使得我们开发人员在使用过程中不再关注网络细节。通过方法参数列表,可以得到参数类型列表,然后再通过方法名,就可以得到具体的方法;单体架构初始开发简单,所有的功能都在一个项目中,容易理解整个应用的业务,而且部署也比较简单,就一个服务。

2301_79099473的博客 1182

52 类 110 个常用 Java 组件和框架整理(VIP典藏版)

以下排序是按照从技术组件到开发框架到代码工具,也有一些实在不好分类的,就放到最后了。WEB 容器Tomcathttps://tomcat.apache.org/Jettyhttps://www.jetty.com/JBosshttps://www.jboss.org/Resinhttps://caucho.com/products/resin数据库H2https://h2database.com/...

Java知音 465

架构设计:如何实现一个高性能分布式 RPC 框架_rpc oneway(1)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!一个人可以走的很快,但一群人才能走的更远!

2401_84253182的博客 922

远程调用的两种范式:HTTP 接口 vs 二进制 RPC,到底怎么选?

本文从 "为什么要有远程调用" 出发,把远程调用拆成两条技术路线 —— 一条是基于 HTTP 的 REST/JSON 路线,一条是基于自定义二进制协议的 RPC 路线;再往下展开到 Dubbo、Thrift、gRPC、OpenFeign 这几个常见的框架。像调本地方法一样调远程方法。// 表面上是本地调用,实际发了一次网络请求中间这个动态代理,帮你干了三件事:把方法名和参数序列化成字节流、通过网络发到提供方、把回包反序列化成返回值对象。重点在于:这条链路上跑的不是 HTTP,而是框架自己定义的二进制协议。

2401_87174643的博客 303
上一篇: 用好腾讯开源的这两个前端框架,后端仔也能开发出好看的应用!
下一篇: 一位老程序员的忠告:别想着靠技术生存一辈子
公众号-芋道源码
博客等级 码龄10年 1627粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值