A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

什么是RPC模型?

远程过程调用(Remote Procedure Call,RPC)是一种允许两个实体通过通用请求/响应机制的通信通道进行通信的设计范例。RPC 的定义在过去三十年中发生了重大的变化和演变,因此 这里RPC 范式是一个广义的分类术语,指的是过去几十年中出现的所有 RPC 式系统。

RPC 的基本思想:本地计算机上的客户端程序调用远程服务器上的过程或子程序,就像调用本地过程一样,而不用关心底层网络通信的细节。
RPC的调用过程

RPC发展历史的几个关键节点

  • 奠基: 过程调用最早可以追溯到 Jon Postel 和 Jim White 在1974 年发表的 Procedure Call Protocol Documents Version 2(RFC674)。这个协议试图定义一种通用的方法,用于解决 NSW 项目中多个计算节点通信的问题。
  • 第一个RPC标准: 1988年,RFC 1057 发布,ONC RPC(Sun RPC) 被定义为标准的RPC规范。ONC RPC 提供了一个编译器,需要一个远程过程接口的定义来生成客户端和服务器的存根函数。这个编译器叫做 rpcgen。在运行此编译器之前,程序员必须提供接口定义,包含函数声明的接口定义,通过版本号进行分组,并被一个独特的程序编码来标识。这一过程已经成为现在RPC的基本调用模型。
  • 第一个对象模型调用标准: 1991年,OMG 发布CORBA 1.0,试图为应用程序开发人员提供几个好处: 语言独立性、操作系统独立性、体系结构独立性、通过 IDL 中的抽象类型映射到这些类型的机器和语言特定实现的静态类型,以及对象传输,其中对象可以通过不同机器之间的连接进行迁移。
  • HTTP诞生: 1996年:HTTP/1.x 版本发布,为互联网的发展奠定了基础,我们今天的大部分远程调用,都基于HTTP协议。
  • REST概念提出: 2000年,Roy Thomas Fielding 博士在他的博士论文 《Architectural Styles and the Design of Network-based Software Architectures》首次提出了 REST 这个词。REST非常简单,无需客户端stub 代码 和服务端 stub代码,且所有语言都可以集成实现。HTTP REST慢慢侵占了RPC大部分应用领地的“异类”,并且导致了一度盛行的XML-RPC的灭绝,但同时促进了正统RPC技术走向一个新的发展阶段。

注:了解更详细的发展历史,请阅读RPC发展史

分布式系统对象模型调用体系

从OMG发布CORBA 1.0,以对象为核心的远程调用体系随着局域网应用的发展,逐步在1990年-2005年前后成为企业内部客户端-服务器架构的首要选择,主要代表有:

第一个轻量级HTTP RPC调用标准:SOAP

SOAP 是一项标准协议,其最初的设计意图是让使用不同语言且在不同平台上构建的应用之间进行通信。由于 SOAP 是一项协议,因此它会施加一些内置规则,从而增加复杂性和开销,并可导致页面加载时间延长。但是,这些标准还提供了内置合规性,使其更适合企业应用。内置合规性标准包括安全性、原子性、一致性、隔离性和持久性(ACID),这是一组旨在确保数据库事务可靠性的属性。

开源崛起,轻量级RPC调用框架及协议

随着互联网企业崛起及 SOA概念 的普及、叠加CPU及千兆网的快速发展, 云原生微服务 等技术的成熟,扩展性为主的一批开源RPC框架逐步兴起,替代对象模型调用体系成为企业内部RPC调用的主流,主要代表有:

  • Protocol Buffer: 优点,跨语言的、无状态的、轻量级的远程过程调用(RPC)协议,数据传输量小,速度比JSON快; 缺点,序列化二进制不可读,调试相对困难。
  • Avro: 优点,是一种与编程语言无关的序列化格式,schema 通过 JSON 来描述,数据被序列化成二进制文件或 JSON 文件,为Hadoop开发,支持脚本语言; 缺点,。
  • JSON-RPC: 优点,跨语言的、无状态的、轻量级的远程过程调用(RPC)协议,数据传输量小,适用 Web 和移动应用;缺点,对复杂数据类型的支持较弱,不适合复杂场景。
  • Thrift: 优点,跨语言调用型的 RPC框架,Apache维护,高性能,得到了广泛的应用 ;缺点,序列化二进制不可读,调试相对困难。
  • gRPC: 优点,跨语言调用型的 RPC框架,基于 HTTP/2 和 Protobuf,Google维护, 高性能;缺点,对于小规模团队可能过于繁重,学习成本较高。
  • Dubbo: 优点,服务治理型的RPC框架,提供丰富的治理和调用特性,Java语言友好,支持主流跨语言型RPC协议;缺点,对于大型分布式系统可能过于臃肿,部分功能相对复杂。
  • 其它
    注:了解这些框架的差异,请阅读常见 RPC 框架介绍

REST成为当下互联网API调用事实的标准

移动互联网 的高速发展,打破了PC互联网 时代的浏览器-服务器应用模式,转向以客户端-服务器为主的应用模式,基于HTTP的REST调用风格逐步成为主流。REST风格也将在AI互联网 时代成为API调用标准。

常见问题

Dubbo与 gRPC、Spring Cloud、Istio 的关系?
Go语音中类似Dubbo的框架是什么?
Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比?
Avro有什么用?

参考资料

Protocol Buffer规范简介
gRPC 官方文档中文版 V1.0
JSON-RPC 2.0 规范(中文版)
深入浅出RPC原理
RPC框架:从原理到选型,一文带你搞懂RPC