RPC基础知识回顾

RPC基础知识回顾

1、先认识一下大家熟悉的HTTP

大家都了解HTTP吧。相信项目中也用过一些。

比如:

  • JDK自带的老旧的HttpURLConnection,封装写的很累,java8之前基于HTTP1.0。在java9开始支持Http2.0
  • Spring的其中RestTemplate都是基于HTTP/1.1的请求。
  • 最新的还有Spring5推出的Webclient,这是基于http2.0的。
  • 嗯…,java11不甘示弱,也在java11推出了Httpclient,不过国内都是用java8,这个也用不到,我也没用过,hhh…
  • SpringCloud组件,Feign/OpenFeign,这是Http请求。

HTTP和RPC的区别

Http:是应用层协议

RPC:是远程调用框架,一般是基于TCP协议,还有些使用HTTP协议。

tips:讲一下TCP和HTTP

忘了叫啥?搜一下。OSI七层模型。OSI(Open System Interconnection)

在这里插入图片描述

这个OSI是理想的规范。

然后实际上实现的这个OSI的模型是,TCP/IP四层模型。

在这里插入图片描述

很明显,HTTP是在应用层,TCP是发生在传输层。所以TCP是效率高于HTTP是基于实际模型出发的。

RPC可以基于TCP协议(传输层),也可以基于HTTP协议(应用层)。

2、触摸RPC的本源

RPC,Remote Procedure Call.

远程程序调用框架。

RPC可以基于TCP协议(传输层),也可以基于HTTP协议(应用层)。

3、RPC的角色

RPC的核心功能主要角色分为:

1、客户端(消费端):理解成,新能源问界M9汽车,开车没电来充电。

2、客户端Stub(桩):理解成充电桩,充电电

3、网络传输:就是那个充电线连接到电网的电线。

4、服务端Stub(桩):电网的输入桩

5、服务端:提供电网的发电厂

原理过程。

偷一张图,其实我解释一下就能明白的。

RPC原理图

  1. 服务消费端(client)以本地调用的方式调用远程服务;
  2. 客户端 Stub(client stub) 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化):RpcRequest
  3. 客户端 Stub(client stub) 找到远程服务的地址,并将消息发送到服务提供端;
  4. 服务端 Stub(桩)收到消息将消息反序列化为 Java 对象: RpcRequest
  5. 服务端 Stub(桩)根据RpcRequest中的类、方法、方法参数等信息调用本地的方法;
  6. 服务端 Stub(桩)得到方法执行结果并将组装成能够进行网络传输的消息体:RpcResponse(序列化)发送至消费方;
  7. 客户端 Stub(client stub)接收到消息并将消息反序列化为 Java 对象:RpcResponse ,这样也就得到了最终结果。over!

相信小伙伴们看完上面的讲解之后,已经了解了 RPC 的原理。

上面也是抄的。

好的,我来总结下:

客户端Stub(桩):

  • RpcRequest 将客户端信息,封装成可以传输的消息体,注意序列化。
  • 找到远程服务的地址

服务端Stub(桩):

  • RpcRequest 反序列化,调用本地的方法
  • 得到方法执行结果并将组装成能够进行网络传输的消息体:
  • RpcResponse(序列化)发送至消费方;

客户端Stub(桩)

  • 接收到消息并将消息反序列化为 Java 对象:RpcResponse ,这样也就得到了最终结果。over!

3、常见框架

1、Dubbo

Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案,
涵盖 Java、Golang 等多种语言 SDK 实现。

Dubbo 提供了从服务定义、服务发现、服务通信到流量管控等几乎所有的服务治理能力,支持 Triple 协议(基于 HTTP/2 之上定义的下一代 RPC 通信协议)、应用级服务发现、Dubbo Mesh (Dubbo3 赋予了很多云原生友好的新特性)等特性。


2、Motan

Motan 是新浪微博开源的一款 RPC 框架,据说在新浪微博正支撑着千亿次调用。不过笔者倒是很少看到有公司使用,而且网上的资料也比较少。

很多人喜欢拿 Motan 和 Dubbo 作比较,毕竟都是国内大公司开源的。笔者在查阅了很多资料,以及简单查看了其源码之后发现:Motan 更像是一个精简版的 Dubbo,可能是借鉴了 Dubbo 的思想,Motan 的设计更加精简,功能更加纯粹。


3、gRPC

这个我做了详细的介绍和入门。

主要就是HTTP2的协议,加上protoBuffer的处理数据的一个序列化协议。

protobuf最好的就是通用性和规范性。

4、Thrift

Apache Thrift 是 Facebook 开源的跨语言的 RPC 通信框架,目前已经捐献给 Apache 基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于 thrift 研发一套分布式服务框架,增加诸如服务注册、服务发现等功能

RPC协议可以基于不同的传输协议实现,如 TCP、HTTP、UDP等。不同的RPC框架或实现可以选择适合自己需求的传输协议。

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

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

相关文章

Transformer家族

在《Transformer原理》中我们介绍了,现在很多大模型都是基于Transformer,其中最出名就是GPT和BERT模型,在GPT和BERT模型被提出来之后,NLP领域也出现了基于Transformer结构的模型,按照模型结构基本可以分为三类&#xf…

MyBatis3源码深度解析(十)MyBatis常用工具类(三)MetaObjectMetaClass

文章目录 3.4 MetaObject3.5 MetaClass 3.4 MetaObject MetaObject是MyBatis提供的反射工具类,可以方便地获取和设置对象的属性值。 该工具类在MyBatis源码中出现的概率非常高。 假设有两个实体类:用户信息User和订单信息Order,一个用户可…

HCIA-Datacom题库(自己整理分类的)_50_路由判断【11道题】

