RPC核心实现原理

目录

一、基本原理

二、详细步骤

三、额外考虑因素


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.mzph.cn/bicheng/59778.shtml

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

相关文章

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端

在当今快速发展的物流运输行业中,精准定位与实时监控已成为确保货物安全与高效运输的关键因素。为了满足这一需求,QMCZ10作为一款集4G(LTE Cat1)通讯技术与智能定位功能于一体的终端产品,应运而生。它不仅具备普通定位…

银行卡二要素核验 API 对接说明

本文将介绍一种 银行卡二要素核验 API 对接说明,它可用于校验姓名和银行卡号的真实性和一致性。 接下来介绍下 银行卡二要素核验 API 的对接说明。 注册链接 点击链接注册,即可使用! 申请流程 要使用 API,需要先到 银行卡二要…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

查缺补漏---子网划分方法(定长与不定长子网)

第一类题型&#xff1a; 方法&#xff1a;切蛋糕 例1&#xff1a; 现将一个 IP 网络划分成4个子网&#xff0c;若其中一个子网是 172.16.1.128/26&#xff0c;则下列网络中&#xff0c;不可能是另外三个子网之一的是&#xff08;&#xff09; A.172.16.1.0/25 B.172…

P11229 [CSP-J 2024] 小木棍

[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后&#xff0c;他闲来无事&#xff0c;便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数&#xff0c;满足如下条件&#xff1a; 拼出这个数…

嵌入式开发之进程函数

1、进程创建-fork #include <unistd.h> pid_t fork(void); 创建新的进程&#xff0c;失败时返回-1成功时父进程返回子进程的进程号&#xff0c;子进程返回0通过fork的返回值区分父进程和子进程 pid_t pid; //fork子进程之后&#xff0c;子进程和父进程会同时继续往下执行…

【循环引用及格式化输出】

垃圾回收机制 当一个值在内存中直接引用跟间接引用的量为0时&#xff0c;&#xff08;即这个值没有任何入口可以找到它&#xff09;那么这个值就会被清空回收♻️&#xff0c;释放内存空间&#xff1b; 列表在内存中的存储方式 1&#xff09;引用计数的两种方式 x "ea…

从0开始学习Linux——文本编辑器

往期目录&#xff1a; 1、从0开始学习Linux——Linux简介&安装 2、从0开始学习Linux——搭建属于自己的Linux系统 我们通过前面教程的学习已经了解了什么是Linux&#xff0c;并且我们也定制安装了属于我们自己的一个Linux系统。从这个章节开始我们将开始学习如何去操作Linu…

“北斗三号”如何赋能工业物联网

北斗三号是我国独立自主研发的第三代卫星导航系统&#xff0c;是北斗卫星导航系统的重要组成部分。北斗三号系统具有全球覆盖能力&#xff0c;除了提供基本的定位、导航、授时服务外&#xff0c;还提供高精度和短报文通信服务等。针对产业物联网应用&#xff0c;北斗三号也发挥…

相关衍生 pika+mongo

衍生相关 pikamongo 很多平台不提供完整的数据展示, 翻页只能翻几页,不过提供相关推荐等方法可获取更多的数据; 使用 rabbitmq 是因为数据量可能有几十上百万, 且能持久化 mongo对于数据并不实时的更新到查询里 def main():# mongodb# client MongoClient(localhost, 27017)cl…

Odoo | 免费开源ERP:汽车及零配件行业信息化解决方案

文 / 开源智造 Odoo亚太金牌服务 概述 围绕汽车行业产业链上下游企业的整体业务主线&#xff0c;提供面向汽车主机厂整车个性化制造解决方案&#xff0c;产业链上下游一体化协同解决方案&#xff0c;数字化精益制造解决方案、全价值链质量管理解决方案&#xff0c;数字化运营解…

【Linux】【守护进程】总结整理

守护进程&#xff08;Daemon&#xff09;是运行在后台的进程&#xff0c;通常没有与之关联的控制终端。守护进程在启动后会脱离控制终端&#xff0c;并继续在后台运行&#xff0c;即使用户退出登录或者终端关闭也不会影响它们的运行。守护进程常用于提供网络服务、定期执行任务…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载&#xff0c;传false不…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令&#xff0c;添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令&#xff0c;添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

CSS例子: 横向排列的格子

效果 HTML <view class"content"><view class"item" v-for"item of 5">{{item}}</view></view> CSS .content {height: 100vh;display: flex;flex-direction: row; flex-wrap: wrap;align-content: flex-start;backgro…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候&#xff0c;在苹果开发者中心不能直接上传打包文件&#xff0c;需要下载mac的xcode这些工具进行上传&#xff0c;但这些工具无法安装在windows或linux电脑上。 这里&#xff0c;我们可以不用xcode这些工具来上传&#xff0c;可以用国内的香…

ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染

一、组件基础 1.什么是ArkTS ArkTS是HarmoyOS优选的助力应用开发的语言&#xff0c;ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步的扩展&#xff0c;继承了TS所有的特性&#xff0c;是TS的超集。 扩展的能力如下&#xff1a; 基本语法 …

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前&#xff0c;我们先来了解一下搜索 1 搜索是什么 ① 概念&#xff1a;用户输入想要的关键词&#xff0c;返回含有该关键词的所有信息。 ② 场景&#xff1a; ​ 1互联网搜索&#xff1a;谷歌、百度、各种新闻首页&#xff1b; ​ 2 站内搜索&#xff…