brpc的基本介绍
# 一、简单介绍
- brpc 是一种 C++ 语言开发的工业级 rpc 框架,工作于应用层,类似于http、ftmp、grpc等;
- brpc 采用的 proto 作为序列化协议,类似于http常采用json采用序列化协议;
# 二、brpc支持的协议
- restful、http/https、h2/gRPC、redis、memcached;
- rtmp/flv/hls、hadoop_rpc、rdma、thrift;
- 百度内协议: baidu_std, streaming_rpc, hulu_pbrpc, sofa_pbrpc, nova_pbrpc, public_pbrpc, ubrpc和使用nshead的各种协议;
# 三、与grpc的区别
# 1,相同点
- 都工作在应用层;
- 都是基于 protobuf 协议完成序列化的;
# 2,不同点
- brpc 是单语言多协议,只支持 C++语言,但是支持 rpc、http、redis 等多种协议;
- grpc 是但协议多语言,支持 go、python、java、c++等多种语言,但是支持 rpc 协议;
# 三、brpc支持的功能
- Server能同步或异步处理请求;
- Client支持同步、异步、半同步,或使用组合channels简化复杂的分库或并发访问;
- 可以通过浏览器或curl查看server内部状态, 分析在线服务的cpu热点, 内存分配和锁竞争, 通过bvar统计各种指标并通过/vars查看。
- 有更好的延时和吞吐;
- 在brpc中,对不同fd的读取是完全并发的,对同一个fd中不同消息的解析也是并发的。解析一个特别大的protobuf message不会影响同一个客户端的其他消息,更不用提其他客户端的消息;
- 对同一fd和不同fd的写出是高度并发的。当多个线程都要对一个fd写出时(常见于单连接),第一个线程会直接在原线程写出,其他线程会以wait-free的方式托付自己的写请求,多个线程在高度竞争下仍可以在1秒内对同一个fd写入500万个16字节的消息。更多细节看这里。
- 尽量少的锁。高QPS服务可以充分利用一台机器的CPU。比如为处理请求创建bthread, 设置超时, 根据回复找到RPC上下文, 记录性能计数器都是高度并发的。即使服务的QPS超过50万,用户也很少在 contention profiler 中看到框架造成的锁竞争。
- 服务器线程数自动调节。传统的服务器需要根据下游延时的调整自身的线程数,否则吞吐可能会受影响。在brpc中,每个请求均运行在新建立的bthread中,请求结束后线程就结束了,所以天然会根据负载自动调节线程数。
- 定制各类组件, 包括命名服务 (dns, zk, etcd), 负载均衡 (rr, random, consistent hashing)等;
编辑 (opens new window)
上次更新: 2023/09/05, 23:10:53