又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目

article/2025/8/29 19:51:48

2023 年 1 月 26 日,Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业,成为 Apache的顶级项目。

我听到这个消息是挺开心的,毕竟是又一款由国人主导的apche顶级项目,再次证明国内在开源界正在发挥越来越重要的作用。

Apache bRPC的历史

Apache bRPC的前身是百度内部的一个RPC框架,采用C++语言编写,号称工业级别,在百度内部众多基础和业务系统中得到大规模的应用,是属于实战出来的,有很好的落地效果和"底子"。

2017年的时候正式在Github上开源,2018年捐赠给了Apache软件基金会(这真是一个非常好的选择),进入了Apache孵化器,直到最近正式毕业。

bRPC功能全面、可扩展性强、性能强、易于使用,目前社区热度还是很不错的,在Github上有14.5K Star,开发者数量超过130,社区活跃度也不错。

Apache bRPC目前在搜索、推荐、直播等领域被广泛使用,国内不少互联网公司也公开了使用情况,例如小红书、欢聚时代、作业帮等,据说线上服务实例数已超过 600W,已成为业界广受欢迎的开源 RPC 框架之一,github上有登记了一部分bRPC的应用企业和情况,参考如下链接:

https://github.com/apache/brpc/blob/master/community/cases.md

Apache bRPC 社区官方链接

  • Apache bRPC 官方网站:https://brpc.apache.org/
  • Apache bRPC GitHub:https://github.com/apache/brpc
为什么重复造轮子?

说起RPC框架,估计大家一下子能念叨出来很多,比如gRPC、Thrift、Apache Avro、Apache Dubbo等等,那么Apache bRPC有什么不一样呢,为什么要重复造这个轮子?bRPC究竟有什么优势呢?

这个点也是我所疑惑的,跟一些朋友交流了一圈加上网络上能查到的创始团队公开的一些信息,总结如下(若有失偏颇之处,还请指正):

每个RPC框架都有自己所考虑认为非常重要的能力,有一些考虑功能丰富而强大、有一些考虑使用方便、有一些考虑支持多语言、有一些考虑性能,而很难有一个框架在所有方便都做得最为强大,也许这也是同时有这么多RPC框架存在的原因。bRPC考虑更多的是可靠性、易用性、问题排查方便、性能高、尽量扩展性强。

(1)、可靠性强

以Google gRPC为例,从功能上来说,百度bRPC和Google gRPC都是用来构建分布式系统的RPC框架,它们都宣称可以提供可靠性的服务,不过百度bRPC比Google gRPC在可靠性方面有更多的投入,比如可靠消息传递、流式数据传输、消息发布订阅等,而Google gRPC更加注重性能和多语言的开发,可以说Google gRPC是大而全的,而bRPC则在可靠性方面下了比较大功夫。(个人觉得无法断言哪种更好,例如某些情况下你需要更好的对多语言的支持,有些时候则不需要,例如只需要支持C++的情况下,bRPC可能就更合适。)

(2)、易用性高

创始团队认为易于使用对用户才是负责任的,而不是什么都做成选项丢给用户,增加用户的学习和使用成本。(对于此,无比赞同,很多开源软件使用以后某个参数的使用不正确就很容易发生问题,大量时间消耗在了排查上面~)

所以bRPC配置项尽量少,能默认的尽量设置默认值,使用简单和方便,尽量考虑在一些用户场景上的异常处理,例如自动处理RPC请求的超时和重试。

(3)、问题定位方便

bRPC内置了各种HTTP探测的接口,通过这些接口可以查询到延时情况、连接、内存、CPU热点等问题,个人觉得有点类似于Springboot的Endpoint设计。

对于这个功能我疯狂点赞,因为这对于问题排查确实是非常方便的,曾经我做了相当长一段时间关于应用性能的排查分析,深切感受到“黑盒”对于排查问题的困难。

(4)、高性能

这个我就不废话了,看官方提供的测试对比结果吧:

  1. 同机单client→单server在不同请求下的QPS(越高越好)

  2. 同机单client→单server在不同线程数下的QPS(越高越好)

  3. 跨机多client→单server的QPS(越高越好)

  4. 跨机多client→多server在固定QPS下的延时CDF(越左越好,越直越好)

可以看到无论在吞吐、延时和长尾的处理上,bRPC都表现得比其他的RPC框架更加优秀,gRPC在各项指标都垫底(未自己独立进行测试,抱一定怀疑的态度,得抽时间自己测试一下,特别是gRPC的表现~有测试过的朋友们来分享一下。)

(5)、可扩展性

虽然bRPC专注于可靠性、易用性和问题定位方便性,但是不意味着其他的就拉跨,在扩展性方面的设计也是比较好的,例如通过语言包装可以支持java、go、python等多种语言,同时它支持多种协议,如HTTP,gRPC,thrift,flv等等,在百度内部一个 brpc server 同端口可以支持二十几种协议,这对于服务的平滑迁移就非常方便。


http://chatgpt.dhexx.cn/article/V0O96wMc.shtml

相关文章

brpc源码学习(二)-bthread的创建与切换

brpc引入m:n的线程模型,固定的内核线程调度运行大量的bthread以避免内核线程上下文切换带来的开销。 bthread类似协程,即用户态线程,bthread的切换不会陷入内核,不会进行一系列内存同步等耗时操作,因此bthread的切换在…

brpc搭建、编译和使用

前面介绍了brpc的理解,这里给出brpc官方的搭建过程,以及提供的测试用例,对brpc的使用有一个宏观的理解。 PS:这里必须再次称赞百度工程师门,brpc开源的文档非常的丰富,仅仅是看文档都受益匪浅,…

