手撕RPC——前言

手撕RPC------前言

一、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调用时,不可能是直接在网络中传输消息对象的,网络中的数据都是以字节流方式来传输的,所以我们就需要对这些对象进行编解码,这就要用到数据序列化和反序列化技术了。

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

相关推荐
黑桃小柒74 小时前
小,最终显示为TCP WINDOW FULL,TCP ZeroWindow。 仔细分析了下LWIP源码,还以为是内存管理出了问题,跟 ...
网络·网络协议·tcp/ip
网络研究院5 小时前
LastPass 发布紧急安全预警:针对主密码的活跃网络钓鱼攻击正在进行中
网络·安全·黑客·攻击·漏洞·风险·钓鱼
便利店10246 小时前
TCP 为什么有时故意跑不快?拥塞控制与滑动窗口一次讲清
服务器·网络协议·tcp·拥塞控制
向夏威夷 梦断明暄7 小时前
【高效管理token成本】OpenClaw精细化分库管理memory以减少token成本的方案的可行性研究
网络
酷可达拉斯9 小时前
Linux操作系统-免密登录远程操作系统
linux·运维·服务器·网络·云计算
aixingkong92110 小时前
AI超节点Scale Up域总线各层优化设计
linux·服务器·网络
组合缺一12 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·服务器·网络协议·http·solon
瓦学妹13 小时前
为什么您的AI总是显示“不支持的区域”?如何解决?
大数据·网络·人工智能
优化Henry13 小时前
5G站点软件错误告警与资源激活超时两类典型告警分析与处理
网络·笔记·学习·5g·信息与通信
coward9113 小时前
千兆以太网卡(Ethernet)驱动初始化完成,但是无法udhcpc获取ip
服务器·网络·嵌入式硬件·tcp/ip