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.xdnf.cn/news/6129.html

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

相关文章

【论文分享】使用可穿戴相机和计算机视觉评估个人在不断变化的环境中的屏幕暴露情况

本次带来一篇sci的全文翻译,该论文主讲如何使用可穿戴相机和计算机视觉评估个人在不断变化的环境中的屏幕暴露情况! 【论文题目】Assessing personal screen exposure with ever-changing contexts using wearable cameras and computer vision 【篇名翻…

从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录 1.概要2.Vue实例生命周期3.生命周期函数解释4.存在父子组件情况页面执行过程5. 分析路由跳转页面执行过程6.扩展补充7.小结 1.概要 本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的…

SAP固定资产报废BAPI_ASSET_RETIREMENT_POST的主要参数说明<转载>

原文链接:https://mp.weixin.qq.com/s/bzuK0PUfY7Zb-AoAIeWKiQ SAP固定资产的报废在前台通过tcode ABAVN执行相关业务的操作。 比如如下操作。 事务类型:选择如下,可以根据实际要求选择 填写完成必填相关参数后,最后点击保存即可…

鸿蒙基本组件结构

组件结构 1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件 自定义组件中提供了一个build函数,开发者需要在函数内以链式调用的方式进行基本的UI描述,UI描述的方法请参考UI描述…

北航软件算法C4--贪心部分

C4 【写在前面】贪心の食客步骤注意完整代码tip 算法练习赛步骤完整代码 Jade Star步骤完整代码 切钢条步骤tip完整代码【写在后面】 【写在前面】 这学期一直没怎么有时间写blog,一直在赶各种上机和大作业,但是写博客确实能很好的巩固基础,…

Stable Diffusion Web UI 1.9.4常用插件扩展-WD14-tagger

Stable Diffusion Web UI 1.9.4 运行在 WSL 中的 Docker 容器中 tagger 插件的作用是,上传一张图片,反推这张图片可能的提示词。 使用场景就是,想要得到类似的图片内容时使用。 WD14-tagger 安装 Stable Diffusion WebUI WD14-tagger GitH…

如何选择适合的AWS EC2实例类型

在云计算的世界中,Amazon Web Services(AWS)提供了丰富的服务,其中Elastic Compute Cloud(EC2)是最受欢迎的服务之一。选择合适的EC2实例类型对于确保应用程序的性能和成本效益至关重要。我们九河云通过本文…

高效数据集成:聚水潭与金蝶云星空无缝对接的实现

聚水潭数据集成到金蝶云星空:无信息件线上销售退货对接其他入库ok 在企业的日常运营中,数据的高效流转和精准处理至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将聚水潭的数据无缝对接到金蝶云星空&#xf…

电话语音机器人,是由哪些功能构成?

电话语音机器人是自动电话销售、筛选意向客户的,只要录入好行业话术,导入要拨打的手机号,机器人就可以上岗工作了。 电话语音机器人组成部分: 1、语音识别器,主要作用:识别客户讲话内容,从而做…

捆绑推荐综述:方法、应用与挑战

近年来,捆绑推荐系统因其能够通过推荐一组物品(而非单个物品)来提升用户体验并增加销售额,而在学术界和工业界受到了广泛关注。本综述对捆绑推荐进行了全面回顾,首先提出了一种用于探索产品捆绑的分类方法。我们根据不…

【环境搭建】Apache DolphinScheduler 2.0.5

安装 Docker 和 Docker Compose(已经安装可以跳过) 首先,确保你的 Ubuntu 系统是更新过的,可以使用以下命令更新软件包列表: sudo apt-get update 安装 Docker,运行以下命令: sudo apt-get in…

网站架构知识之Ansible(day020)

1.Ansible架构 Inventory 主机清单:被管理主机的ip列表,分类 ad-hoc模式: 命令行批量管理(使用ans模块),临时任务 playbook 剧本模式: 类似于把操作写出脚本,可以重复运行这个脚本 2.修改配置 配置文件:/etc/ansible/ansible.cfg 修改配置文件关闭主机Host_key…

【系统架构设计师(第2版)】七、系统架构设计基础知识

有效的软件体系结构及其明确的描述和设计,已成为软件工程领域中重要的主题。 *注:由于历史原因,研究者和工程人员对**Software Architecture(简称SA)*的翻译不尽相同,本文中软件“体系结构”和“架构”具有…

人工智能之人脸识别(人脸采集人脸识别)

文章目录 前言PySimpleGUI 库1-布局和窗口2 文本框组件3-视频处理图片处理数据库操作数据采集(重要部分)人脸识别(综合部分) 前言 例如:随着人工智能的不断发展,本文主要介绍关于人工智能中GUI和PyMysql相…

深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架

一、Shiro框架概念 (一)Shiro框架概念 1.概念: Shiro是apache旗下一个开源安全框架,它对软件系统中的安全认证相关功能进行了封装,实现了用户身份认证,权限授权、加密、会话管理等功能,组成一…

【JAVA】java 企业微信信息推送

前言 JAVA中 将信息 推送到企业微信 // 企微消息推送messageprivate String getMessage(String name, String problemType, String pushResults, Long orderId,java.util.Date submitTime, java.util.Date payTime) {String message "对接方&#xff1a;<font color\…

AI代币是什么?AI与Web3结合的未来方向在哪里?

近两年随着人工智能的崛起&#xff0c;AI已经渗透到制造业、电商、广告、医药等各个行业&#xff0c;加密货币领域也不例外&#xff0c;人工智能与区块链的融合&#xff0c;让我们看到了独特的数字资产 — AI加密代币。 它的流行始于2022年底&#xff0c;随着OpenAI智能聊天机…

MySQL数据库中的视图

视图 ​ 本篇将开始介绍有关数据库中视图的相关知识点&#xff0c;其中主要包含视图的基本使用&#xff0c;视图规则和限制。 ​ 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据&#xff0c;视图的数据变化会…

Linux基础(八):EXT与XFS文件系统简介

磁盘与文件系统管理 1.文件系统与分区2. inode、block和superblock3.EXT2的文件系统3.1 data block3.2 inode Table3.2.1 inode记录的内容3.2.2 inode特点 3.3 Superblock3.4 Filesystem Description(文件系统描述说明)3.5 block bitmap &#xff08; 区块对照表&#xff09;3.…

clion远程配置docker ros2

CLION与docker中的ROS2环境构建远程连接 设备前提开启SSH服务CLION配置CLION配置CLION IDE远程连接过程实现CLION SSH 远程部署 开启fastlio2debug之旅 设备前提 本地宿主机&#xff1a;UBUNTU 20.04 docker container:ros2_container (内置环境ROS2 humble) 通过之前的tcp连接…