English version
什么是RPC?
互联网上的机器大都通过TCP/IP协议相互访问,但TCP/IP只是往远端发送了一段二进制数据,为了建立服务还有很多问题需要抽象:
- 数据以什么格式传输?不同机器间,网络间可能是不同的字节序,直接传输内存数据显然是不合适的;随着业务变化,数据字段往往要增加或删减,怎么兼容前后不同版本的格式?
- 一个TCP连接可以被多个请求复用以减少开销么?多个请求可以同时发往一个TCP连接么?
- 如何管理和访问很多机器?
- 连接断开时应该干什么?
- 万一server不发送回复怎么办?
- ...
RPC可以解决这些问题,它把网络交互类比为“client访问server上的函数”:client向server发送request后开始等待,直到server收到、处理、回复client后,client又再度恢复并根据response做出反应。
![rpc.png](data:image/png;base64,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)
我们来看看上面的一些问题是如何解决的:
- 数据需要序列化,protobuf在这方面做的不错。用户填写protobuf::Message类型的request,RPC结束后,从同为protobuf::Message类型的response中取出结果。protobuf有较好的前后兼容性,方便业务调整字段。http广泛使用json作为序列化方法。
- 用户无需关心连接如何建立,但可以选择不同的连接方式:短连接,连接池,单连接。
- 大量机器一般通过命名服务被发现,可基于DNS, ZooKeeper, etcd等实现。在百度内,我们使用BNS (Baidu Naming Service)。brpc也提供“list://“和”file://”。用户可以指定负载均衡算法,让RPC每次选出一台机器发送请求,包括: round-robin, randomized, consistent-hashing(murmurhash3 or md5)和 locality-aware.
- 连接断开时可以重试。
- 如果server没有在给定时间内回复,client会返回超时错误。
哪里可以使用RPC?
几乎所有的网络交互。
RPC不是万能的抽象,否则我们也不需要TCP/IP这一层了。但是在我们绝大部分的网络交互中,RPC既能解决问题,又能隔离更底层的网络问题。
对于RPC常见的质疑有:
- 我的数据非常大,用protobuf序列化太慢了。首先这可能是个伪命题,你得用profiler证明慢了才是真的慢,其次很多协议支持携带二进制数据以绕过序列化。
- 我传输的是流数据,RPC表达不了。事实上brpc中很多协议支持传递流式数据,包括http中的ProgressiveReader, h2的streams, streaming rpc, 和专门的流式协议RTMP。
- 我的场景不需要回复。简单推理可知,你的场景中请求可丢可不丢,可处理也可不处理,因为client总是无法感知,你真的确认这是OK的?即使场景真的不需要,我们仍然建议用最小的结构体回复,因为这不大会是瓶颈,并且追查复杂bug时可能是很有价值的线索。
什么是
?
百度内最常使用的工业级RPC框架, 有1,000,000+个实例(不包含client)和上千种服务, 在百度内叫做"baidu-rpc". 目前只开源C++版本。
你可以使用它:
- 搭建能在一个端口支持多协议的服务, 或访问各种服务
- restful http/https, h2/gRPC。使用brpc的http实现比libcurl方便多了。从其他语言通过HTTP/h2+json访问基于protobuf的协议.
- redis和memcached, 线程安全,比官方client更方便。
- rtmp/flv/hls, 可用于搭建流媒体服务.
- hadoop_rpc(可能开源)
- 支持rdma(即将开源)
- 支持thrift , 线程安全,比官方client更方便
- 各种百度内使用的协议: baidu_std, streaming_rpc, hulu_pbrpc, sofa_pbrpc, nova_pbrpc, public_pbrpc, ubrpc和使用nshead的各种协议.
- 基于工业级的RAFT算法实现搭建高可用分布式系统,已在braft开源。
- Server能同步或异步处理请求。
- Client支持同步、异步、半同步,或使用组合channels简化复杂的分库或并发访问。
- 通过http界面调试服务, 使用cpu, heap, contention profilers.
- 获得更好的延时和吞吐.
- 把你组织中使用的协议快速地加入brpc,或定制各类组件, 包括命名服务 (dns, zk, etcd), 负载均衡 (rr, random, consistent hashing)
brpc的优势
更友好的接口
只有三个(主要的)用户类: Server, Channel, Controller, 分别对应server端,client端,参数集合. 你不必推敲诸如“如何初始化XXXManager”, “如何组合各种组件”, “XXXController的XXXContext间的关系是什么”。要做的很简单:
我们尝试让事情变得更加简单,以命名服务为例,在其他RPC实现中,你也许需要复制一长段晦涩的代码才可使用,而在brpc中访问BNS可以这么写"bns://node-name"
,DNS是"http://domain-name"
,本地文件列表是"file:///home/work/server.list"
,相信不用解释,你也能明白这些代表什么。
使服务更加可靠
brpc在百度内被广泛使用:
- map-reduce服务和table存储
- 高性能计算和模型训练
- 各种索引和排序服务
- ….
它是一个经历过考验的实现。
brpc特别重视开发和维护效率, 你可以通过浏览器或curl查看server内部状态, 分析在线服务的cpu热点, 内存分配和锁竞争, 通过bvar统计各种指标并通过/vars查看。
更好的延时和吞吐
虽然大部分RPC实现都声称“高性能”,但数字仅仅是数字,要在广泛的场景中做到高性能仍是困难的。为了统一百度内的通信架构,brpc在性能方面比其他RPC走得更深。
- 对不同客户端请求的读取和解析是完全并发的,用户也不用区分”IO线程“和”处理线程"。其他实现往往会区分“IO线程”和“处理线程”,并把fd(对应一个客户端)散列到IO线程中去。当一个IO线程在读取其中的fd时,同一个线程中的fd都无法得到处理。当一些解析变慢时,比如特别大的protobuf message,同一个IO线程中的其他fd都遭殃了。虽然不同IO线程间的fd是并发的,但你不太可能开太多IO线程,因为这类线程的事情很少,大部分时候都是闲着的。如果有10个IO线程,一个fd能影响到的”其他fd“仍有相当大的比例(10个即10%,而工业级在线检索要求99.99%以上的可用性)。这个问题在fd没有均匀地分布在IO线程中,或在多租户(multi-tenancy)环境中会更加恶化。在brpc中,对不同fd的读取是完全并发的,对同一个fd中不同消息的解析也是并发的。解析一个特别大的protobuf message不会影响同一个客户端的其他消息,更不用提其他客户端的消息了。更多细节看这里。
- 对同一fd和不同fd的写出是高度并发的。当多个线程都要对一个fd写出时(常见于单连接),第一个线程会直接在原线程写出,其他线程会以wait-free的方式托付自己的写请求,多个线程在高度竞争下仍可以在1秒内对同一个fd写入500万个16字节的消息。更多细节看这里。
- 尽量少的锁。高QPS服务可以充分利用一台机器的CPU。比如为处理请求创建bthread, 设置超时, 根据回复找到RPC上下文, 记录性能计数器都是高度并发的。即使服务的QPS超过50万,用户也很少在contention profiler)中看到框架造成的锁竞争。
- 服务器线程数自动调节。传统的服务器需要根据下游延时的调整自身的线程数,否则吞吐可能会受影响。在brpc中,每个请求均运行在新建立的bthread中,请求结束后线程就结束了,所以天然会根据负载自动调节线程数。
brpc和其他实现的性能对比见这里。