一文读懂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.mzph.cn/diannao/7891.shtml

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

相关文章

Java EE/Jakarta EE范畴一览

Java EE(Java Platform, Enterprise Edition)现在已经改名为Jakarta EE,是一套用于开发企业级应用的标准Java平台。它扩展了Java SE(Standard Edition),添加了支持大规模、多层次、可靠、安全、可伸缩和可管…

脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备管理中心、消费管理子系统、订餐管理子系统、水控管…

树莓派的几种登录方式、及登录失败解决方式

使用TF卡安装树莓派的系统后,可以通过编辑TF卡里的文件来设置和启用 “ VNC ” 、“ SSH ” 和 “ 串口 ” 功能。不过,在使用中打开VNC和SSH可能并不直观或方便,因为这些服务通常在树莓派的系统内部配置和启动。但你可以通过以下步骤来设置和…

OpenCV 入门(三)—— 车牌筛选

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

C++11 设计模式7 策略模式 ,Strategy

策略模式的概念: 策略模式(Strategy Pattern)是 C 中常用的一种行为设计模式,它能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&…

每日一题 礼物的最大价值

题目描述 礼物的最大价值_牛客题霸_牛客网 解题思路 这是一个典型的动态规划问题。我们可以使用一个二维数组 dp[][] 来存储到达每个格子时可以获得的最大价值。状态转移方程为 dp[i][j] max(dp[i-1][j], dp[i][j-1]) grid[i][j],表示到达当前格子的最大价值是从…

Windows PC上从零开始部署ChatGML-6B-int4量化模型

引言 ChatGLM-6B是清华大学知识工程和数据挖掘小组(Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University)发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本,约60亿参数。 ChatGML-6B-in…

面试 Java 基础八股文十问十答第三十一期

面试 Java 基础八股文十问十答第三十一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)TreeMap 有了解过吗…

knife4j-openapi3 使用笔记

knife4j官方文档:https://doc.xiaominfo.com/docs/quick-start/start-knife4j-version 增强模式文档:https://doc.xiaominfo.com/docs/features/enhance 1.用法 (1)控制层 Tag(name “用户信息管理”) Tag(name "用户信…

代码随想录第四十六天|单词拆分

题目链接:. - 力扣(LeetCode)

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,…

无卤素产品是什么?有什么作用?

无卤素产品,即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素,虽然在电子设备、材料等领域应用广泛,却也可能潜藏危害。其阻燃剂,一旦在产品生命周期结束后释放,将对土壤和水体造成污染&a…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为r(如果不指定,默认值也是r),然后通过encoding参数指定编码&#xf…

MyBatis入门例子

1、建立与数据库对应的POJO类 2、建立mybatis的配置文件 修改后如下: 3、创建POJO对象和Mysql数据的表之间的映射配置 4、建一个测试方法 实现从数据库中取数一条数据,封装成User对象返回 注意点: 这点,大家应该不陌生了&#x…

照片太大上传不了怎么缩小?教你几招压缩图片

在日常的工作和学习中,我们经常要用到一些图片文件,储存的图片多了之后,会对我们的电脑或者手机有影响,需要我们使用图片处理工具来压缩图片大小,那么有没有比较简单的图片压缩的方法呢?试试今天分享的几个…

【管理咨询宝藏94】某国际咨询公司供应链财务数字化转型方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏94】某国际咨询公司供应链&财务数字化转型方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 172…

VS2019编译 Qt5.15.12 和 Qt6.5.3

参考链接: Windows平台编译Qt5.15.12、6.5.3过程记录_qt 5.15 版本-CSDN博客 软件环境准备 Windows:MSDN系统库-致力于原版windows生态服务 Visual Studio 2022:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux cmake&am…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

3行代码,实现一个取色器

前言 今天发现了一个很好玩的 API ——EyeDropper。 EyeDropper API 提供了一种创建拾色器工具的机制。使用该工具,用户可以从屏幕上取样颜色,包括浏览器窗口之外的区域。 这是 MDN 上对它的介绍,可以取包括浏览器窗口之外的区域。我们一起看看是怎么个事 什么是取色器 取…

611. 有效三角形的个数(双指针)

文章目录 前言一、题目解析二、代码原理1.暴力解法2.双指针优化 三、代码编写总结 前言 在本篇文章中,我们将会带着大家解决一下611. 有效三角形的个数这道题目,本道题木将会用双指针的方法解决。 一、题目解析 给定一个包含非负整数的数组 nums &…