RPC基础知识回顾

news2024/9/21 0:47:30

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.coloradmin.cn/o/1512988.html

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

相关文章

SpringCloudEureka理论与入门

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po,mapper,controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…

当HR问你:“对于你申请的这个岗位,你觉得你欠缺什么?”【文章底部添加进大学生就业交流群】

当HR问这个问题时,你可以展示自我认识和诚实,同时展现你对自己的积极态度和学习能力。以下是一个可能的回答示例: "对于我申请的这个岗位,我认为我可能欠缺一些行业特定的经验。虽然我在相关领域有一定的工作经验和技能&…

H5 网课宣传引导跳转微信单页源码

源码名称:网课宣传引导跳转微信单页 源码介绍:一款网课销售宣传单页源码,源码支持一键复制微信号并跳转打开微信功能。 需求环境:H5 提示:源码仅支持复制微信和跳转打开微信,客户需自行贴贴搜索添加好友…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的石头剪刀布手势识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要:本篇博客深入探讨了使用深度学习技术开发石头剪刀布手势识别系统的过程,并分享了完整代码。该系统利用先进的YOLOv8、YOLOv7、YOLOv6、YOLOv5算法,并对这几个版本进行性能对比,如mAP、F1 Score等关键指标。文章详细阐述了YOL…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

碳实践 | 基于“界、源、算、质、查”五步法,实现企业组织碳核算

碳排放核算是夯实碳排放统计的基础,提高碳排放数据质量的关键,同时,将推动能耗“双控”向碳排放“双控”转变。总体来看,碳核算分为区域层面、组织层面和产品层面的碳核算,这三个层面的意义和计算方法完全不同。本文将…

SingleSpa微前端基本使用以及原理

先说说singleSpa的缺点 不够灵活 不能动态加载css文件css不隔离没有js沙箱的机制 ( 没有全局对象 每次切换的应用 都是同一个window ) 但是刚刚接触微前端 可以了解一下微前端的基础使用 qiankun微前端框架已经很成熟 也是基于singleSpa来实现的 点击跳转qiankun的基础使用 大…

6.同步异步、正则表达式

JS执行机制 js的特点:单线程,同一时间只能做一件事 可以通过多核CPU解决这个问题,允许js脚本创建多个线程,于是js出现了同步和异步 同步 程序执行的时候按照顺序依次执行 异步 程序执行的时候,会跳过某个步骤继续…

装饰者模式-C#实现

可以使用装饰者模式来动态地给一个对象添加额外的职责。 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。 在装饰者模式中各个角色有: 抽象构件(Phone)角色&#…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

STM32点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平,用以驱动Led蜂鸣器等外设,以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集灯 GP…

EM算法详解

EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐…

3D产品配置器帮助您更快进入市场的 5 种方式

如果您的电子商务商店可以从产品配置器的使用中受益(而且大多数都可以),您还应该知道,此功能还可以帮助您的公司采用更具创新性的产品开发姿态。 更简单地说:它可以帮助您更快地构建更好的产品。 继续阅读以了解3D 产…

FPGA Vivado环境下实现D触发器

题目要求:使用Verilog HDL语言设计一个D触发器。请提交程序源代码和Word格式的作业文档,作业文档中应给出程序源代码及RTL分析原理图。 D触发器的工作原理: 初始状态下,触发器处于复位状态,输出为复位信号的稳定状态…

springboot266基于Web的农产品直卖平台的设计与实现

农产品直卖平台的设计与实现 摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了&#x…

2024 前端javaScript+ES6

JavaScript 基础 1、基本数据类型: 1.1 基本数据类型: Number(数值):表示数字,包括整数和浮点数。例如:5、3.14。 String(字符串):表示文本数据&#xff…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此,首先需要自定义一…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

谷歌破解 OpenAI 模型关键信息;微软更改默认浏览器,不再主推 Edge 丨 RTE 开发者日报 Vol.163

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

fate隐私求交案例

intersect组件是解决纵向联邦学习中的隐私求交问题 fate隐私求交的方式有三种&#xff1a;raw,rsa,dh。raw方式不安全&#xff0c;rsa和dh方式是安全的&#xff0c;dh是基于对称加密的安全交集 rsa是基于RSA(非对称加密)的安全交集&#xff0c;&#xff0c;dh方法也用于安全的…