RPC相关知识

文章目录


1、RPC是什么?

RPC即远程过程调用,不同于本地调用,他调用的是远端机器的函数或方法,且不需要关心底层的实现细节,如传输协议和网络协议。对于调用者来说,和调用本地方法一样,RPC调用的是一个远端对象,调用者和被调用者是处于不同的地址空间,要想完成调用,必须实现以下几个能力:
服务发现

由于调用的是远端对象,因此需要一个进程可以定位到调用的服务器地址以及调用的具体方法,一般可以通过注册中心或者哈希查找来实现,将被调的接口注册到某个地方,比如使用CallerId和函数名作为映射,调用者通过CallerId进行调用,服务端收到调用请求后,通过CallerId查找到对应函数,再执行后续处理流程。

序列化和反序列化

调用者和被调用者处于不同的机器上,因此函数参数及其他一些Context信息需要经过网络传输才能到达服务端,网络传输的是二进制数据,因此RPC需要支持将函数参数(如基本类型int、long、map以及自定义类型等)可以序列化为网络可以传输的二进制数据,同时,也需要支持将二进制数据反序列化为程序可以处理的数据类型,是序列化的逆过程。

网络传输

网络传输协议和RPC本身没有关系,一般使用TCP进行网络传输,通过HTTP或者UDP也是可以完成RPC所需要的功能的。

如上,如果某个服务框架实现了上述这些功能,就是一个RPC框架,通过此框架便可以像调用本地方法一样来调用远端方法。

2、为什么使用RPC?

如果是一个功能比较简单的应用,可以将所有功能实现在一个服务中或者实现在多个服务中,但是部署在一个机器上,如此,接口间调用要么在同一进程内或者是本地进程间通信。随着业务的发展,服务功能持续迭代,单体应用出现性能瓶颈,因此需要考虑对服务进行拆分,根据业务功能划分为不同的模块,不同的模块部署到不同集群上,模块间进行通信完成功能。如将服务的管理域和执行域进行拆分,不仅是服务架构更合理清晰,也方便根据不同的模块划分不同的资源,保证服务的整体性能。

一个服务拆分为不同的模块,或者单体应用拆分为多个微服务时,此时便需要RPC出场了,不同模块及不同服务间都需要RPC才能完成通信。可以说RPC是分布式系统架构或者微服务架构必不可少的实现手段。

3、RPC过程

客户端调用远程方法

client stub客户端存根序列化消息

协议编码

client stub找到服务器地址,网络传输

服务端收到反序列化

调用本地方法返回结果

服务端序列化传给客户端

客户端反序列化给调用者

面试相关

相关推荐
路由侠内网穿透.几秒前
本地部署静态网站托管平台 Netlify 并实现外部访问(Windows 版本)
网络·网络协议
akarinnnn6 分钟前
深入理解内存函数:原理、应用与优化
c语言·网络·数据结构·算法
Patrick_Wilson7 分钟前
CLI 工具突然变慢了?别急着怀疑网络,按这四步排查
网络协议·性能优化·命令行
郭老二22 分钟前
【C++】RPC:远程程序调用
c++·rpc
咖喱o26 分钟前
VRRP
运维·网络·智能路由器
AI云原生30 分钟前
容器网络模型与服务发现:从踩坑到精通,Kubernetes 网络问题排查全指南
服务器·网络·云原生·容器·kubernetes·云计算·服务发现
AI科技星31 分钟前
基于平行素数对等腰梯形网格拓扑的完备性证明哥德巴赫猜想1+1
c语言·开发语言·网络·量子计算·agi
长谷深风11141 分钟前
HTTP请求全过程解析【个人八股】
网络·网络协议·http·多线程下载·tcp 连接·请求报文、响应报文·网络请求流程
xhbh66641 分钟前
MC端口映射完全教程:路由器虚拟服务器配置+防火墙放行+内网穿透备用方案
运维·服务器·网络·网络协议·tcp/ip·智能路由器·流量端口转发
code monkey.43 分钟前
【Linux之旅】Linux 网络基础全解析:从协议分层到 Socket 编程,构建高性能网络服务的底层基石
linux·网络·php