初探brpc

今天开始对百度的这块开源项目进行学习,之前一直有听说,但是没有去尝试使用,下面就自己对brpc的学习心得进行一个总结。 1、brpc的简介 brpc又称为baidu-rpc,是百度开发一款“远过程调用”网络框架。目前该项目已在github上开源…

高性能RPC框架BRPC核心机制分析

作者:tom-sun 链接:https://zhuanlan.zhihu.com/p/113427004 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1. 简介 百度开源的RPC框架BRPC,以其高性能、低延迟、易用性等优势…

brpc internal

brpc 内部实现 thread model pthread 1:1atomic cache同步降低性能 fiber n:1 -> nginx 多核难以扩展, 用户不能做阻塞操作. context 存储contextualStack bthread_make_fcontext (boost::context)手动切换线程上下文->函数栈, 寄存器 bthread_jump_fcontext 将con…

brpc学习:bvar

一.介绍 bvar是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing,相比UbMonitor(百度内的老计数器库)几乎不会给程序增加性能开销,也快于竞争频繁的原子操作。 brpc…

c++ http服务器之Apache工具ab压力测试(nginx与brpc)

系列服务器开发 文章目录 系列服务器开发前言一、ab是什么?二、ab测试实例nginx1.nginx环境准备与安装2.ab测试nginx本身的性能3.ab测试基于brpc的http服务器性能 三、ab实战之常见问题解决总结 前言 一、ab是什么? ab全称为:apache bench&a…

brpc源码学习(五)-IOBuf

目录 Block BlockRef IOBuf 主要api tls优化 IOPortal protobuf接口 首先放上官方介绍: brpc使用butil::IOBuf作为一些协议中的附件或http body的数据结构,它是一种非连续零拷贝缓冲,在其他项目中得到了验证并有出色的性能。IOBuf的接…

BRPC学习

一 源码地址:GitHub - apache/incubator-brpc: brpc 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"…

brpc源码解析(四)—— Bthread机制

目录 一、概述二、启动入口函数三、内部启动函数四、worker工作入口五、总结 Bthread是brpc用到的一个线程库,也是brpc的核心之一,默认情况下,包括用户代码在内的绝大部分代码都是运行在bthread里的,bthread也是brpc实现高性能的基…

Springboot集成Brpc

本文代码可在总结处自取。 1、为什么要写这篇文章 最近自己做的业务在和C团队对接,双方需要指定接口与传输协议。原本是直接使用http协议传输json数据,对双方来说都比较简单可接受。但是json数据传输效率实在令人堪忧,导致我们不得不另寻其道…

brpc源码学习(六)- brpc server 端整体流程

brpc的使用比较容易上手,以官方demo为例,因为brpc的数据序列化依赖protobuf,所以首先需要定义个proto 然后继承EchoService并实现Echo方法 然后是整体流程 启动还是比较简单的,定义server,AddService,然后S…

brpc源码解析(一)—— rpc服务添加以及服务器启动主要过程

目录 1.往Server里添加Service(业务代码)2.设置服务器参数3.启动服务器 平时的工作用到了baidu-rpc搭建rpc服务,作为戈君大神的大作,在没有开源的时候,这个c 的rpc框架在厂内就已经好评颇多,无论是性能、文…

brpc初步学习

一.BRPC介绍 BRPC百度开源的一个rpc框架,它具有以下特性: 基于protobuf接口的RPC框架,也提供json等其他数据格式的支持囊括baidu内部所有RPC协议,支持多种第三方协议模块化设计,层次清晰,很容易添加自定义…

brpc介绍、编译与使用

brpc又称为baidu-rpc,是百度开发一款“远程过程调用”网络框架。目前该项目已在github上开源——https://github.com/brpc/brpc。(转载请指明出于breaksoftware的csdn博客) 据目前公开的资料,我们发现百度内部从2010年开始&#x…

NB-IOT与物联网

1. 物联网的技术格局 短距离(智能家居/穿戴等) --- zigbee, wifi, BLE 长距离 (LPWA 低功耗广域) --- LORA, NB-IOT 关于LORA大致了解了一下情况 . Lora 其实已经是一个很成熟的技术方案. 国外已经大范围使用,国内也有不少公司在基于LORA运营物联网系统. LORA的系统结构…

lora和nbiot的相同点,它们之间有何区别和联系?

在物联网无线数据传输中,有诸多方式可以选择,包括蓝牙、WIFI、FSK、ASK/OOK、Lora、Zigbee、NB-iot、Z-Wave.等, 其中lora 和NBIot 是自2016年来比较热门的两个无线通讯方式。 我们今天就和大家简单的聊聊Lora 和NBiot。 我是在2016年接触…

NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机

嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞 好习惯,要养成 一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。在第一节中“NB-IOT开发|nbiot开发教程《一》AT指令类模组驱动解析”我们说到AT指令模组最好的驱动-状态机。本节我们就…

基于华为云IOT平台实现多节点温度采集(STM32+NBIOT)

一、前言 当前的场景是,在高速公路上部署温度采集设备,在高速路地表安装温度检测传感器,检测当前路段的路面实际温度。一段高速路上有多个地点需要采集温度数据。 采集温度数据需要上传到云平台进行数据存储,并且通过可视化界面展示温度变化曲线,支持查询最近几天的温度信…

NB-IoT的优势是什么?

NB-IoT的优势 : • 强链接:在同一基站的情况下,NB-IoT可以比现有无线技术提供50-100倍的接入数。一个扇区能够支持10万个连接,支持低延时敏感度、超低的设备成本、低设备功耗和优化的网络架构。举例来说,受限于带宽&a…