一文搞定理解RPC

news/2024/12/19 21:54:29/文章来源:https://www.cnblogs.com/tuyile006/p/18618000

前言RPC概念RPC协议RPC组成RPC协议RPC框架RPC的优点RPC与HTTP的区别

前言

RPC的概念相信很多软件从业人员或多或少都接触过,从开发到测试都可能需要跟它打交道。 但是对于为什么要用RPC?RPC的优点是什么?RPC是什么原理?它跟HTTP有什么不同?相信并不是每个人都比较熟悉。 那么今天我们就来了解下到底什么是RPC?

RPC概念

如果你百度过RPC,那么你一定看过RPC的百科介绍。RPC(Remote Procedure Call)即远程过程调用。 说真的百科里讲的也只有概念,没有一点可以帮助你理解RPC的细节内容。所以关于概念这里要多讲讲其它的辅助内容。

RPC协议

通常我们所说的RPC其实是说的RPC协议,即一种专门为服务间远程调用而设计的一种通用协议。 该协议基于其它已有的传输协议,规定通信方式为C/S架构;并且在代码开发过程中要屏蔽掉底层通信细节, 让开发者像调用本地方法一样,调用远程服务。

RPC组成

基于RPC协议内容的说明,再来看看RPC的主要组成内容:

  • 确定一个已有的传输协议(TCP\UDP\HTTP\Websocket等)
  • 一个客户端通信实现模块(即客户端stub)
  • 一个服务端通信实现模块(即服务端stub)
  • 选择一个RPC内容协议(如:json、xml、protobuf等)

这是网络上的一张RPC架构组成图,正好包含了上述列举的几项内容。

RPC

这张图中的client就是我们要开发的功能代码。如果我们想调用远程服务的话,可以直接编写类似本地方法的代码;如:

代码语言:javascript
复制
Calculator.add(1, 2)

然鹅,这里并不是真的调用了本地的add实现方法,而是调用了客户端stub模块; 而剩下的事情就交给客户端stub,它会负责与服务端的stub进行通信,使用约定的传输协议,内容协议等; 最后完成远程调用并返回结果给client模块。

RPC协议

RPC协议是一个开放的协议,不像TCP和HTTP一样规定了统一的标准,任意的使用方都只能使用相同的规则。 RPC协议可以有很多种实现,只要通信双方约定好就行了。目前市面上的RPC协议实现就有很多种:

  • dubbo
  • rmi
  • hessian
  • webserivice
  • http
  • thrift
  • memcached
  • redis
  • rest
  • jsonrpc
  • motan
  • yar
  • grpc
  • restful

这些协议可以适用于不同的业务场景,比如:dubbo协议适合高频的小数据量调用,hessian则适合文件传输, 而jsonrpc、grpc则适合跨语言的应用。这些协议也与TCP等协议类似,都规定了自己的头信息和body部分, 用于约定通信的规则。

RPC框架

不使用RPC框架能不能进行RPC的调用呢?答案当然是可以的!那为什么还需要RPC框架呢?因为有了RPC框架 我们在使用RPC调用时,就会更加的方便了。比如:RPC框架会帮助我们做这些事情:

  • 客户端stub、服务端stub的实现
  • 通信内容的序列化与反序列化实现(json、xml、protobuf)
  • 服务的注册与发现
  • 服务方负载均衡
  • 并发性能调优

有了RPC框架之后,就不需要再单独的为项目开发这些基础功能了,这样开发具有RPC功能的客户端、 服务端都跟开发普通本地模块一样方便。

RPC的优点

说了这么多,那么RPC到底有什么优点呢?其实讲RPC的优点要结合RPC的使用场景,否则RPC可能就无法体现它的优势。 通常而言RPC的特点如下:

  • 调用远程服务像调用本地方法一样方便
  • 多种传输协议可以选择
  • 为系统提供较强可扩展性、高可用性、维护性

RPC与HTTP的区别

