首页 > 其他分享 >美团一面:Spring Cloud 远程调用为啥要采用 HTTP,而不是 RPC?

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

时间:2024-09-03 14:24:51浏览次数:7  
标签:调用 HTTP Spring 美团 RPC 服务器 序列化 Restful

作者:简简单单神经蛙
来源: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,Spring,美团,RPC,服务器,序列化,Restful
From: https://www.cnblogs.com/javastack/p/18394489

相关文章

  • 聊一聊Spring 事务的相关操作
    Java全能学习+面试指南:https://javaxiaobear.cn1、JdbcTemplate1.1、简介Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作1.2、准备工作①搭建子模块搭建子模块:spring-jdbc-tx②加入依赖<dependencies><!--springjdbcSpring持久化层支持jar包-->......
  • springboot环境+redis实现分布式限流
    分布式限流,依赖redis实现1个按秒限流的限流器,知识点:自定义注解,切面,注解的使用源码1.创建自定义注解RateLimit首先,我们定义一个自定义注解RateLimit,它包含code和limit属性。importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;import......
  • 自定义缓存组件 代替 Spring@Cache缓存注解
    自定义缓存组件代替Spring@Cache缓存注解  在实现上述功能之前先来点基础的,redis在SpringBoot项目中常规的用法,好对缓存和redis客户端的使用有一定了解。  1.添加依赖redis客户端依赖(连接redis服务端必备 )<!--客户端依赖二选一--><dependency><groupId>redi......
  • 基于uniapp+SpringBoot的旅游攻略分享互动系统o4pb3 微信小程序
    目录博主介绍技术栈......
  • 通过自定义注解、反射和AOP在Spring Boot中动态修改请求参数
    在SpringBoot中,通过自定义注解、反射以及AOP(面向切面编程)来动态修改请求参数是一种高级且强大的技术组合,它允许开发者在不修改原始方法实现的情况下,对方法的执行过程进行干预和定制。这种技术通常用于日志记录、权限校验、参数校验、数据脱敏等场景。下面,我将详细阐述如何......
  • 基于Springboot的疫苗预约管理小程序的设计与实现(源码+lw+远程部署)
    文章目录前言项目介绍实现页面截图文章参考我的优势我的个人网站代码参考数据库参考源码获取前言❤️博主简介:全网累计客户1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、专注Java、小程序、安卓领域和毕业项目开发❤️⭐️文末获取......
  • 基于Springboot的网上租房系统设计与实现(源码+lw+远程部署)
    文章目录前言项目介绍实现页面截图文章参考我的优势我的个人网站代码参考数据库参考源码获取前言❤️博主简介:全网累计客户1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、专注Java、小程序、安卓领域和毕业项目开发❤️⭐️文末获取......
  • Http不同协议的特性
    网络记录:名称特点Http/1.0 无状态:协议对于事务处理没有记忆功能明文传输:不安全短连接:每发起一个请求,都要新建一次TCP连接,增加了通信开销「请求-应答」的通信模式:同一个连接中,HTTP完成一个事务(请求与响应),才能处理下一个事务。请求是串行的,每一个新请求的发出都要等待上......
  • #基于JavaWeb开发的Java+SpringBoot+vue实现图书借阅销售商城
    基于JavaWeb开发的Java+SpringBoot+vue实现图书借阅销售商城......
  • spring boot 驼峰遇到的一个奇怪问题
    实体类publicclassUserInfoVo{@Schema(description="登录帐号")privateStringuAccount;@Schema(description="用户姓名")privateStringuName;@Schema(description="手机号")privateStringuTel;@Sche......