当前位置:网站首页>RPC协议详解
RPC协议详解
2022-07-05 18:13:00 【敲代码的小小酥】
一、什么是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.服务消费方得到最终结果;
而RPC框架的实现目标则是将上面的第2-9步完好地封装起来,也就是把调用、编码/解码的过程给封装起来,让用户感觉上像调用本地服务一样的调用远程服务。
二、实现RPC需要解决的问题
通信问题
远程调用,肯定两个机器之间需要通信。主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
通常这个连接可以是按需连接(需要调用的时候就先建立连接,调用结束后就立马断掉),也可以是长连接(客户端和服务器建立起连接之后保持长期持有,不管此时有无数据包的发送,可以配合心跳检测机制定期检测建立的连接是否存活有效),多个远程过程调用共享同一个连接。
服务寻址
上面提到,RPC是面向本地调用。那么用户进行了本地调用,如何找到对应的远程调用,需要RPC底层进行实现。需要管理ip,端口,服务列表等信息。常见的是使用zookeeper来进行管理。
对生产者而言:
服务启动的时候,将自己提供的服务注册到注册中心;
生产者挂掉时,注册中心注销停止的服务;
生产者定时向注册中心发送心跳,如果心跳异常,注册中心也注销生产者服务。
对消费者而言:
订阅注册中心的服务,获取ip,端口等服务信息;
当生产者上线下线时,注册中心会通知调用者;
服务下线后,消费者不再消费该服务。
网络传输
当A机器上的应用发起一个RPC调用时,调用方法和其入参等信息需要通过底层的网络协议如TCP传输到B机器,由于网络协议是基于二进制的,所有我们传输的参数数据都需要先进行序列化(Serialize)或者编组(marshal)成二进制的形式才能在网络中进行传输。然后通过寻址操作和网络传输将序列化或者编组之后的二进制数据发送给B机器。
当B机器接收到A机器的应用发来的请求之后,又需要对接收到的参数等信息进行反序列化操作(序列化的逆操作),即将二进制信息恢复为内存中的表达方式,然后再找到对应的方法(寻址的一部分)进行本地调用(一般是通过生成代理Proxy去调用,通常会有JDK动态代理、CGLIB动态代理、Javassist生成字节码技术等),之后得到调用的返回值。
服务调用
B机器进行本地调用(通过代理Proxy和反射调用)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作,恢复为内存中的表达方式,最后再交给A机器上的应用进行相关处理,一般是业务逻辑处理操作。
三、RPC 与 REST 的区别?
RPC 与 REST 最大的区别就在于 RPC 提供了更好的抽象,RPC 甚至将网络传输细节彻底隐藏了,而 REST 没有。具体来说,REST 至少要求用于提供 URL 以及请求参数,而 RPC 隐藏了与网络传输的相关实现细节。另一方面,RPC 可以基于任何网络通信协议,而 REST 通常基于 HTTP(或者 HTTPS)协议。RPC 调用者并不会关心具体的协议是:HTTP、TCP 还是其他任何自定义协议。
四、优缺点
优点:
帮助客户端通过传统使用高级语言的过程调用与服务器进行通信。
可以在分布式环境以及本地环境中使用。
支持面向进程和面向线程的模型。
对用户隐藏内部消息传递机制。
只需极少的努力即可重写和重新开发代码。
提供抽象,即对用户隐藏网络通信的消息传递性质。
省略许多协议层以提高性能。
缺点:
客户端和服务器对各自的例程使用不同的执行环境,并且资源(例如,文件)的使用也更加复杂。因此,RPC 系统并不总是适合传输大量数据。
RPC 非常容易发生故障,因为它涉及通信系统,另一台计算机和另一个进程。
RPC 没有统一的标准;它可以通过多种方式实现。
RPC 只是基于交互的,因此,在硬件架构方面,它不提供任何灵活性。
边栏推荐
- vulnhub之darkhole_2
- ConvMAE(2022-05)
- JVM第三话 -- JVM性能调优实战和高频面试题记录
- How can cluster deployment solve the needs of massive video access and large concurrency?
- How to improve the thermal management in PCB design with the effective placement of thermal through holes?
- Copy the linked list with random pointer in the "Li Kou brush question plan"
- Xiaobai getting started with NAS - quick building private cloud tutorial series (I) [easy to understand]
- About Statistical Power(统计功效)
- buuctf-pwn write-ups (9)
- 开户注册挖财安全吗?有没有风险的?靠谱吗?
猜你喜欢
The 11th China cloud computing standards and Applications Conference | China cloud data has become the deputy leader unit of the cloud migration special group of the cloud computing standards working
图像分类,看我就够啦!
Tupu software digital twin | visual management system based on BIM Technology
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相
第十届全球云计算大会 | 华云数据荣获“2013-2022十周年特别贡献奖”
Copy the linked list with random pointer in the "Li Kou brush question plan"
图片数据不够?我做了一个免费的图像增强软件
LeetCode 6111. 螺旋矩阵 IV
nano的CAN通信
To solve the stubborn problem of Lake + warehouse hybrid architecture, xinghuan Technology launched an independent and controllable cloud native Lake warehouse integrated platform
随机推荐
Leetcode notes: Weekly contest 300
金太阳开户安全吗?万一免5开户能办理吗?
About Estimation with Cross-Validation
What is the reason why the video cannot be played normally after the easycvr access device turns on the audio?
寻找第k小元素 前k小元素 select_k
数值计算方法 Chapter8. 常微分方程的数值解
在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
Sophon base 3.1 launched mlops function to provide wings for the operation of enterprise AI capabilities
LeetCode 6109. 知道秘密的人数
[paddlepaddle] paddedetection face recognition custom data set
使用JMeter录制脚本并调试
模拟百囚徒问题
【PaddleClas】常用命令
Logical words in Articles
使用Jmeter虚拟化table失败
Introduction to the development function of Hanlin Youshang system of Hansheng Youpin app
ViewPager + RecyclerView的内存泄漏
Login and connect CDB and PDB
English sentence pattern reference
华夏基金:基金行业数字化转型实践成果分享