什么是RPC

还在学校的时候,写代码无非是写好个服务类,然后本地直接实例化即可使用,非常简单,所有代码在同一台服务器上,整个流程类似下图:

rpc服务 分布式事务 rpc和分布式的关系_rpc服务 分布式事务

本地调用

这样会有什么问题?代码全部在一台服务器上,在现实中可能这么干吗?试想一下,类似淘宝和天猫这样复杂的系统,业务错综复杂,子系统非常多。在中大型互联网公司待过的同学都知道,这显然是不可行的的!

对于大型的分布式系统来讲,其代码分布于多台服务器上,跨服务器调用是再平常不过的了,调用结构简化如下:

rpc服务 分布式事务 rpc和分布式的关系_RPC_02

远程调用

那么什么是RPC呢?

所谓的RPC即远程过程调用协议,它屏蔽了调用过程中各种复杂封装,使得远程调用跟本地调用一样方便,这也构建大型的分布式系统成为可能。

RPC框架

下图便是一个RPC调用的简化流程图:

rpc服务 分布式事务 rpc和分布式的关系_HTTP_03

位于上图右边的的细节都被封装屏蔽了,调用起来就像本地调用一样。常见的RPC框架有Google的grpc、阿里的dubbo、Facebook的thrift以及Twitter的finagle等,它们不仅仅将复杂的调用过程的细节封装屏蔽,更重要的提供了一整套大型分布式系统必备的高级服务特性。

与HTTP协议的关系

看完RPC的基本概念,那么它与HTTP有何种联系,HTTP与RPC有什么关联吗?其实,HTTP协议也可以用来实现RPC框架,但是HTTP1.1协议的TCP报文包含太多没用的信息,如果使用HTTP1.1协议来实现RPC框架,显然效率太低了。这也是为什么那么多的RPC框架都使用自有的协议进行封装,以提高性能。但是如今的HTTP2.0的编码效率已大大优化,Google的grpc框架便是基于HTTP2.0协议实现。

所以,我们可以这么理解,所谓RPC调用实际上与平常的HTTP调用过程相似,不同的是它更多的是封装了“服务发现”,“异常监控”,"重试机制"等面向服务的高级特性。