什么是RPC
还在学校的时候,写代码无非是写好个服务类,然后本地直接实例化即可使用,非常简单,所有代码在同一台服务器上,整个流程类似下图:
本地调用
这样会有什么问题?代码全部在一台服务器上,在现实中可能这么干吗?试想一下,类似淘宝和天猫这样复杂的系统,业务错综复杂,子系统非常多。在中大型互联网公司待过的同学都知道,这显然是不可行的的!
对于大型的分布式系统来讲,其代码分布于多台服务器上,跨服务器调用是再平常不过的了,调用结构简化如下:
远程调用
那么什么是RPC呢?
所谓的RPC即远程过程调用协议,它屏蔽了调用过程中各种复杂封装,使得远程调用跟本地调用一样方便,这也构建大型的分布式系统成为可能。
RPC框架
下图便是一个RPC调用的简化流程图:
位于上图右边的的细节都被封装屏蔽了,调用起来就像本地调用一样。常见的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调用过程相似,不同的是它更多的是封装了“服务发现”,“异常监控”,"重试机制"等面向服务的高级特性。