RPC是什么?

在我们学习RabbitMQ的时候,我们学习了Work模型、FanOut模型、路由模型(Direct、Topic),但是官网还列了一种RPC模型,虽然在RabbitMQ中,RPC模型不常用,但我们还是简单了解一下:

1、何为RPC?

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。(来源:百度百科)

结合到现实,远程过程调用就是一种在两个原本相互独立的进程间建立一种类似于单个程序内函数间调用的函数调用机制。这样,不仅一个程序内的函数可以相互调用,不同程序间的函数也可以相互调用了

那么此处又抛出来一个问题,不同程序之间调用,我可以用Http协议啊?

当然是可以的,但是我们要理清楚,首先RPC和HTTP不是同层次概念,HTTP是WEB的通信协议,RPC应该是在HTTP更上层的一种通信概念或者规范,PRC框架程序本身需要使用通信协议和数据协议来实现,换句话说就是可以用HTTP作为通信协议来实现RPC框架。以简单的HTTP和JSON来实现也可以说符合RPC定义,但是几乎没有人会这么做,因为低效,和直接使用HTTP请求没啥区别。

现在一些RPC框架基本用来服务于后端的通信。随着业务越来越复杂,系统会拆分成不同的服务,比如用户中心,财务中心等等,用户的一个业务请求由多个服务来处理,服务于服务之间有着频繁的通信。这种场景中如果用curl请求http接口性能上是低效的,因为http请求会带一大堆头报文信息,而且http会频繁的建立连接和断开连接消耗资源。而目前的主流RPC框架服务端和客户端之间的通信基本是长连接或者连接复用等来避免频繁建立断开连接的情况,而且RPC通信也不会带很多报文头信息增加通信成本。因此这些框架是面向服务的。当然在master-slave集群通信中,如果RPC框架程序符合通信需求,也是可以使用的,总比你自己封装一套socket通信要省力。

RPC两大核心:通讯、序列化
u=1156328886,610714598&fm=15&gp=0.jpg

常见的RPC开源框架有:

Dubbo(淘宝开源的基于TCP的RPC框架,需要先了解Zookeeper)

RMI(远程方法调用,JAVA自带的远程方法调用工具,不过有一定的局限性)

Hessian(基于HTTP的远程方法调用)

2、RPC的应用场景?

RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。

HTTP 主要用于对外的异构环境,浏览器接口调用,App 接口调用,第三方接口调用等。

RPC 使用场景(大型的网站,内部子系统较多、接口非常多的情况下适合使用 RPC):

  • 长链接。不必每次通信都要像 HTTP 一样去 3 次握手,减少了网络开销。
  • 注册发布机制。RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。
  • 安全性,没有暴露资源操作。
  • 微服务支持。就是最近流行的服务化架构、服务化治理,RPC 框架是一个强力的支撑。

接下来我们要逐步学习Dubbo、Zookeeper

参考链接:https://blog.csdn.net/kalulioo/article/details/89189914