1.以下两条配置命令可以实现路由器RTA去往同一目的地10.1.1.0的路由主备备份。√ [RTA]ip route-static 10.1.1.0 24 12.1.1.1 Permanent [RTA]ip route-static 10.1.1.0 24 13.1.1.1 2.动态路由协议能自动适应网络拓扑的变化。√ 3.如图,只需要在AR1上配置静态…

嵌入式中要能看懂这50个电路分享

大家好,今天主要给大家分享一下,嵌入式工程师常见的硬件电路。 单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD…

lnmp环境部署-im

安装nginx 配置nginx源 vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue安装nginx yum …

宽带波束形成

上一篇介绍了窄带波束形成,当信号的带宽增加,窄带波束形成的性能会降低很多。 首先从窄带beamforming说起 阵列模式:M个阵元组成的线性阵列 当有个输入信号,,对应的信号的入射方向为,。第一个信号是感兴…

break和continue区别及使用

break和continue是跳转控制语句,本篇文章将详细说明这两个的概念及作用。 1、continue 这张图是2024年3月的日期图,列出了每日和每周。 假设上面是上班工作日期,一个月有三十天,但是每周只有七天。简单思考一下,每周的…

el-select下拉框无法显示 elementplus踩坑日常

在使用el-select的时候参考了官方文档&#xff0c;但下拉框无法显示 解决办法1&#xff1a;检查是否没有按需引入eloption只引入了elselect 解决办法2&#xff1a;在el-select里面加入:popper-append-to-body"false" <el-select:popper-append-to-body"fa…

Mybatis八股

Mybatis是什么 Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;加载驱动、创建连接、创建statement等繁杂的过程&#xff0c;开发者开发时只需要关注如何编写SQL语句&#xff0c;可以严格控制sql执行性能&#xff0c;灵…

运行springboot项目提示:java: 错误: 不支持发行版本 18、java: 错误: 无效的源发行版:18

java: 错误: 不支持发行版本 18 解决方法&#xff1a;修改字节码版本&#xff0c;可以多试几次。 java: 错误: 无效的源发行版&#xff1a;18 解决方法&#xff1a; 出现这些错误原因&#xff1a; spring版本与jdk版本不对应 我的spring boot版本是3.2.2&#xff0c;对应的j…

实体店新模式:线下正规实体门店的转型与升级策略

在当今竞争激烈的市场环境下&#xff0c;线下正规实体门店需要不断转型与升级&#xff0c;以适应消费者的需求和市场的变化。 作为一名开鲜奶吧5年的创业者&#xff0c;我见证了无数实体店的成功与失败&#xff0c;下面的文章我将通过具体案例&#xff0c;为大家分享一些实用的…

YOLOv9如何训练自己的数据集(NEU-DET为案列)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;教会你用自己数据集训练YOLOv9模型 YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ 包含注意力机制魔…

MyBatis拦截器四种类型和自定义拦截器的使用流程

文章目录 MyBatis拦截器四种类型和自定义拦截器的使用流程一、MyBatis拦截器四种类型的详细解释&#xff1a;1. **ParameterHandler 拦截器**&#xff1a;2. **ResultSetHandler 拦截器**&#xff1a;3. **StatementHandler 拦截器**&#xff1a;4. **Interceptor Chain 拦截器…

题目 2610: 第十二届省赛真题-杨辉三角形

题目描述: 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下 数列&#xff1a; 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N&#xff0c;请你输出数列中第一次出现 N 是在第几…

前端实现 查询包含分页 以及封装table表格 上手即用!

表格组件是 element plus 中的table 又经过了一层封装 封装的table代码在最底下 <div class"box2"><el-radio-group v-model"radio" style"margin-bottom: 16px"><el-radio-button label"1">类型1</el-radio…

论文学习——基于枢轴点预测和多样性策略混合的动态多目标优化

论文题目&#xff1a;A dynamic multi-objective optimization based on a hybrid of pivot points prediction and diversity strategies 基于枢轴点预测和多样性策略混合的动态多目标优化&#xff08;Jinhua Zheng a,b,d, Fei Zhou a,b,∗, Juan Zou a,b, Shengxiang Yang a…

java集合框架——Collection集合概述

前言 之前学过ArrayList&#xff0c;现在接触到更多集合了。整理下笔记&#xff0c;打好基础&#xff0c;daydayup! 集合体系结构 集合分为单列结合和双列结合&#xff0c;Collection代表单列集合&#xff0c;每个元素只包含一个值。Map代表双列集合&#xff0c;每个元素包含两…

HCIP —— BGP 的社团属性

目录 BGP 的社团属性 1.0X00000000 --- internet 2.0XFFFFFF02 --- no - advertise 3.0XFFFFFF01 --- no - export 4.0XFFFFFF03 --- no-export-subconfed 配置&#xff1a; 第一步&#xff1a;使用路由策略执行对流量打上社团属性 第二步&#xff1a;在对等体通告路由之…

智慧城市与绿色出行:共同迈向低碳未来

随着城市化进程的加速&#xff0c;交通拥堵、空气污染、能源消耗等问题日益凸显&#xff0c;智慧城市与绿色出行成为了解决这些问题的关键途径。智慧城市利用信息技术手段&#xff0c;实现城市各领域的智能化管理和服务&#xff0c;而绿色出行则强调低碳、环保的出行方式&#…

1.Python是什么?——《跟老吕学Python编程》

1.Python是什么&#xff1f;——《跟老吕学Python编程》 Python是一种什么样的语言&#xff1f;Python的优点Python的缺点 Python发展历史Python的起源Python版本发展史 Python的价值学Python可以做什么职业&#xff1f;Python可以做什么应用&#xff1f; Python是一种什么样的…