美团一面:Spring Cloud 远程调用为啥要采用 HTTP,而不是 RPC?

news/2024/9/20 17:57:43/文章来源:https://www.cnblogs.com/javastack/p/18394489

作者:简简单单神经蛙
来源:blog.csdn.net/m0_61878423/article/details/124607067

关于SpringCloud远程调用采用HTTP而非RPC。

1、首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的响应,可以更加的灵活处理业务数据,而HTTP协议是跨平台的,符合微服务B/C数据交互的方式,可以的一套服务器对应移动H5、App、小程序提供服务。

2、RPC基于TCP协议,客服端与服务端需要进行三次握手完成可靠连接,第四步进行数据传输。因为TCP是数据传输层,传输协议需要服务器统一编写,进行二进制传输,依赖序列化和反序列化规则,对于大部分应用需要灵活变动数据则不适用,RPC常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

一个简单HTTP请求处理

在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单的HTTP服务器。

RPC

RPC(Remote Procedure Call:远程过程调用):是一种进程间通信方式,是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

通俗的说法就是:比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。

RPC两个核心模块:通讯,序列化。

注意:无论是何种类型的数据,最终都需要序列化转换成二进制流在网络上进行传输,数据的发送方需要将对象序列化转换为二进制流,而数据的接收方则需要把二进制流反序列化为对象。

Restful(HTTP)

Restful 指的是一组架构约束条件和原则。" 如果一个架构符合 Restful 的约束条件和原则,就称它为 Restful 架构。隐藏在 Restful 背后的理念就是使用 Web的现有特征和能力,更好地使用现有 Web 标准中的一些准则和约束。

虽然 Restful 本身受 Web技术的影响很深, 但是理论上 Restful 架构风格并不是绑定在 HTTP 上,只不过目前 HTTP 是唯一与 Restful 相关的实例。所以我们这里描述的 Restful 也是通过 HTTP 实现的 Restful。

RPC和HTTP的区别

首先,两者十分相似,有请求有响应。

不同:

  • RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。
  • Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。

优点

  • RPC更加透明,对用户方便。
  • HTTP方式更加灵活,没有规定API和语言,跨语言,跨平台。

缺点

  • RPC需要在API层面进行封装,限制了开发的语言环境。

选择

  • 速度方面:RPC速度比HTTP快,底层都是TCP,HTTP消息往往比较臃肿,但是可以采用gzip压缩。
  • 难度方面:RPC实现有点儿复杂,HTTP相对比较简单。
  • 灵活性方面:HTTP更灵活,不需要关系实现的细节,可以跨平台,跨语言。

未来发展方向

  • 微服务,强调独立,自治,灵活。RPC限制较多,因此微服务框架中,一般都会采用基于HTTP的rest风格服务。

更多文章推荐:

1.Spring Boot 3.x 教程,太全了!

2.2,000+ 道 Java面试题及答案整理(2024最新版)

3.免费获取 IDEA 激活码的 7 种方式(2024最新版)

觉得不错,别忘了随手点赞+转发哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791638.html

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

相关文章

zabbix“专家坐诊”第254期问答

问题一 Q:老师,我重启zabbix-server服务,恢复正常了,然后过了一两分钟再刷新,有报这个错了。我看zabbix-server日志里没什么有用的信息。A:selinux 关闭一下 Q:是关闭状态 A:看看server 自监控有没有 报错提示,看看有没有什么指标是超过触发器的 Q:没有报错,看起来内…

解决 Exchange 发到邮件组报错 550 5.1.1 User unknown (in reply to RCPT TO command)

版本 2010 只需要关闭:要求所有发件人通过身份验证 位置: Exchange 管理控制台收件人配置通讯组XXX组属性邮件流设置邮件传递设置[√]要求所有发件人通过身份验证取消勾选,再点确定即可参考资料: https://portal.thobson.com/knowledgebase/427/550-511-User-unknown--How-…

Exchange 2016部署实施案例篇-03.Exchange部署篇(中)

上一章《Exchange 2016部署实施案例篇-03.Exchange部署篇(上)》我们对部署Exchange Server 2016的先决条件做了简单的讲解,接下来我们进入先决条件准备工作。 先简单说下环境:服务器名称IP地址系统作用ADSrv01 192.168.1.10 Win2016 GC(已部署完成)ADSrv02 192.168.1.20 Wi…

SpringBoot——关于banner

springboot启动后,控制台会打印一个图案出来,这个图案就叫banner,如果不配置的话打印的是springboot默认的banner 几个可以的生成banner的网址: https://bootschool.net/ascii https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type Something

省钱的开源项目「GitHub 热点速览」W3

本期,我从上周的热门开源项目中挑选了 5 个既省钱又省事,还好玩的开源项目。 首先,推荐的是省钱的电动汽车智能充电管理平台 evcc,它可以根据分时电价智能安排电动车充电时间,从而降低电费,如果你家还有太阳能充电和储能设备,evcc 更能最大限度地利用电能,让你的充电成…

Go语言中的交互式CLI开发:survey库简介

在构建命令行工具时,良好的用户交互体验至关重要。尤其是在需要与用户进行复杂输入的场景下,传统的命令行参数和标志可能显得笨拙。github.com/AlecAivazis/survey/v2 是一个为 Go 语言设计的库,专门用于构建交互式的命令行界面。它提供了多种用户输入方式,让你的 CLI 工具…

专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排

专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排 1. 简介 1.1 RAG 在说重排工具之前,我们要先了解一下 RAG。 检索增强生成(RAG)是一种新兴的 …

Exchange 2016部署实施案例篇-02.活动目录部署篇

其实在写这篇博文之前纠结了好久,到底是该写部署1台AD演示下,还是部署2台活动目录那,比较这个专家还是以Exchang为主,但思来想去最终决定还是部署一主一辅吧,毕竟部署主与辅助还是稍微在步骤上有些不同的,废话不多说,接下来我们开始我们今天的话题,活动目录部署,请大家…

红米k70 pro澎湃os系统安装谷歌商店

第一步第二步 第三步 效果图

PA1-碎碎念

part 1 8.27 方便管理,主要是想熟悉下git的操作 先创建并且切换到一个新的分支: git commit --allow-empty -am "before starting PA1" git checkout -b PA1其中--allow-empty表示允许提交一个空的提交,git默认是不能提交一个空的提交信息,如果当前的文档没有什么…

闯关地图-进阶岛

第1关 在 CompassArena 中选择双模型对话,与InternLM2.5及另外任意其他模型对话,收集 5 个 InternLM2.5 输出结果不如其他模型的对话案例,以及 InternLM2.5 的 5 个 Good Case,并写成一篇飞书文档提交到:https://aicarrier.feishu.cn/share/base/form/shrcnZ4bQ4YmhEtMtnK…

PA1-总结

前言 代码全是自己写的,没看过参考代码,思路也有部分和指导书不一样,算是个原创?然后毕竟pa1是简单的部分,也没有什么值得骄傲的地方,只是作为一次记录。 毕竟自己的水平还是有限,可能部分地方会有些bug。自己成绩也不太好吧,程序设计不会,计算机系统基础说实话是0,只…