RPC 系列(十三):brpc 全景

互联网上的机器大都通过 TCP/IP 协议相互访问,但 TCP/IP 只是往远端发送了一段二进制数据,为了建立服务还有很多问题需要抽象。RPC 可以解决这些问题,它把网络交互类比为「client 访问 server 上的函数」:client 向 server 发送 request 后开始等待,直到 server 收到、处理、回复 client 后,client 又再度恢复并根据 response 做出反应。

RPC 的请求-响应交互示意:client 发出 request,server 处理后返回 response

几乎所有的网络交互都可以交给 RPC 来表达。当然,RPC 不是万能的抽象,否则我们也不需要 TCP/IP 这一层了;但在我们绝大部分的网络交互中,RPC 既能解决问题,又能隔离更底层的网络问题。

brpc 是什么

brpc 项目 logo

brpc 是百度内最常使用的工业级 RPC 框架,有 1,000,000+ 个实例(不包含 client)和上千种服务,在百度内叫做 baidu-rpc,目前只开源 C++ 版本。

简单易用的接口

只有三个(主要的)用户类:Server、Channel、Controller,分别对应 server 端、client 端、参数集合。你不必推敲诸如「如何初始化 XXXManager」「如何组合各种组件」「XXXController 的 XXXContext 间的关系是什么」这类问题。

我们尝试让事情变得更加简单。以命名服务为例,在其他 RPC 实现中,你也许需要复制一长段晦涩的代码才可使用,而在 brpc 中访问 BNS 可以这么写 bns://node-name,DNS 是 Init("domain-name", ...),本地文件列表是 file:///home/work/server.list,相信不用解释,你也能明白这些代表什么。

经受过考验的实现

brpc 在百度内被广泛使用,是一个经历过考验的实现。

重视开发和维护效率

brpc 特别重视开发和维护效率:你可以通过浏览器或 curl 查看 server 内部状态,分析在线服务的 CPU 热点、内存分配和锁竞争,通过 bvar 统计各种指标并通过 /vars 查看。

性能

虽然大部分 RPC 实现都声称「高性能」,但数字仅仅是数字,要在广泛的场景中做到高性能仍是困难的。为了统一百度内的通信架构,brpc 在性能方面比其他 RPC 走得更深,brpc 与其他实现的性能对比可以参考官方的 benchmark 数据。

系列导航


   转载规则


《RPC 系列(十三):brpc 全景》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
RPC 系列(十四):brpc 的线程与协程 RPC 系列(十四):brpc 的线程与协程
线程模型是服务端编程的根基。在进入 brpc 的线程设计之前,先梳理几类常见的服务端线程模型:thread-per-connection、单线程 reactor(event-loop)、N:1 线程库、多线程 reactor 与 M:N 线
2023-12-05
下一篇 
RPC 系列(十二):gRPC 客户端负载均衡 RPC 系列(十二):gRPC 客户端负载均衡
本篇将基于 etcd 服务发现,介绍如何实现 gRPC 客户端负载均衡。 gRPC 负载均衡的三种方案gRPC 官方文档提供了关于 gRPC 负载均衡的方案(Load Balancing in gRPC),此方案是为 gRPC 设计的,下面
2023-11-21
  目录