1. 简介

1.1 了解RPC

RPC(Remote Procedure Call) 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器 A,B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

注意:RPC 只是一种通信模式,和 http 并不冲突对立,相反 http 可以作为 RPC 传输数据的一种协议。

1.2 调用其他服务

在日常业务中我们可以把功能封装成静态库、动态库、sdk、独立服务等,最常见也最方便的还是 http 这种形式的调用。http 服务把需要提供的服务暴露成接口,使用方直接按约定的 http 方法和 uri 进行数据交互。

http 协议是应用层协议,在 http 协议之下还有网络层、传输层、数据链路层等,一个数据包 packet 除了净荷 payload 之外还有很多 header,由于标准和通用性的设计目标也使得 http 一次数据交互真正传输的 payload 只是其中一部分。

在内部系统调用很复杂的前提下,http 调用的效率和安全性就不那么理想了,更重要的是面对众多的服务我们需要的不仅仅是一个通信方式,而是一个内部服务的管理系统。
RPC技术 - 图1

2. RPC框架

2.1 RPC组件

rpc 不是简单的一种协议或者技术,而是一种模式和框架,其典型的组成,如图:
RPC技术 - 图2
RPC协议模块是很重要的部分,这部分服务 A 调用服务 B 时传输报文的过程,如图:
RPC技术 - 图3
在网络消息传输中可以基于 TCP、UDP、http 来实现,各自都有各自的特点:

  • 基于 TCP 实现的 RPC 调用,能够灵活对协议字段进行定制,减少网络开销提高性能,实现更大的吞吐量和并发数,但要关注底层细节,在进行数据解析时更加复杂一些。
  • 基于 HTTP 实现的 RPC 可以使用 JSON 和 XML 格式的请求或响应数据,解析工具很成熟,在其上进行二次开发会非常便捷和简单。但是 HTTP 是上层协议,所占用的字节数会比使用 TCP 协议传输所占用的字节数更高。

    2.2 常用的RPC框架、

  • Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

  • gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。
  • brpc(baidu-rpc)是百度开发一款远过程调用网络框架。目前该项目已在github上开源,brpc 目前被应用于百度公司内部各种核心业务上,其中包括高性能计算和模型训练和各种索引和排序服务,且有超过100万以上个实例是基于brpc工作的。
  • Tars 是腾讯根据内部多年使用微服务架构的实践,总结而成的开源项目,仅支持 C++ 语言,目前在腾讯内部应用也非常广泛。

参考: