brpc RPC框架编译部署教程:从零跑通示例到上线
brpc RPC框架编译部署教程从零跑通示例到上线【免费下载链接】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在做需要扛住高并发的 C 服务时RPC 是第一道要稳住的环节。这是 brpc 编译部署的完整实操按官方构建脚本从源码构建用官方 echo 示例验证一直走到可以开始上线的状态。文中的版本、开关、路径都出自仓库自带的构建文档不掺猜测如果你之前被版本问题卡过文末的急救表能帮你少走弯路。30 秒认识 brpc它能替你做什么一句话定位brpc 是用 C 编写的工业级 RPC 框架百度内部叫 baidu-rpc长期支撑搜索、存储、机器学习、广告、推荐这类高性能系统。它的定位是替你把“网络收发 协议解析 服务发现”这套活干掉让你直接写业务。它能做的事一个端口多协议restful http/https、h2/gRPC、thrift、redis/memcached 客户端、rtmp 流媒体、baidu_std 等一个 Server 全接住灵活的调用模式Server 可同步或异步处理请求Client 支持同步、异步、半同步复杂分库和并发访问可以用组合 channels 收敛内置 HTTP 调试页查状态、看指标变量、跑 CPU/heap/争用 profiler不用另装监控可定制的命名与负载均衡dns、zookeeper、etcd 等命名服务rr、random、一致性哈希等算法接入自己组织的协议成本也很低一个真实场景搜索或推荐服务的入口每次请求要调几百台后端。用 brpc 的 Channel 配一行命名服务地址负载均衡、重试、超时这些机制都是框架自带的。✅ 开跑前过检查单系统、编译器、依赖逐项核对别急着敲编译命令环境不对才是问题的大头。对照官方构建文档的要求逐项核一遍项目要求操作系统Ubuntu / LinuxMint / WSL / Fedora / CentOSMacOS 支持 M1 编译但官方明确性能低于 Linux性能敏感的生产别用编译器GCC 5.0–11.2推荐 8.2 及以上默认启用 C14Clang 3.5–4.0glibc2.12–2.25gflags2.1–2.2.22.1.1 有已知 bug 需要打补丁protobuf3.0–5.29不支持 2.xbrpc 用了内部 API不建议追最新版leveldbrpcz 功能依赖它来记录 RPC 用于追踪openssl0.97–1.1https 功能依赖可选libgoogle-perftools-devCPU/heap profiler、libgtest-dev跑单元测试Ubuntu 上一条命令装齐基础依赖CentOS 用 yum 安装对应 -devel 包见官方构建文档sudo apt-get install -y git g make libssl-dev libgflags-dev \ libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev装完先核对最容易翻车的两项protobuf 版本在 3.0–5.29 区间内GCC 是 8.2 以上。 一条命令跑通的 brpc 源码编译最短路径构建入口有三种传统脚本、CMake、Bazel。官方文档默认走脚本路线静态链接是默认行为一次构建得到自包含的二进制这也是生产环境的首选所以下面只讲这一条主线。git clone https://gitcode.com/GitHub_Trending/brpc/brpc cd brpc sh config_brpc.sh --headers/usr/include --libs/usr/lib make -j$(nproc)--headers和--libs告诉脚本去哪找依赖的头文件和库支持多路径并用它会递归搜索子目录。常用追加开关--cxxclang --ccclang把编译器换成 Clang--nodebugsymbols去掉调试符号二进制更轻--with-glog用 glog 替换默认日志--with-thrift启用 thrift 支持不走主线的话按这个表选即可路线适合谁怎么起CMake开发调试要compile_commands.json喂给 VSCode/LSPcmake -B build cmake --build build -j6Bazel工程已用 Bazel官方示例在example/build_with_bazel_moduleDocker只想体验不想动本机环境仓库根目录执行docker build -t brpc:master .CMake 路线同样支持-DWITH_GLOGON、-DWITH_DEBUG_SYMBOLSOFF等开关与脚本参数一一对应。用 3 分钟验证 brpc 真的能用跑官方 echo 示例编译完只是半程跑通示例才算确认。仓库里的example/echo_c是最小的例子客户端说什么服务端就原样回什么。cd example/echo_c make ./echo_server # 后台启动 echo 服务默认监听 8000 端口 ./echo_client # 每秒发一次 hello world 请求示例默认协议 baidu_std超时 100ms最多重试 3 次这些都挂在 gflags 上命令行参数就能改。成功长这样服务端启动无报错持续监听客户端终端每秒打出一行 INFO 日志内容包含Received response from、回显文本hello world和一次 latency微秒级让它跑上十几秒没有超时和重连再 CtrlC 收尾想更放心就进test目录make后执行sh run_tests.sh官方单元测试会全部跑一遍。上生产前必须做的三件事部署形态与调优用一句话决定部署形态。默认构建就是静态链接一个二进制带走全部单机或容器部署都不会有运行时依赖问题。多台服务共享同版本 brpc、想一处升级处处生效就先make clean再LINK_SO1 make出共享库。判断标准就一条你的发布单元是不是“一台机器/一个容器”是就静态想共享升级就动态。启动前设两个参数。brpc::ServerOptions里最常调的是num_threads工作线程数和max_concurrency单个方法允许的最大并发。先把 num_threads 按 CPU 核数设个初值再压测观察 /vars 和 /status 慢慢加。另外记住brpc 默认不链接 tcmalloc想用要自己加并选与编译器匹配的版本。监控从第一天接上。内置 HTTP 页面开箱即用/status 看服务整体健康度/vars 看指标/flags 改运行时参数/cpu、/heap 做性能剖析。实例多了部署一个 trackme_server各服务带-trackme_serverIP:PORT参数启动它会周期性收到心跳并打印日志方便聚合实例地址。 出问题先翻这张 brpc 编译部署急救表现象原因处理链接时报undefined reference to google::protobuf::xxxprotobuf 版本越界。brpc 使用其内部 API只支持 3.0–5.29且 1.8.0 之后的 brpc 不再兼容 2.x把 protobuf 换成支持范围内的版本连同你的代码一起重编程序在 main() 之前卡住或死锁栈停在 tcmalloc 里tcmalloc 与 brpc 用了不同版本的 GCC 编译用与 brpc 相同的编译器重新编译 tcmalloc官方文档明确记录了这个现象引入 glog 后日志冲突、符号重定义brpc 自带一套默认日志与 glog 不能共存config_brpc.sh 加--with-glogCMake 则是-DWITH_GLOGON改用 glog 版如果碰到诡异的内存问题、程序不直接崩先怀疑你链接的 tcmalloc移除它再看现象是否消失。接下来往哪走完整构建文档含 Docker、Bazel、自编译依赖目录的组织方式docs/cn/getting_started.md全部示例目录http、grpc、redis、流式 RPC 都有现成代码example/Server 端用法详解同步/异步写法与参数说明docs/cn/server.md最划算的动手动作把echo_c拷一份换成你自己定义的 proto把 server 里的 Echo 方法换成业务逻辑第一个 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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考