bRPC 的使用

介绍百度的工业级 RPC 框架

Posted by Jerry Chen on July 8, 2021

介绍 bRPC

bRPC 是百度开源工业级 RPC 框架,很多知乎牛人评价 bRPC 比 gRPC 接口更友好;

官网 中文文档

编译 bRPC

安装依赖

如果需要静态连接 leveldb 库就安装 snappy 依赖:

1
sudo apt-get install -y libsnappy-dev

如果需要在 bRPC example 中启用 cpu/heap 分析器就安装 google-perftools:

1
2
3
4
5
6
7
8
9
git https://github.com/gperftools/gperftools.git

cd gperftools
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
sudo make install
sudo ldconfig

如果需要运行内置 test 程序,需要安装 googletest(apt 安装 gtest 是未编译的)

1
2
3
4
5
sudo apt-get install -y libgtest-dev
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libgtest* /usr/local/lib/

安装 openssl 1.1.1k(动态库):

1
2
3
4
5
6
7
8
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz

tar -vxf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
./config --prefix=/usr/local
make
sudo make install
sudo ldconfig

安装 gflags(动态库):

gflags 是 google 开源的命令行参数解析工具,比 getopt 功能更强大;

1
2
3
4
5
6
7
8
9
git clone https://github.com/gflags/gflags.git

cd gflags
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig

安装 protobuf:

protobuf 是 google 开发的一种数据描述语言;

安装 zlib 依赖:sudo apt install zlib1g-dev

1
2
3
4
5
6
7
8
9
git clone https://github.com/protocolbuffers/protobuf.git

cd protobuf/cmake
mkdir build
cd build
cmake -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig

安装 leveldb(动态库):

leveldb 是 google 开发的持久化的 key/value 存储数据库;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
git clone https://github.com/google/leveldb.git

cd leveldb
sed -i 's/https:\/\/github.com\//https:\/\/hub.fastgit.org\//g' .gitmodules
git submodule update --init

# 安装 third_party/googletest
cd third_party/googletest
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig
cd ../../..

# 安装 leveldb
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
sudo ldconfig

下载编译 brpc

  1. 从 github 克隆 brpc

    1
    2
    3
    
    git clone https://github.com/apache/incubator-brpc.git
    mv incubator-brpc brpc
    cd brpc
    
  2. 确保几个条件然后执行 brpc 配置脚本

    –headers 目录中存在:

    一些头文件在环境变量中可以找到也是可以的,比如 /usr/local/include/google/protobuf/*.h;

    • openssl/ssl.h
    • gflags/gflags.h
    • leveldb/db.h

    –libs 目录存在:

    • libssl.so 动态库
    • libgflags.so 动态库
    • libprotobuf.so 动态库
    • libleveldb.so 动态库

    如果上述目标不满足就修改指定目录,或者从其他目录拷贝一下目标文件到指定目录,然后执行配置脚本,接着编译:

    一定要保证依赖项都是动态库,之前用静态库踩坑了,总是链接失败;

    1
    2
    
    sh config_brpc.sh --headers=/usr/include --libs=/usr/local/lib
    make
    

    最终 output 目录生成的文件如下:

初步使用 bPRC

第一个示例

我们找到了一个 brpc 中最简示例:

1
cd example/echo_c++
遇到问题

开始编译:

1
make

编译后会生成 echo_serverecho_client,理论上依次执行两个 elf 会成功通信,但是我这里执行起来都是段错误,这个问题我在官方 github 提了 issue #1470

尝试解决

编辑目录中 vim CMakeLists.txt 添加依赖项 tcmalloc:

接着再尝试编译:

1
2
3
4
mkdir build
cd build
cmake ..
make
运行结果
  1. 终端 1 运行服务器

    1
    
    ./echo_server
    

  2. 终端 2 运行客户端

    1
    
    ./echo_client