手撕RPC——前言

手撕RPC——前言

  • 一、RPC是什么?
  • 二、为什么会出现RPC
  • 三、RPC的原理
    • 3.1 RPC是如何做到透明化远程服务调用?
    • 3.2 如何实现传输消息的编解码?

一、RPC是什么?

RPC(Remote Procedure Call,远程过程调用)是一种用于在不同的计算机之间进行通信的技术,允许一个程序调用另一个程序中的函数或方法,就像调用本地函数一样,而无需程序员显式地编写通信代码。

二、为什么会出现RPC

在企业开发中,随着业务复杂度的提高,单体应用服务不再能满足需求,于是都会采用分布式框架,随之而来的问题就是单体应用服务被拆分成多个独立部署的服务,他们之间如何通信呢?这里就要用到RPC了,通过使用RPC,客户端可以远程调用位于其他服务器上的方法函数,就像调用本地方法一样。
RPC框架解决在分布式架构中,各个服务之间的网络通信问题的框架。

三、RPC的原理

我们首先从RPC的调用流程入手,然后对各个流程涉及到的一些重要技术再做深入探讨,有些没讲到的技术会在后续文章中结合项目进行讲解。

在这里插入图片描述

具体流程如下

  1. Client以本地调用方式调用服务
  2. Client Stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
  3. Client Stub找到服务地址,并将消息发送到服务端
  4. Server Stub收到消息后进行解码
  5. Server Stub根据解码结果调用本地的服务
  6. 本地服务执行并将结果返回给Server Stub
  7. Server Stub将返回结果打包成消息并发送至消费方
  8. Client Stub接收到消息,并进行解码
  9. 服务消费方得到最终结果

3.1 RPC是如何做到透明化远程服务调用?

通过动态代理模式,在执行该方法的前后对数据进行封装和解码等,让用于感觉就像是直接调用该方法一样,殊不知,我们对方法前后都经过了复杂的处理。

3.2 如何实现传输消息的编解码?

通俗来说,在客户端和服务端通信的过程中,客户端向服务端发送方法调用请求,服务端接收到请求后,在本地调用方法,调用结束后,再向客户端发送响应消息。

所以我们就要自己来封装消息对象的数据结构,以便于双方通信的进行,而我们在进行rpc调用时,不可能是直接在网络中传输消息对象的,网络中的数据都是以字节流方式来传输的,所以我们就需要对这些对象进行编解码,这就要用到数据序列化和反序列化技术了。

序列化:把对象转换为字节序列的过程称为对象的序列化,也就是编码的过程。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化,也就是解码的过程。

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

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

相关文章

52、U-boot2023的移植教程

uboot:https://ftp.denx.de/pub/u-boot/ nxp-uboot:https://github.com/nxp-imx/uboot-imx 1、顶层Makefile 文件加入编译的两种方式:以xxx/xxx.c文件为例 1、使用menuconfig: 先编辑.c所在目录下的Kconfig&#xff0…

实验六:三维图形修改器的综合应用

如果文章有写的不准确或需要改进的地方,还请各位大佬不吝赐教💞💞💞。朱七在此先感谢大家了。😘😘😘 🏠个人主页:语雀个人知识库 🧑个人简介:大家…

20240623 每日AI必读资讯

🤖原生鸿蒙AI浓度要爆表了! - 一年一度华为开发者大会上,余承东首次揭秘“鸿蒙原生智能”Harmony Intelligence! - 华为小艺进化成系统级智能体。 - 一句话实现跨多个应用的规划和任务执行;在第三方APP上随意处理文…

啥移动硬盘格式能更好兼容Windows和Mac系统 NTFS格式苹果电脑不能修改 paragon ntfs for mac激活码

对于同时使用Windows和Mac操作系统的用户而言,选择一个既能确保数据互通又能满足大容量存储需求的移动硬盘格式尤为重要。下面我们来看看啥移动硬盘格式能更好兼容Windows和Mac系统,NTFS格式苹果电脑不能修改的相关内容。 一、啥移动硬盘格式能更好兼容…

简单了解html常用的标签

HTML 一、基础认知 1、注释 1.1、注释的作用和写法 1.1.1、作用 为代码添加解释性,描述性的信息,主要用来帮助开发人员理解代码,浏览器执行代码时回忽略所有注释。 1.1.2、注释的快捷键 在VS Code中:Ctrl / 2、HTML标签的…

