一、什么是 RPC
简单理解
RPC(远程过程调用)让程序调用远程服务器上的功能,像调用本地函数一样简单,无需关心网络传输细节。例如手机 App 点击'下单',实际是调用电商服务器的创建订单功能,RPC 隐藏了网络请求、数据打包等复杂操作。
核心特点
- 透明性:调用远程服务就像调用本地函数,开发者无需关心网络通信细节。
- 跨进程/跨机器通信:通常用于不同进程甚至不同主机之间的功能调用。
- 支持多种协议和传输方式:如 HTTP、TCP、自定义协议等,常用高性能协议如 gRPC(基于 HTTP/2 和 Protocol Buffers)。
- 常与序列化技术配合:调用参数和返回结果需序列化成字节流在网络中传输,常用格式如 JSON、Protobuf、Thrift 等。
RPC 工作原理
- 客户端调用:客户端代码中调用一个看似本地的方法。
- 代理/Stub:客户端通过代理对象把调用转换成网络请求,包括方法名、参数等。
- 序列化:将方法名、参数等信息序列化成二进制或文本格式。
- 网络传输:通过底层网络协议把数据发送到服务端。
- 服务端处理:服务端接收请求,反序列化得到方法名和参数,找到对应的函数并执行。
- 返回结果:服务端将执行结果序列化后通过网络返回给客户端,客户端再反序列化得到最终结果。
常见 RPC 框架
- gRPC:Google 开源的高性能 RPC 框架,基于 HTTP/2 和 Protocol Buffers,支持多语言。
- Thrift:Facebook 开源的跨语言 RPC 框架,支持多种传输协议和数据格式。
- Dubbo:阿里巴巴开源的 Java RPC 框架,广泛用于微服务架构。
- brpc:百度开源的高性能 C++ RPC 框架,支持多种协议和多线程模型。
- JSON-RPC / XML-RPC:基于 JSON 或 XML 的轻量级 RPC 协议,常用于 Web 服务。
典型使用场景
- 微服务架构:服务之间通过 RPC 互相调用,实现功能解耦和分布式部署。
- 分布式系统:比如分布式存储、计算任务调度、数据库中间层等。
- 前后端分离/服务化:后端将核心功能封装成 RPC 服务,供前端、App 或其他服务调用。
二、BRPC 介绍
是什么?
BRPC 是百度开源的 C++ 专用 RPC 框架,让不同服务器上的 C++ 程序像调用本地函数一样快速通信,支撑了百度万亿级请求的核心服务。
比 gRPC 强在哪?
- 更快:延迟更低、每秒能处理的请求更多,尤其适合 C++ 高并发场景。
- 更简单:专为 C++ 设计,不用学复杂配置,接口更直观。
- 更灵活:支持多种协议,调试和功能扩展更方便。
- 更省事:依赖少,部署简单,和百度工具链直接兼容。
三、基于 brpc 实现简单的服务调用
brpc 安装教程
安装步骤:
- 安装依赖:
apt-get install -y git g++ make libssl-dev libprotobuf-dev librocksdb-dev libprotoc-dev protobuf-compiler libleveldb-dev












