2021SC@SDUSC
一、BRPC是什么?
BRPC是百度开源的RPC框架,也就是说,我们首先要了解RPC究竟是什么。
进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。有两种类型的进程间通信(IPC)。
1.本地过程调用(LPC-Local Procedure Call)
LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
2.远程过程调用(RPC-Remote Procedure Call)
RPC类似于LPC,只是在网上工作。RPC开始是出现在Sun微系统公司和HP公司的运行UNⅨ操作系统的计算机中。
简单来说RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?HTTP请求算是解决这种问题的通用解法,但它的效率以及能力还有待提高。RPC更像是一种“方言”,它被设计出来为专门解决这类问题,比如某个公司内部为了解决通信,可以在内部自己使用RPC,拥有更好的效率。
而brpc就是百度内最常使用的工业级RPC框架, 有1,000,000+个实例(不包含client)和上千种多种服务。“brpc"的含义是"better RPC”。
二、框架功能简介
搭建能在一个端口支持多协议的服务, 或访问各种服务,包括:
- 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算法实现搭建高可用分布式系统。
Server能同步或异步处理请求。
Client支持同步、异步、半同步,或使用组合channels简化复杂的分库或并发访问。
通过http界面调试服务, 使用cpu, heap, contention profilers。
获得更好的延时和吞吐。
把你组织中使用的协议快速地加入brpc,或定制各类组件, 包括命名服务 (dns, zk, etcd), 负载均衡 (rr, random, consistent hashing)
三、下载编译
开源项目地址:gitee链接
官方的开源做的非常优秀,基本按照流程顺下来就可以完美运行。所以在此近介绍重要步骤。
框架支持多种系统,本人在Ubuntu编译运行。
构建
brpc鼓励静态链接依赖,以便于每个运行brpc服务的机器不必再安装依赖。
brpc有如下依赖:
gflags: 广泛用于定义全局选项。
protobuf: 消息、服务接口的序列化。
leveldb: /rpcz需要记录RPC以进行跟踪。
依赖准备
安装通用依赖,gflags, protobuf, leveldb:
$ sudo apt-get install -y git g++ make libssl-dev libgflags-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev
git克隆brpc,进入到项目目录,然后运行
$ git clone https://github.com/brpc/brpc.git
$ cd ./brpc/
使用config_brpc.sh编译brpc
$ sh config_brpc.sh --headers=/usr/include --libs=/usr/lib
$ make
运行样例
$ cd example/echo_c++
$ make
$ ./echo_server &
$ ./echo_client
上述操作会链接brpc的静态库到样例中
更多功能的实例演示会在后续伴随源码分析一同展示,在下载编译完后仅先运行项目自带的示例程序,以此判断下载编译是否成功
运行示例程序如图所示
四、项目分工
从gitee上可以看到官方发布的较为完整的说明文档。我们小组共三人,大致将主要内容分为三个部分,去寻找对应功能的代码进行分析,我主要负责第一部分,其次还有一些功能,计划分析完主干后如果还有余力可以把它们再进行划分再去分析这些部分。