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.hqwc.cn/news/535597.html

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

相关文章

OceanBase中binlog service 功能的试用

OBLogProxy简介 OBLogProxy即OceanBase的增量日志代理服务,它可与OceanBase建立连接并读取增量日志,从而为下游服务提供了变更数据捕获(CDC)的功能。 关于OBLogProxy的详尽介绍与具体的安装指引,您可以参考这篇官方OB…

离散系统描述模型及其转换

离散系统描述模型及其转换 常用离散模型 \textbf{常用离散模型} 常用离散模型系统传递函数模型 t f \bf{tf} tf零-极点增益模型 z p k \bf{zpk} zpk极点留数模型 r p k \bf{rpk} rpk二次分式模型 s o s \bf{sos} sos状态变量模型 s s \bf{ss} ss 例题 常用离散模型 \textbf{常用…

Arrays.asList转换为List集合后使用add方法抛出UnsupportedOperationException

问题场景: 将String[] 数组转为 List集合,后对list集合进行添加删除报UnsupportedOperationException 百度原因: Arrays.asList返回的集合不支持元素的添加和删除(不支持add、addAll、remove方法),否则抛出…

nginx实时流量拷贝ngx_http_mirror_module

参考: Module ngx_http_mirror_module Nginx流量拷贝ngx_http_mirror_module模块使用方法详解 ngx_http_mirror_module用于实时流量拷贝 请求一个接口,想实时拷贝这个请求转发到自己的服务上,可以使用ngx_http_mirror_module模块。 官网好像…

Java Web实战(四)Web后端之MyBatis-基础用法详解

文章目录 1. 使用MyBatis1-1. JDBC介绍1-2. 数据库连接池1-3. Lombook 2. mybatis 基础2-2. CURD操作2-2-1. delete 操作2-2-2. 预编译sql2-2-3. 插入语句2-2-4. XML-SQL2-2-5. insert主键回显 2-3. 查询语句 3. 动态SQL3-1. <if> MyBatis是一款优秀的 持久层 框架&#…

STM32点亮LED灯与蜂鸣器发声

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

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

C++学习路线

C学习路线思维导图&#xff0c;肝了一个星期终于搞定&#xff0c;这么硬核求个赞不过分吧&#xff1f; 思维导图的内容&#xff0c;也是本文的内容框架&#xff0c;坐稳扶好&#xff0c; C 高速快车要发车了&#xff01; 内容我会持续更新&#xff0c;点赞收藏&#xff0c;…

用户视角的比特币和以太坊外围技术整理

1. 引言 要点&#xff1a; 比特币L2基本强调交易内容的隐蔽性&#xff0c;P2P交易&#xff08;尤其是支付&#xff09;成为主流&#xff0c;给用户带来一定负担&#xff08;闪电网络&#xff09;在以太坊 L2 中&#xff0c;一定程度上减少了交易的隐蔽性&#xff0c;主流是实…

罐头鱼AI批量剪辑短视频系统|视频矩阵获客

智能化管理&#xff0c;轻松批量剪辑短视频&#xff01;AI系统助力您的视频营销提效&#xff01; 随着短视频营销的兴起&#xff0c;我们推出了一款AI批量剪辑短视频系统&#xff0c;QQ:290615413让视频制作更加智能高效。以下是系统的主要功能特点&#xff1a; 首页显示&#…

Android Gradle 开发与应用 (六) : 创建buildSrc插件和使用命令行创建Gradle插件

1. 前言 前文中&#xff0c;我们介绍了在Android中&#xff0c;如何基于Gradle 8.2&#xff0c;创建Gradle插件。这篇文章&#xff0c;我们以buildSrc的方式来创建Gradle插件。此外&#xff0c;还介绍一种用Cmd命令行的方式&#xff0c;来创建独立的Gradle插件的方式。 1.1 本…

技术派整合MyBatis-Plus

Mybatis-Plus大家都熟悉了吧&#xff1f;是一个Mybatis的增强&#xff0c;提供了一些额外功能&#xff0c;比如条件构造器、分页插件、代码生成器等以便我们更专注于业务&#xff0c;而不是SQL语句的编写 官方教程&#xff1a;简介 | MyBatis-Plus 整合MyBatis-Plus 非常简单…