brpc
Apache 顶级 C++ RPC 框架,单端口支持十多种协议,支撑日均千亿调用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Apache 顶级 C++ RPC 框架,单端口支持十多种协议,支撑日均千亿调用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:bRPC Logo
打开百度搜索框,输入一个关键词,从敲下回车到看到结果页面,平均耗时不到 100 毫秒。这背后并不是一台服务器在孤军奋战——你的一次搜索请求,可能涉及上百台服务器之间的数百次通信。
这就是分布式系统工程师每天面对的终极难题:如何让成百上千台服务器高效、稳定地"对话"? 2008 年,百度工程师开始着手解决这个问题。2012 年,一个代号"bRPC"(Better RPC)的内部框架在百度搜索系统中大规模落地,逐步承担了搜索、存储、广告、推荐等核心业务的通信任务。十多年后的今天,bRPC 已成长为 Apache 软件基金会的顶级项目,在 GitHub 上斩获超过 17,000 颗星,成为 C++ 生态中最成熟的 RPC 框架之一。
RPC(Remote Procedure Call,远程过程调用)的本质,是让程序员像调用本地函数一样调用远程服务器上的代码。
打个比方:你走进一家餐厅,对服务员说"来一份宫保鸡丁"。你不需要知道厨房里有几个人、灶台用什么火候、服务员和厨师之间怎么传递信息——你只需要"点菜"这个动作,就能得到"上菜"的结果。RPC 就是那个"服务员",它在背后处理了所有复杂的跨机器通信细节。
传统 RPC 框架只支持一种协议,bRPC 的创新在于:一个端口同时支持十几种协议。这就像一个服务员既能说中文、英文、日文,还能用手势沟通——无论客户端用什么方式请求,服务端都能自动识别并响应。
bRPC 最为人称道的特性,是原生支持多种通信协议,开发者无需引入额外依赖:
HTTP 系列:支持 HTTP/1.1、HTTPS,以及 gRPC 基于的 HTTP/2 协议。从其他语言(Python、Java、Go)通过 HTTP+JSON 访问基于 Protobuf 的服务,完全零门槛。
Redis 与 Memcached 协议:bRPC 内置了这两个缓存系统的客户端实现,线程安全,且 API 比官方客户端更简洁。
流媒体相关:支持 RTMP、FLV、HLS 协议,可用于搭建流媒体服务,配合 bRPC 的流式 RPC(streaming_rpc)特性,可以实现实时音视频传输场景。
私有协议族:包括百度内部的 baidu_std(最核心的二进制协议)、hulu_pbrpc、sofa_pbrpc、nova_pbrpc 等。这些协议在百度内部已历经十余年大规模生产环境验证,稳定性毋庸置疑。
RAFT 协议:基于工业级 RAFT 算法,bRPC 社区孵化了 braft 项目,用于搭建高可用分布式存储系统(类似 etcd、RaftDB 的能力)。
图2:bRPC 通信模型
bRPC 的高性能,不仅来自协议层的优化,更来自底层的 bthread 协程库。与传统多线程相比,bthread 实现了百万级别的并发能力:
这意味着,在同等硬件条件下,bRPC 服务的并发吞吐量可以远超传统多线程框架。对于搜索、推荐这类需要同时处理海量短请求的业务,这个特性带来的性能提升是质的飞跃。
bRPC 自带了一个轻量级的性能监控库 bvar(Broad Variable),无需引入 Prometheus 等外部依赖,就能在生产环境中实时观察关键指标:
bvar 的设计极为轻量,统计开销控制在微秒级,完全不影响生产服务的性能表现。通过 HTTP 接口可以直接访问监控数据,也可以导出给外部监控系统使用。
图3:bvar 流量监控
⚠️ 图片URL可能不可访问,如无法显示请参考官方文档。
bRPC Client 支持三种调用模式,适应不同业务场景:
此外,bRPC 支持组合 Channel(Combo Channel),可以轻松实现复杂的分库分表访问、多路并发请求等场景,大幅简化业务代码。
在生产环境中,服务的可观测性至关重要。bRPC 提供了一系列内置工具:
这些工具通过同一个端口提供服务,无需额外部署任何组件,极大降低了运维复杂度。
图4:bRPC 内置健康检查服务
bRPC 官方提供 Dockerfile,可通过容器快速构建测试环境。官方构建脚本 config_brpc.sh 封装了 CMake 配置过程,常规编译只需:
sh config_brpc.sh
make -j
优点:
局限:
总体而言,bRPC 更适合有 C++ 基础的开发者,作为基础设施库集成到现有项目中,而不是作为开箱即用的中间件使用。
bRPC 不只是一个 RPC 库,它代表了一种工业级基础设施的工程哲学:
python/ 和 java/ 目录),Go 等社区实现也在持续更新近年来,随着 AI 训练和推理系统对高性能网络通信的需求激增,bRPC 在机器学习场景(如参数服务器、分布式训练通信)中的应用也越来越广泛。其低延迟、高吞吐的特性,使其成为 AI Infrastructure 领域的一个值得关注的技术选型。
没有任何框架是银弹,bRPC 也有其局限性: