一文读懂RPC的框架前后逻辑

目录

  • 前言
  • 1. 没RPC
  • 2. 有RPC

前言

对于八股或者知识点,常会被说到RPC框架的知识点

本文主要讲解RPC的基本逻辑

那先讲讲没有RPC的时候是怎样的

1. 没RPC

分布式系统中的服务之间通常采用其他方式进行通信,其中一种常见的方式是使用RESTful API或者SOAP(Simple Object Access Protocol)等协议进行通信

对于以下常见的协议,前两个为开发中常见的,后两个多数在408中听到

  1. RESTful API
    基于 HTTP 协议的通信方式,通过 HTTP 请求和响应来进行通信
    服务之间可以通过发送 HTTP 请求来调用对方提供的服务,服务提供方则将结果封装在 HTTP 响应中返回给调用方
  2. SOAP
    SOAP 是一种基于 XML 的通信协议,定义一种在网络上交换结构化信息的方式
    通过 SOAP,服务之间可以以 XML 格式进行通信,调用方通过构建 SOAP 消息发送给服务提供方,服务提供方解析 SOAP 消息并返回结果
  3. 消息队列
    消息队列是一种常用的异步通信方式,服务之间通过将消息发送到消息队列中,然后由消费者来消费消息,实现服务之间的解耦和异步通信
  4. Socket编程
    使用 Socket 编程直接建立网络连接进行通信
    通过建立 TCP 或者 UDP 连接,服务之间可以直接发送和接收数据

以上的框架知识点都需要开发人员自己处理通信的细节,包括数据的序列化、网络传输、异常处理等

2. 有RPC

有RPC框架,可以大大简化分布式系统的开发和维护,提供了更加便捷的方式来进行服务间的通信

RPC是一种分布式系统中的通信模式,它允许一个程序调用另一个地址空间(通常是另一台机器上)的过程或函数,而不需要显式地处理网络细节

主要的两个概念:

  • 远程过程调用:允许一个计算机程序在网络上调用另一个计算机上的程序的过程
  • 网络通信:RPC通过网络进行通信,通过序列化和反序列化参数和返回值来实现远程调用

其中涉及的工作原理步骤如下:

  1. 客户端调用:客户端通过调用本地的RPC代理对象来发起远程调用
  2. 参数序列化:客户端将调用的参数序列化为字节流
  3. 网络传输:序列化后的数据通过网络传输到远程服务器
  4. 服务端解析:远程服务器接收到数据后,进行反序列化,解析出调用的参数
  5. 本地调用:服务端使用解析出的参数调用本地的函数或方法
  6. 结果序列化:服务端将调用结果序列化为字节流
  7. 网络传输:序列化后的结果通过网络传输到客户端
  8. 客户端解析:客户端接收到结果后,进行反序列化,得到最终的调用结果

其组成成分如下:

  • 通信协议:定义了客户端和服务端之间的通信方式,如HTTP、TCP等。
  • 序列化/反序列化:负责将参数和返回值序列化为字节流,并在接收端进行反序列化。
  • 服务注册与发现:用于注册和发现可用的远程服务,使得客户端能够找到服务的地址。
  • 负载均衡:用于将请求分发到多个服务实例上,以实现负载均衡。
  • 服务调用:实现远程调用的核心逻辑,包括参数的序列化、网络通信、结果的反序列化等。
  • 服务治理:提供监控、熔断、限流等功能,保证服务的稳定性和可用性
优点缺点
简化开发:隐藏了网络通信的细节,使得开发人员可以专注于业务逻辑的实现

提高性能:通过减少网络通信的开销,提高了系统的性能

提高可维护性:将不同的服务模块化,使得系统更易于维护和扩展
可靠性差:网络通信可能会受到各种因素的影响,影响了RPC调用的可靠性

复杂性高:部署和配置可能相对复杂,需要额外的管理和维护成本

性能问题:在某些情况下,由于网络通信的开销,可能会导致性能下降

