RPC核心实现原理

news2024/11/28 5:33:25

目录

一、基本原理

二、详细步骤

三、额外考虑因素


RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤:

简单介绍就是:

步骤1:服务提供方启动时将服务注册到注册中心。

步骤2:服务消费方启动时从注册中心订阅自己需要服务的地址。

步骤3:注册中心把已经注册的服务提供者地址,返回给消费方。

步骤4:消费方根据路由规则与负载均衡策略,选择一个提供者地址进行调用。

步骤5:调用双方与监控平台建立定时发送机制,用来统计调用次数与耗时等相关数据。

一、基本原理

RPC允许程序在不同的计算机上通过网络进行函数调用,使得分布式系统中的节点可以像调用本地函数一样调用远程函数,提供了一种简单、高效的分布式通信方式。RPC的基本原理是:客户端(Client)通过调用本地的客户端代理(Proxy/Stub)来调用远程服务器(Server)上的服务。客户端代理将调用请求序列化成网络协议中的消息,并通过网络发送给服务器端。服务器端接收到消息后,解析消息,执行相应的服务,并将执行结果序列化成消息返回给客户端。客户端代理再将结果反序列化并返回给客户端,就像调用本地函数一样。

二、详细步骤

  1. 客户端代理:客户端通过调用本地的客户端代理来触发远程函数的调用。客户端代理负责将函数参数进行封装,这通常涉及到将参数序列化为适合网络传输的格式(如JSON、XML、Protobuf等)。
  2. 传输:封装后的请求通过网络传输给服务端。传输是RPC中非常重要的一环,它负责将封装后的请求从客户端传输到服务端,并将服务端的响应传输回客户端。传输可以基于不同的协议和传输层实现,如TCP、UDP、HTTP等。其中,HTTP协议因其跨平台、跨语言的特点,以及较好的可扩展性和安全性,被广泛应用于RPC的实现中。
  3. 服务端代理:在服务端,接收到客户端发送的请求后,服务端代理(Skeleton/Server Stub)负责将请求解析并调用本地的函数进行处理。服务端代理将处理结果封装成响应,这同样涉及到序列化,以便通过网络发送回客户端。
  4. 执行:服务端执行被调用的函数,并将结果返回给服务端代理。
  5. 响应:服务端代理将处理结果封装成响应后,通过传输层发送回客户端。客户端代理接收到服务端的响应后,负责将响应解析(即反序列化)并返回给调用方。

三、额外考虑因素

除了上述的基本原理和步骤外,RPC的实现还需要考虑一些额外的问题:

  1. 数据编码和解码:即将函数参数和返回值进行序列化和反序列化,这是为了在不同的语言和平台之间实现数据的互通。
  2. 服务注册与发现:客户端需要知道服务端的地址才能发起请求。这可以通过中心化的服务注册中心来实现,客户端可以从注册中心获取到可用的服务地址。
  3. 负载均衡:在分布式系统中,可能会有多个服务端实例提供相同的服务。为了优化性能和资源利用,需要引入负载均衡机制,将请求均匀地分发到不同的服务实例上。
  4. 容错机制:由于网络通信的不确定性,RPC调用可能会失败。因此,需要引入重试、超时、熔断等机制来处理这些失败情况,保证系统的可靠性和稳定性。

综上所述,RPC的实现原理是一个复杂而精细的过程,它涉及到网络通信、数据序列化与反序列化、服务注册与发现、负载均衡以及容错机制等多个方面。通过这些机制和技术手段的共同作用,RPC实现了分布式系统中不同节点之间的高效、可靠的函数调用。

 参考:

手写RPC框架第三章《RPC中间件》 | 小傅哥 bugstack 虫洞栈

itstack-demo-rpc: RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节简单的实现rpc基础功能,来深入学习rpc是如何交互通信的;手写类似dubbo的rpc框架第一章《自定义配置xml》 手写类似dubbo的rpc框架第二章《netty通信》 手写类似dubbo的rpc框架第三章《rpc框架》在这些章节中我们会学习到以下知识点; 1、自定义xml的配置和解析 2、netty 3、JDKProxy 4、客户端通过注册中心,发布和获取链接者 5、服务的通过JDKProxy,进行调用方法

https://gitcode.net/KnowledgePlanet/SpringBootStarter?page=1

一文详解RPC框架核心原理与手写实战

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

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

相关文章

Kaggle生物信息学挑战:酶稳定性预测大赛

背景介绍 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。 概念解释 X 残基:假设 它用 红色表示 , Y 残基:假设…

【开发工具——依赖管理工具——Maven】

