前言RPC概念RPC协议RPC组成RPC协议RPC框架RPC的优点RPC与HTTP的区别
RPC的概念相信很多软件从业人员或多或少都接触过,从开发到测试都可能需要跟它打交道。 但是对于为什么要用RPC?RPC的优点是什么?RPC是什么原理?它跟HTTP有什么不同?相信并不是每个人都比较熟悉。 那么今天我们就来了解下到底什么是RPC?
如果你百度过RPC,那么你一定看过RPC的百科介绍。RPC(Remote Procedure Call)即远程过程调用。 说真的百科里讲的也只有概念,没有一点可以帮助你理解RPC的细节内容。所以关于概念这里要多讲讲其它的辅助内容。
通常我们所说的RPC其实是说的RPC协议,即一种专门为服务间远程调用而设计的一种通用协议。 该协议基于其它已有的传输协议,规定通信方式为C/S架构;并且在代码开发过程中要屏蔽掉底层通信细节, 让开发者像调用本地方法一样,调用远程服务。
基于RPC协议内容的说明,再来看看RPC的主要组成内容:
这是网络上的一张RPC架构组成图,正好包含了上述列举的几项内容。
RPC
这张图中的client
就是我们要开发的功能代码。如果我们想调用远程服务的话,可以直接编写类似本地方法的代码;如:
Calculator.add(1, 2)
然鹅,这里并不是真的调用了本地的add实现方法,而是调用了客户端stub模块; 而剩下的事情就交给客户端stub,它会负责与服务端的stub进行通信,使用约定的传输协议,内容协议等; 最后完成远程调用并返回结果给client模块。
RPC协议是一个开放的协议,不像TCP和HTTP一样规定了统一的标准,任意的使用方都只能使用相同的规则。 RPC协议可以有很多种实现,只要通信双方约定好就行了。目前市面上的RPC协议实现就有很多种:
这些协议可以适用于不同的业务场景,比如:dubbo协议适合高频的小数据量调用,hessian则适合文件传输, 而jsonrpc、grpc则适合跨语言的应用。这些协议也与TCP等协议类似,都规定了自己的头信息和body部分, 用于约定通信的规则。
不使用RPC框架能不能进行RPC的调用呢?答案当然是可以的!那为什么还需要RPC框架呢?因为有了RPC框架 我们在使用RPC调用时,就会更加的方便了。比如:RPC框架会帮助我们做这些事情:
有了RPC框架之后,就不需要再单独的为项目开发这些基础功能了,这样开发具有RPC功能的客户端、 服务端都跟开发普通本地模块一样方便。
说了这么多,那么RPC到底有什么优点呢?其实讲RPC的优点要结合RPC的使用场景,否则RPC可能就无法体现它的优势。 通常而言RPC的特点如下:
在上面的RPC协议中,也许你已经发现了有HTTP协议。是的没错!就是HTTP协议。 所以RPC和HTTP本质上是面向不同场景的产物。而RPC也可以基于HTTP协议来实现信息内容的传输。 除此之外,RPC和HTTP还有如下典型的区别:
简而言之,就是RPC在远程调用的场景下,比HTTP更高效,更简洁、附加特性更强大,更适合分布式和微服务的场景。