举一些常见的RPC框架:

  1. gRPC
    由 Google 开发的高性能、开源的 RPC 框架,基于 HTTP/2 协议,使用 Protocol Buffers 作为序列化工具
    支持多种编程语言,并提供了丰富的功能,如流式处理、认证、负载均衡等,适用于构建分布式系统和微服务架构
  2. Apache Dubbo
    开源的高性能 Java RPC 框架,由阿里巴巴开发并开源
    Dubbo 提供丰富的特性,包括服务注册与发现、负载均衡、容错机制等,支持多种通信协议和序列化方式,适用于构建大规模分布式系统
  3. Apache Thrift
    由 Facebook 开发并开源的跨语言的 RPC 框架,支持多种编程语言,包括 C++、Java、Python 等
    使用 IDL(Interface Definition Language)定义接口,支持多种传输协议和序列化协议,适用于构建跨语言的分布式系统
  4. Spring Cloud gRPC
    Spring Cloud 生态中对 gRPC 的支持,使得在 Spring Cloud 中使用 gRPC 更加方便
    提供了集成 gRPC 的各种组件,包括服务注册与发现、负载均衡等,适用于基于 Spring Cloud 的微服务架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

18、ESP32 ESP-NOW 点对点通信

ESP-NOW 是乐鑫自主研发的无连接通信协议,具有短数据包传输功能。该协议使多个设备能够以简单的方式相互通信。 ESP-NOW 功能 ESP-NOW 支持以下功能: 加密和未加密的单播通信;混合加密和未加密的对等设备;最多可携带 250 字节 的有效载荷;发送回调功能…

C#修改默认参数settings文件

右击项目在设置中进行修改: 千万不要在这里改。 如果要在自己的项目里添加这个文件,首先新建个文件夹,然后添加.setting文件,然后再像上面说的那样添加属性。

通过 Java 操作 redis -- String 基本命令

关于 redis String 类型的相关命令推荐看 Redis - String 字符串 要想通过 Java 操作 redis,首先要连接上 redis 服务器,推荐看通过 Java 操作 redis -- 连接 redis 本博客只介绍了一小部分常用的命令,其他的命令根据上面推荐的博客也能很简单…

Penpad再获 Presto Labs 投资,Scroll 生态持续扩张

​Penpad 是 Scroll 生态的 LaunchPad 平台,其整计划像收益聚合器以及 RWA 等功能于一体的综合性 Web3 平台拓展,该平台在近期频获资本市场关注,并获得了多个知名投资者/投资机构的支持。 截止到本文发布前,Penpad 已经获得了包括…

【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型【simulink】

目录 主要内容 仿真模型要点 2.1 整体仿真模型 2.2 电压电流双闭环模块 2.3 SVPWM调制策略 2.4 无功电压模块 2.5 自适应控制策略及算法 部分结果 下载链接 主要内容 该模型为simulink仿真模型,主要实现的内容如下: 随着风力发电、光…

4.请求体

什么是请求体(Request Body) 请求体是客户端发送到API的数据。 响应体是API发送给客户端的数据 API几乎总是必须发送一个响应体,但是客户端并不需要一直发送请求体 定义请求体,需要使用 Pydantic 模型 不能通过GET请求发送请求体发送请求体数据&…

ISIS的工作原理

1.邻居关系建立 (1)IS-IS领接关系建立原则 1、通过将以太网接口模拟成点到点接口,可以建立点到点链路邻接关系。 2、当链路两端IS-IS接口的地址不在同一网段时,如果配置接口对接收的Hello报文不作IP地址检查,也可以建…

基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

FreeBSD安装Miniconda,python启动core dumped的问题

综述: 学会在FreeBSD安装Miniconda后,在一台服务器上安装却碰到问题,安装好后,执行python报错:Segmentation fault (core dumped) 。 以前成功的是在FreeBSD13版本,报错的这个是FreeBSD14版本&#xff0c…

基于FPGA的多路彩灯控制器VHDL代码Quartus仿真