1. Maven介绍 Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model,POM) 的概念,Maven 可以从一条中心信息管理项目的构建、报告和文档。 对于开发者来说,Maven 的主要作用主要有 3 个: …

vue3+vite搭建脚手架项目本地运行electron桌面应用

1.搭建脚手架项目 搭建Vue3ViteTs脚手架-CSDN博客 2.创建完项目后,安装所需依赖包 npm i vite-plugin-electron electron26.1.0 3.根目录下创建electron/main.ts electron/main.ts /** electron/main.ts */import { app, BrowserWindow } from "electron&qu…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中,都有网络组件用于加载网页,鸿蒙ArkTS中也有类似的组件。   web组件,用于加载指定的网页,里面有很多的方法可以调用,虽然现在用得比较少,了解还是必须的。   演…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上,给定无人车起始点和目标点后,按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率,减少交…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

11月7日(内网横向移动(二))

利用系统服务 SCShell SCShell是一款利用系统服务的无文件横向移动工具。与传统的创建远程服务的方法不同&#xff0c;SCShell利用提供的用户凭据&#xff0c;通过ChangeServiceConfigA API修改远程主机上的服务配置&#xff0c;将服务的二进制路径名修改为指定的程序或攻击载…

【YOLOv11[基础]】目标检测OD | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO11.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

力扣—不同路径(路径问题的动态规划)

文章目录 题目解析算法原理代码实现题目练习 题目解析 算法原理 状态表示 对于这种「路径类」的问题&#xff0c;我们的状态表示⼀般有两种形式&#xff1a; i. 从[i, j] 位置出发。 ii. 从起始位置出发&#xff0c;到[i, j] 位置。 这⾥选择第⼆种定义状态表⽰的⽅式&#xf…

传统RAG流程;密集检索器,稀疏检索器:中文的M3E

目录 传统RAG流程 相似性搜索中:神经网络的密集检索器,稀疏检索器 密集检索器 BGE系列模型 text-embedding-ada-002模型 M3E模型 稀疏检索器 示例一:基于TF-IDF的稀疏检索器 示例二:基于BM25的稀疏检索器 稀疏检索器的特点与优势 传统RAG流程 相似性搜索中:神经…

Javascript 获取设备信息 工具

JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏览器信息、生成浏览器指纹、日期、生肖、周几等) Get Device Info Online GitHub - skillnull/DeviceJs: JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏…

【数据仓库】

1、概述 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。 数据仓库是企业中用于集中存储和管理来自多个源的经过处理和组织的数据的系统。它为复杂的查询和分析提供了一个优化的环境&#xff0c;使得用户能够执行高级数据分析&#xff0c;以支持…

成都栩熙酷网络科技有限公司抖音小店探索

在数字经济的浪潮中&#xff0c;电商行业正以前所未有的速度蓬勃发展&#xff0c;而短视频平台的崛起更是为这一领域注入了新的活力。成都栩熙酷网络科技有限公司&#xff08;以下简称“栩熙酷”&#xff09;&#xff0c;作为这股浪潮中的佼佼者&#xff0c;凭借其敏锐的市场洞…

基于ViT的无监督工业异常检测模型汇总

基于ViT的无监督工业异常检测模型汇总 论文1&#xff1a;RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection&#xff08;2024&#xff09;1.1 主要思想1.2 系统框架 论文2&#xff1a;Inpainting Transformer for Anomaly Detecti…

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼&#xff0c;你准备怎么做&#xff0c;你会将活鱼红烧或将死鱼清蒸吗&#xff1f;好的食材只需要最简单的烹饪&#xff0c;不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点&#xff0c;广域网就是那条死鱼&#xff0c;数据中心则是那条活鱼。…

基于Python的旅游景点推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

程序员的生活周刊 #7:耐克总裁被裁记

0. 庙宇 这张图来自 Tianshu Liu&#xff0c; 被树木环绕的宝塔庙宇 1. 耐克总裁 耐克最近的总裁 John Donahoe 干了 5 年&#xff0c;终于被裁掉了。 这位总裁即不了解球鞋文化&#xff0c;也没有零售经验&#xff0c;但不懂事的董事会还是聘用它&#xff0c;寄托把耐克从运…

全面解析:区块链技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 区…

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

每日OJ题_牛客_春游_贪心+数学_C++_Java

目录 牛客_春游_贪心数学 题目解析 C代码 Java代码 牛客_春游_贪心数学 春游 描述&#xff1a; 盼望着&#xff0c;盼望着&#xff0c;东风来了&#xff0c;春天脚步近了。 值此大好春光&#xff0c;老师组织了同学们出去划船&#xff0c;划船项目收费如下&#xff1a;…