尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

5 个节点跑通 brpc:编译、验证、调优到生产上线的完整路径

5 个节点跑通 brpc:编译、验证、调优到生产上线的完整路径 5 个节点跑通 brpc编译、验证、调优到生产上线的完整路径【免费下载链接】brpcbrpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. brpc means better RPC.项目地址: https://gitcode.com/GitHub_Trending/brpc/brpc做分布式系统的人大概都踩过同一个坑RPC 框架文档一堆真到自己机器上编译时依赖版本、链接方式、调试开关全是一地鸡毛。brpc 是百度开源的工业级 C RPC 框架主打静态链接、无运行时依赖适合搜索、存储、推荐这类高并发场景。这篇不堆概念带你走完 5 个关键节点——把依赖装齐、把库编出来、用示例验证跑通、再做生产调优。每步都给了可直接执行的命令和先判断、再动手的检查点遇到报错知道往哪查。先记住一条原则brpc 强烈倾向静态链接这样部署到目标机器时不用再装任何运行时依赖。理解这点后面几乎所有编译选择都好做了。编译前检查清单先判断再动手装依赖、敲编译命令之前先花 1 分钟确认三件事能省掉后面 80% 的返工。系统是否在支持范围内brpc 官方覆盖了 Ubuntu / CentOS / Fedora / MacOS / WSL / Docker。先确认发行版和版本。编译器版本推荐 GCC 8.2官方支持范围 GCC 4.8–11.2、Clang 3.5。g --version看一眼太旧先升级或换 Clang。三个核心依赖装没装gflags定义命令行参数、protobuf消息序列化与服务接口、leveldbrpcz 特性用来记录 RPC 调用做追踪本地存储。官方构建文档含各发行版细节docs/cn/getting_started.md。下面默认按Ubuntu走CentOS 的差异在命令里用注释标出。环境依赖一键安装一条命令装齐先判断你的系统再执行对应命令。下面是 Ubuntu/Debian 系的一键安装CentOS/RHEL 系换成yum版本。# Ubuntu / Debian / WSL装编译器 三个核心依赖的开发包 sudo apt-get install -y git g make libssl-dev \ libgflags-dev libprotobuf-dev libprotoc-dev \ protobuf-compiler libleveldb-dev # CentOS / Fedora先装 EPEL 源再装对应包yum 版本 # sudo yum install epel-release # sudo yum install git gcc-c make openssl-devel \ # gflags-devel protobuf-devel protobuf-compiler leveldb-devel按需再补两个可选项# 可选启用 CPU/内存剖析器生产调优时看火焰图会用 sudo apt-get install -y libgoogle-perftools-dev # 可选要跑单元测试才需要装并编译 gtest默认不预编译 sudo apt-get install -y cmake libgtest-dev \ cd /usr/src/gtest sudo cmake . sudo make \ sudo mv lib/libgtest* /usr/lib/ cd -⚠️ gtest 源码路径会随系统版本变化。如果/usr/src/gtest不存在改去/usr/src/googletest/googletest里执行同样的 cmake make。选哪条编译路径先看决策标准再动手brpc 给了两条构建路径config_brpc.shmake脚本和 CMake。别二选一靠感觉按下面的判断标准对号入座。判断维度走 Make 脚本路径走 CMake 路径你的最终目标生产发布、交付静态二进制二次开发、要 LSP 智能提示切换编译器加--cxxclang --ccclang参数改CC/CXX环境变量去掉调试符号加--nodebugsymbols删CMakeCache.txt后加-DWITH_DEBUG_SYMBOLSOFF换 glog 日志加--with-glog加-DWITH_GLOGON链接共享库LINK_SO1 make加-DLINK_SOON重新 cmake一句话结论要上线交付走 Make 脚本要改代码调试走 CMake。两条路径的产物都是可运行的 brpc只是配置方式不同。下面分别给命令。路径 AMake 脚本编译生产向# 克隆源码唯一允许的仓库地址仅 clone 用 git clone https://gitcode.com/GitHub_Trending/brpc/brpc cd brpc # 标准静态编译指定头文件与库搜索路径 sh config_brpc.sh --headers/usr/include --libs/usr/lib # 并行编译用满 CPU 核数显著提速 make -j$(nproc)生产交付时常用的增强组合sh config_brpc.sh --headers/usr/include --libs/usr/lib \ --cxxclang --ccclang \ # 用 Clang 编译 --nodebugsymbols \ # 去掉调试符号体积更小 --with-glog # 改用 glog 日志 make -j$(nproc)路径 BCMake 编译开发调试向mkdir build cd build # 生成 LSP 配置 保留调试符号 关闭 glog方便 VSCode/Emacs 智能提示 cmake .. \ -DCMAKE_EXPORT_COMPILE_COMMANDSON \ -DWITH_DEBUG_SYMBOLSON \ -DWITH_GLOGOFF # 6 线程并行构建 cmake --build . -j6 # 可选安装到系统路径 sudo make install CMake 3.13 可以省掉手动建目录cmake -B build cmake --build build -j6。用 echo 示例验证证明你编对了编完别急着上线先用官方自带的回声服务跑一圈确认服务端收得到、客户端发得出。示例在 example/echo_c/Make 脚本路径编译的 brpc 可直接用它。cd example/echo_c make # 链接到刚编好的 brpc 静态库 ./echo_server # 后台启动服务端 ./echo_client # 客户端发一条消息客户端输出出现Echo received: ...之类的回显就说明 RPC 链路通了 ✅。想更进一步服务端默认开了内置 HTTP 服务curl localhost:8002能看到 brpc 暴露的一组诊断端点状态、连接数、gflags、rpcz 追踪、热点剖析等——这是后面生产调优的入口想跑完整单元测试cd test make sh run_tests.sh。跑之前记得前面已装好并编译 gtest。生产调优线程、内存分配器、实例监控验证通过后上线前做三件事调工作线程、选内存分配器、挂实例监控。1. 工作线程数——建议在brpc::ServerOptions里按 CPU 核心数的约 2 倍设置// 服务启动前设置 brpc::ServerOptions options; options.num_threads 8; // 工作线程数经验值约为 CPU 核心数 2 倍 // Linux 下默认走 epoll IO 模型无需额外配置2. 内存分配器——用 tcmalloc 替代默认分配器降低高并发下的锁竞争LD_PRELOAD/usr/lib/libtcmalloc.so ./your_service # 预加载 tcmalloc⚠️ 这里的 tcmalloc必须和编译 brpc 用的是同一个编译器否则启动时会死锁见下方速查表。3. 实例追踪——brpc 自带 trackme 工具把实例健康度上报给追踪服务./tools/trackme_server/trackme_server # 起追踪服务 ./your_service -trackme_server127.0.0.1:8000 # 被监控服务指向它上线后想看 CPU 到底耗在哪访问内置/cpu端点就能拿到 echo_server 的火焰图快速定位热点函数排错速查表报错先查这里编译和启动阶段最容易卡住的就是下面几类现象 → 原因 → 处理一表对齐别一上来就重装。现象常见原因处理undefined reference to google::protobuf::xxx系统 protobuf 版本过旧或与 brpc 不匹配源码编译 protobuf 3.14 覆盖系统版本--headers/--libs指向新装路径启动即卡死、gdb 看到锁等待tcmalloc 与 brpc 编译器不一致用编译 brpc 的同款编译器重新configure make sudo make installtcmallocgperftoolsgtest 相关编译报错没编译 gtest或源码路径变了进/usr/src/gtest不存在则/usr/src/googletest/googletest执行cmake . make把libgtest*拷进/usr/libCMake 改了选项不生效CMakeCache.txt缓存了旧值删除build/CMakeCache.txt后重新cmake ..想换共享库但仍是静态没清干净旧目标make clean后再LINK_SO1 makeCMake 走-DLINK_SOON重配tcmalloc 版本不一致导致的死锁gdb 里通常会看到大量__lll_lock_wait bthread 互斥锁的调用栈全局流程与下一步探索把 5 个节点串成一张图卡在哪一步看哪条边下一步探索方向都在仓库里跟着读即可想换协议example/ 下有 gRPC、Thrift、HTTP、MySQL/Redis 等一整排示例按目录结构找。想深入线程模型docs/cn/bthread.md 讲 bthread 协程怎么让高并发不阻塞。想做压测与追踪tools/ 里的rpc_press、rpc_replay、rpc_view配合 rpcz 端点做线上问题回放。想看基准数据docs/cn/benchmark.md。【免费下载链接】brpcbrpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. brpc means better RPC.项目地址: https://gitcode.com/GitHub_Trending/brpc/brpc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表