名称:基于FPGA的多路彩灯控制器VHDL代码Quartus仿真(文末获取) 软件:Quartus 语言:VHDL 代码功能: 多路彩灯控制器 综合训练内容要求 设计一台基于FPGA的多路彩灯控制器的设计。要求如下 1.彩灯从左…

SpringBoot中HandlerInterceptor拦截器的构建详细教程

作用范围:拦截器主要作用于Spring MVC的DispatcherServlet处理流程中,针对进入Controller层的请求进行拦截处理。它基于Java的反射机制,通过AOP(面向切面编程)的思想实现,因此它能够访问Spring容器中的Bean…

C语言栈的含义与栈数据操作代码详解!

引言:在本篇博客中,我们将学到数据结构——栈,讲到栈的含义与关于栈的数据操作代码。栈可以在顺序表、双向链表以及单链表的基础上实现,而于本篇博客中,我们选择在顺序表的基础上实现栈。 更多有关C语言和数据结构知识…

2024 AI中转计费平台系统源码

简介: 2024 AI中转计费平台系统源码 文件下载https://www.skpan.cn/CNZjzyC4txX 图片:

vue-img-cutter 图片裁剪详解

前言&#xff1a;vue-img-cutter 文档&#xff0c;本文档主要讲解插件在 vue3 中使用。 一&#xff1a;安装依赖 npm install vue-img-cutter # or yarn add vue-img-cutter # or pnpm add vue-img-cutter 二&#xff1a;构建 components/ImgCutter.vue 组件 <script se…

什么是多模态大模型,有了大模型,为什么还要多模态大模型?

随着人工智能技术的愈演愈烈&#xff0c;其技术可以说是日新月异&#xff0c;每隔一段时间就会有新的技术和理念被创造出来&#xff1b;而多模态大模型也是其中之一。 什么是多模态 想弄明白什么是多模态大模型&#xff0c;那么首先就要弄明白什么是多模态。 简单来说&#x…

2024DCIC海上风电出力预测Top方案 + 光伏发电出力高分方案学习记录

海上风电出力预测 赛题数据 海上风电出力预测的用电数据分为训练组和测试组两大类&#xff0c;主要包括风电场基本信息、气象变量数据和实际功率数据三个部分。风电场基本信息主要是各风电场的装机容量等信息&#xff1b;气象变量数据是从2022年1月到2024年1月份&#xff0c;…

层级实例化静态网格体组件:开启大量模型处理之门

前言 在数字孪生的世界里&#xff0c;我们常常需要构建大量的模型来呈现真实而丰富的场景。然而&#xff0c;当使用静态网格体 &#xff08;StaticMesh &#xff09;构建大量模型时&#xff0c;可能会遇到卡顿的问题&#xff0c;这给我们带来了不小的困扰&#x1f623;。那么&…

Llama3-Tutorial之Llama3 Agent能力体验+微调(Lagent版)

Llama3-Tutorial之Llama3 Agent能力体验微调&#xff08;Lagent版&#xff09; 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 微调过程 使用XTuner在Agent-FLAN数据集上微调Llama3-8B-Instruct&#xff0c;以让 Llama3-8B-Instruct 模型获得智能体能力…

SpringCloud——consul

SpringCloud——consul 一、consul安装与运行二、consul 实现服务注册与发现1.引入2.服务注册3.服务发现 三、consul 分布式配置1.基础配置2.动态刷新3.配置持久化 四、参考 Eureka已经停止更新了&#xff0c;consul是独立且和微服务功能解耦的注册中心&#xff0c;而不是单独作…

Git命令Gitee注册idea操作git超详细

文章目录 概述相关概念下载和安装常见命令远程仓库介绍与码云注册创建介绍码云注册远程仓库操作关联拉取推送克隆 在idea中使用git集成add和commit差异化比较&查看提交记录版本回退及撤销与远程仓库关联 push从远程仓库上拉取&#xff0c;克隆项目到本地创建分支切换分支将…
最新文章