这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记
仅仅为个人观点,无法保证正确性,如果错误欢迎指出。欢迎交流讨论。
RPC 最初是由 Nelson 在论文《实现远程过程调用 implementing remote producure calls》 提出的。 在这篇论文中,Nelson提出了相关的理论模型,为我们的现在的RPC提供了理论指导。 而我们将从偏向应用的角度学习RPC。 RPC 类似于协议或者说约定,可以认为RPC按照约定对外提供一个函数,为此需要对这个约定进行一个描述。这个描述一般被称为接口定义,用于接口定义的语言称之为**接口定义语言 IDL **。 调用与被调用双方通过 IDL 写的描述确定具体的调用方式参数等信息。这就只需要IDL了,不需要知道具体的实现。 出于跨语言的目的,一般IDL不会使用某种特定的语言(例如C++、Java、Go),而是一些特别定义的、语法简单的语言。
注1:IDL 规范是有官方组织维护的。
注2:如果和 HTTP 对比的,那么 IDL 可以认为类似于 OpenAPI
由于RPC实际上是基于网络的调用,因此事实上它是需要对网络进行处理的。因此一般 RPC 框架会提供代码生成器,尽量避免用户关注这些逻辑。 如果我们把目光放到这部分,那么这里就会有一些问题需要解决:
- 数据的交换
- 通信方式
数据交换需要保证可以把数据正确的传输并接收,一般这里会使用编解码协议。并且为了性能还会有一些优化措施。 通信方式基本上就是一些经典的协议或者出于某些目的特别定制的协议。 以上就是对RPC的一个大致的介绍。 那么为什么要使用RPC呢?主要就是用在微服务中。将微服务划分成不同的RPC服务,互相切割,出事了避免背锅(bushi 正因为如此,评价RPC框架的指标基本上就是对微服务中服务的一些指标要求。