在上面的RPC协议中,也许你已经发现了有HTTP协议。是的没错!就是HTTP协议。 所以RPC和HTTP本质上是面向不同场景的产物。而RPC也可以基于HTTP协议来实现信息内容的传输。 除此之外,RPC和HTTP还有如下典型的区别:

  • RPC可以基于TCP、HTTP、WebStock等作为基础传输协议,而HTTP只能是http协议
  • RPC使用二进制来传输信息内容(体积更小),HTTP则使用文本格式
  • RPC的二进制序列化效率高,HTTP的文本序列化(如json)则耗时多
  • RPC基于TCP时可以网络IO多路复用,HTTP不能很好的支持
  • RPC可以很方便支持服务治理,而HTTP则需要单独实现支持

简而言之,就是RPC在远程调用的场景下,比HTTP更高效,更简洁、附加特性更强大,更适合分布式和微服务的场景。

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

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

相关文章

全场景一站式2024最新vmware环境下安装win7并且破解QTP

目录VMwareVMware和Ubuntu下载链接下载Win 7 系统各个操作系统网站激活码是什么查看是否激活激活操作vmware下安装ubuntu创建虚拟机下载VMtool灰色灰色按键点击不了下载提示有问题原因文件传递共享文件借助外界U盘有了VMTool就可以直接拖拽!!!!有了VMTool就可以全屏化——倒…

20222321 2024-2025-1 《网络与系统攻防技术》实验八实验报告

一.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎…

数量

技巧 比例型 出现一个比例,存在四种倍数关系倍数 你们有啥公因子,我也必须有尾数 出现乘法,分析个位,考虑尾数 。乘法中出现5和10尾数就确认了奇偶 与偶数相乘一定是偶数,与奇数相乘可能为偶数也可能为奇数拓展猜题 当 A = B*C ,求A ,考虑A的倍数 工程问题 利润问题 求最…

LVGL学习 - Visual Studio外部“.c.h”文件添加

LVGL项目工程添加“.c.h”文件后 “C1083”“LNK2019”报错的解决方法一、首先把文件添加至工程,现有项选择所需添加的“.c.h”文件但还是会有如下报错,解决方法在第2步。二、“.c”文件需要添加“extern "C"” 下图截至官方文档我试了只添加“extern "C"…

组合数学+ybt题解

加法原理 乘法原理 排列数 从 \(n\) 个数中任取 \(m\) 个元素的排列的方案数,表示为 \(A^m_n=\frac{n!}{(n-m)!}\) \(0!=1\) 全排列 \(A^n_n\) 组合数 从 \(n\) 个元素中取出 \(m\) 个元素的组合的个数,表示为 \(\dbinom{n}{m}= \frac{A^m_n}{m!}=\frac{n!}{m!(n-m)!}\) 如何…

苍穹外卖day02

JWT令牌、ThreadLocal、分页查询bug记录知识点记录新增员工新增员工需要填写创建人id和修改人id两个属性,这两个属性应该填本账户的id。 通过拦截器可以解析出JWT令牌中包含的登录员工id信息,但是该如何传递给Service的save方法? ThreadLocal并非一个Thread,而是Thread的局…

年底裁员开始了,大家做好准备吧!

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的变得容易了吗?有企业HR吐槽,简历确实比以前多了好几倍,其实是变…

2024-2025-1 20241401 《计算机基础与程序设计》 第十三周学习总结

班级链接 2024计算机基础与程序设计作业要求 第十三周作业教材学习内容总结 《C语言程序设计》第12章结构体的定义和使用: 结构体类型的定义,以及结构体变量的创建和使用。结构体允许将不同数据类型的成员组合成一个整体,以便于管理和引用。 结构体变量的初始化: 结构体变量…

golang的互斥锁和读写锁

golang mutex(互斥锁) 1.锁最本质的作用 保证原子性 2.mutex 使用原则 适用于并发编程,尽量减少加锁区域的逻辑 3.mutex的局限性 仅限于单个进程内操作 sema(信号量,semaphore的简称)是一种用于并发控制的机制 资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数…

「测试人员」年终总结及来年规划

年底一般企业都会针对项目写总结,一般流程是组员呈交给组长,组长递交给测试经理,所以每个层级写各自的总结,会有不同的侧重点。 今天分别来聊聊测试工程师、测试组长以及测试经理年终总结的关注点在什么地方以及采用什么样的方法及策略使年终总结有实际意义且高大上。📝 …

【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章基于FPGA的2FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga 2fsk-CSDN博客的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(…