1、什么是RPC
在分布式计算中,远程过程调用(全称remote procedure call,缩写为RPC)是一个计算机通信协议,该协议允许运行于一台计算机上的程序调用另一个地址空间(通常是一个开放网络的另一台机器)的子程序,而程序员就像调用本地程序一样,不用为了交互额外的再编程。RPC是一种服务端-客户端模式,经典实现是一个发出请求-接收回应进行信息交互的系统。
而设计面向对象编程时,又可称为远程调用或远程方法调用,所以对java而言也叫远程方法调用。
本地方法调用和远程方法调用是相对而言,本地方法调用是进程内的方法调用,而远程方法调用是进程间的方法调用,针对进程间的调用,则其原理还是通过网络数据传输,而网络传输的两种主要方式是应用层的http协议以及数据层的tcp协议,所以RPC就有以下两种实现:
RPC over http:基于http协议传输数据;
RPC over tcp:基于tcp协议传输数据。
对于所传输的数据,可以交由RPC的双方协商来定,但基本都会包括:
1、调用的是哪个类或哪个接口;
2、调用的是哪个方法,方法名以及方法参数类型(方法的重载);
3、调用方法的入参
2、什么是dubbo
基于RPC的自定义非常高,每个公司基本都有属于自己的RPC框架,而dubbo就是阿里的开源RPC框架。
目前官网的Apache Dubbo介绍是:Apache Dubbo是一款高性能、轻量级的开源java服务框架;
之前的介绍是:Apache Dubbo是一款高性能、轻量级的开源javaRPC服务框架;
所以dubbo由单一的服务间调用功能,定位为RPC,向服务治理框架发展,这也是因为目前微服务的盛行,使得dubbo也开始涉猎于服务治理、服务监控、服务网关等,类似于spring cloud。
基本原理如下图:
几种RPC框架对比如下: