深入浅出RPC | 青训营笔记

314 阅读3分钟

1 什么是RPC框架?

RPC(Remote Procedure Call)即远程过程调用,是一种通过网络从远程计算机上请求服务的协议。不同于本地调用,RPC是指调用远端机器的函数或方法,且不需要关心底层的调用细节,如网络协议和传输协议等,对于调用者来说,和调用本地方法没有什么区别。

2 RPC概念模型

发表于1984年

image.png

3 RPC调用过程

​ 相比本地函数调用,远程调用的话我们不知道对方有哪些方法,以及参数长什么样,所以需要有一种方式来描述或者说声明我有哪些方法,方法的参数都是什么样子的,这样的话大家就能按照这个来调用,这个描述文件就是 IDL 文件。

​ 服务双方是通过约定的规范进行远程调用,双方都依赖同一份IDL文件,需要通过工具来生成对应的生成文件,具体调用的时候用户代码需要依赖生成代码,所以可以把用户代码和生成代码看做一个整体。

​ 编码只是解决了跨语言的数据交换格式,剩下的传输过程交给这里的 transfer 。

image.png

  • LDL文件:通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信。
  • 生成代码:通过编译器把LDL文件转换成语言对应的静态库。
  • 编解码:从内存中表示到字节序列的转换称作编码,反之叫解码。
  • 通信协议:规范了数据在网络中的传输内容和格式,除必须的请求/响应数据外,还会包含额外的元数据。
  • 网络传输:通常基于成熟网络库走TCP/UDP传输。

4 RPC的优点

  • RPC网络模型对于是透明的。即调用者不需要关注传输层协议使用的是UDP还是TCP,也不关注网络IO的模型。
  • RPC服务提供协议式的消息通信机制,即通信双方使用proto或者thrift规定好传输的信息,调用方正确地将信息传递到接收方(Request),就可以实现一次通信,通信的结果通过Response返回。
  • 跨语言的能力:调用方有可能使用的是Java,也有可能是Go又或者是NodeJs,在传输过程中,消息都会被序列化,所以在这一层面上就摆脱了变成语言的束缚。

5 常见的RPC框架

Dubbo:

​ Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。目前 Dubbo 已经成为 Spring Cloud Alibaba 中的官方组件。

Thrift:

​ Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信,最初由Facebook于2007年开发,2008年进入Apache开源项目。它通过自身的IDL中间语言,并借助代码生成引擎生成各种主流语言的RPC服务端和客户端模板代码。

gRPC:

​ gRPC是可以在任何环境中运行的现代开源高性能RPC框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器连接到后端服务。