https://brpc.apache.org/zh/docs/overview/
brpc提供的可视化分析界面
线程模型(Thread Module)
bthread是brpc实现的一套“协程”。传统意义上的协程是一个线程中开辟多个协程,也就是通常意义的N:1协程。而bthread是M:N的“协程”,每个bthread之间是平等的,所谓的M:N是指协程可以在线程间迁移。
使用bthread 用户态协程,结合N:M的调度模型,以及work-steal 抢占式调度实现;为bthread打造的butex同步组件,为实现高性能的RPC框架提供了较为高效和简洁的并发编程基础。
要实现M:N其中关键就是:工作窃取(Work Stealing)算法
bthread_concurrency
bthread-local
https://github.com/apache/incubator-brpc/blob/master/docs/cn/bthread.md
内存管理(Buffer & Memory Management)
buffer-ManangerMent通过IOBuf(非连续零拷贝缓存)方式减少数据传递处理过程中的拷贝。各种ThreadLocal的ResoucePool,Object Pool等来优化定长的短生命周期的申请和释放。
执行队列(exec queue):多生产者单消费者无锁队列,实现了多生产者单消费者之间的的高效通信,在实现单TCP连接复用,高效发送-接收数据上发挥了很重要的作用。
超时定时器(Timer Keeping): 使用高效的定时器管理超时的RPC,并进行回调。
避免过多编码:将数据Body作为Attachment的方式,而不需要编解码 baidu_std and hulu_pbrpc supports attachments which are sent along with messages and set by users to bypass serialization of protobuf.
使用说明
https://github.com/apache/incubator-brpc/blob/master/docs/cn/server.md
https://github.com/apache/incubator-brpc/blob/master/docs/cn/client.md
超时配置 set_timeout_ms connect_timeout_ms
Backup request 先向其中一个server发送请求,如果在ChannelOptions.backup_request_ms 后还没回来,再向另一个server发送.之后哪个先回来就取哪个
流式RPC https://brpc.apache.org/zh/docs/client/streaming-rpc/
熔断策略 https://github.com/apache/brpc/blob/master/docs/cn/circuit_breaker.md
源码学习
::google::protobuf::Closure* done brpc::ClosureGuard done_guard(done);
server.AddService server.Start