Android-系统开发_四大组件篇----探讨-Activity-的生命周期

当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。你可能会觉得既然活动已经不在栈顶了,还怎么会可见呢? 这是因为并不是每一个活动都会占满整个屏幕,比如对话框形式的活动只会占用屏幕中间的部分…

基于SpringBoot+Vue二手交易平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

《Windows API每日一练》5.4 键盘消息和字符集

本节我们将通过实例来说明不同国家的语言、字符集和字体之间的差异,以及Windows系统是如何处理的。 本节必须掌握的知识点: 第31练:显示键盘消息 非英语键盘问题 字符集和字体 第32练:显示默认字体信息 第33练:创建逻…

爬虫笔记15——爬取网页数据并使用redis数据库set类型去重存入,以爬取芒果踢V为例

下载redis数据库 首先需要下载redis数据库,可以直接去Redis官网下载。或者可以看这里下载过程。 pycharm项目文件下载redis库 > pip install redis 然后在程序中连接redis服务: from redis import RedisredisObj Redis(host127.0.0.1, port6379)…

2024青海三支一扶报名流程图解❗

报考公告 1、招考人数: 1910 人 2、报名时间:6月20-6月25 3、笔试时间:7月6日 4、笔试内容:综合知识和能力素质测验 🔴线上报名流程图解 一、本次报名采用线上报名方式,考生需登录《青海省人事考试信息网》…

OpenGL:中点直线算法

理论部分 中点直线算法是通过在像素中确定与理想直线最靠近的像素来进行扫描转换的。 在上图中,假设直线的斜率 0 ≤ m ≤ 1 0\le m \le 1 0≤m≤1。假设当前最近的像素已经确认为 P ( x k , y k ) P(x_k, y_k) P(xk​,yk​),由于 x x x位最大的位移方向,因此直线在 x x x方…

【因果推断python】51_去偏/正交机器学习3

目录 What is Non-Parametric About? What is Non-Parametric About? 在我们继续之前,我只想强调一个常见的误解。当我们考虑使用非参数 Double-ML 模型来估计 CATE 时,我们似乎会得到一个非线性治疗效果。例如,让我们假设一个非常简单的数…

【干货】Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)

4、数据传输与序列化 5、Java虚拟机原理 6、高效IO 设计思想解读开源框架 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有…

大模型微调和RAG的应用场景

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Android高工面试:分享两道阿里P6究极难度算法题,面试完我直接怀疑人生---

10亿数据内筛选最大的100个,要求速度要快。 最近阿里的一道面试题,其实基于多层博弈论,我想我刷过这题,我知道如何偷鸡的。我以为我在第二层,没想到我只在第一层。 第一层 于大顶堆的方式的方式筛选出数组内最​ 大的…

帆软使用总结-新建填报报表

1.界面设计 选择菜单[文件>新建普通报表] 2.分别把B3、C3设置为文本控件 3.选中D3,并设置为下拉控件 4.选择菜单[模板>报表填报属性] 5.选择菜单[模板>模板web属性] 2.效果演示

Vue-表格

需求 代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTE-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…

Git客户端安装步骤详解

git windows7 百度经验:jingyan.baidu.com 方法/步骤 1 从git官网下一个git安装包。 步骤阅读 2 点击git.exe安装程序&#xff0c;点击【next】 ![git的安装和配置](https://imgsa.baidu.com/exp/w500/sign7565f44ba58b87d65042ab1f37092860/21a4462309f790525e5b0144…

软件测试----用例篇(设计测试用例保姆级教程✅)

文章目录 前言一、测试用例概念 二、如何设计测试用例三、设计测试用例的方法3.1基于需求的设计方法3.2具体的设计方法等价类边界值正交法判定表法场景法错误猜测法 前言 在软件开发过程中&#xff0c;测试用例是至关重要的一环。它们帮助软件开发人员和测试人员确定软件是否按…

如何识别商业电子邮件诈骗

复制此链接到微信打开阅读全部已发布文章 不要关闭它标签&#xff01;我知道很少有词组比商业、电子邮件和妥协更无趣。 但这不是一篇无聊的文章&#xff1a;这是一篇关于电子邮件骗子的文章&#xff0c;根据联邦调查局的说法&#xff0c;他们每年通过诈骗人们赚取 260 亿美元…