又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目
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)、高性能
这个我就不废话了,看官方提供的测试对比结果吧:
-
同机单client→单server在不同请求下的QPS(越高越好)
-
同机单client→单server在不同线程数下的QPS(越高越好)
-
跨机多client→单server的QPS(越高越好)
-
跨机多client→多server在固定QPS下的延时CDF(越左越好,越直越好)
可以看到无论在吞吐、延时和长尾的处理上,bRPC都表现得比其他的RPC框架更加优秀,gRPC在各项指标都垫底(未自己独立进行测试,抱一定怀疑的态度,得抽时间自己测试一下,特别是gRPC的表现~有测试过的朋友们来分享一下。)
(5)、可扩展性
虽然bRPC专注于可靠性、易用性和问题定位方便性,但是不意味着其他的就拉跨,在扩展性方面的设计也是比较好的,例如通过语言包装可以支持java、go、python等多种语言,同时它支持多种协议,如HTTP,gRPC,thrift,flv等等,在百度内部一个 brpc server 同端口可以支持二十几种协议,这对于服务的平滑迁移就非常方便。
相关文章:
又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目
2023 年 1 月 26 日,Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业,成为 Apache的顶级项目。 我听到这个消息是挺开心的,毕竟是又一款由国人主导的apche顶级项目,再次证明国内在开源界正在发挥越来越重要的作用。 …...
多数据库学习之GBase8s查询数据库表元信息常用SQL
多数据库学习之GBase8s查询数据库表元信息常用SQL简介常用SQL创建用户创建数据库及模式获取表元数据其他参考链接简介 背景介绍 GBase 8t是基于IBM informix源代码、编译和测试体系自主研发的交易型数据库产品。 南大通用安全数据库管理系统(简称 GBase 8sÿ…...
Jetpack之Lifecycle应用与源码分析
Build lifecycle-aware components that can adjust behavior based on the current lifecycle state of an activity or fragment. 上面是源于官网的定义,简单翻译就是说Lifecycle的作用就是基于当前的Activity或者Fragment的生命周期当前状态构建可感知生命周期的…...
Python序列类型之集合
💐💐💐欢迎来到小十一的博客!!! 🎯博客主页:🎯程序员小十一的博客 🚀博客专栏:🚀Python入门基础语法 🌷欢迎关注ÿ…...
java 自定义json解析注解 复杂json解析
java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...
Vue3配置路由(vue-router)
文章目录前言一、配置路由(vue-router)1、安装路由2、新建页面3、创建路由配置文件4.特殊报错!前言 紧接上篇文章,vue3的配置与vue2是有所差别的,本文就讲述了如何配置,如果本文对你有所帮助请三连支持博主…...
【代码随想录二刷】Day9-字符串-C++
代码随想录二刷Day9 今日任务 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 字符串总结 双指针总结 语言:C KMP 链接:https://programmercarl.com/0459.重复的子字符串.html#kmp 用处:当出现字符串不匹配时,可以利…...
google colab上如何下载bert相关模型
首先要知道模型的地址 tensorflow版本的模型: https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip pytorch版本的模型 ‘bert-base-cased’: …...
Vue2.0页面缓存机制联合页面标签的交互(keep-alive + router)
预期效果:(借助iview-ui的在线体验页面示意一下) 项目中只有一部分页面需要缓存,且存在多级路由的页面。每打开一个菜单,就会新增一个 Tab标签,只要 Tab标签不关闭,对应的页面就会被缓存&#x…...
C++STL剖析(四)—— stack和queue的概念和使用
文章目录1. stack的介绍2. stack的构造3. stack的使用🍑 push🍑 top🍑 pop🍑 empty🍑 size🍑 swap🍑 emplace4. queue的介绍5. queue的构造6. queue的使用🍑 push🍑 size…...
流浪地球 | 建筑人是如何看待小破球里的黑科技的?
大家好,这里是建模助手。 想问问大家今年贺岁档,都跟上没有,今天请允许我蹭一下热点表达一下作为一个科幻迷的爱国之情。 抛开大刘的想象力、各种硬核科技&以及大国情怀不提,破球2中的传承还是让小编很受感动,无…...
软中断在bottom-half中调用
https://www.bilibili.com/read/cv20785285/简介软中断可以在两个位置得到机会执行:硬中断返回前 irq_exit中断下半部 Bottom-half Enable后情景分析情景1spin_unlock_bh__raw_spin_unlock_bh__local_bh_enable_ip 打开Bottom-half,并让softirq有机会…...
GEE遥感云大数据在林业中的应用
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
Apollo架构篇 - 客户端架构
前言 本文基于 Apollo 1.8.0 版本展开分析。 客户端 使用 Apollo 支持 API 方式和 Spring 整合两种方式。 API 方式 API 方式是最简单、高效使用使用 Apollo 配置的方式,不依赖 Spring 框架即可使用。 获取命名空间的配置 // 1、获取默认的命名空间的配置 C…...
JVM调优最全面的成长 :参数详解+垃圾算法+示例展示+类文件到源码+面试问题
目录1.优秀的Java开发者1.1 什么是Java?1.2 编程语言1.3 计算机[硬件]能够懂的语言1.3.1 计算机发展史1.3.2 计算机体系结构1.3.3 计算机处理数据过程1.3.4 机器语言1.3.5 不同厂商的CPU1.3.6 操作系统1.3.7 汇编语言1.3.8 高级语言1.3.9 编译型和解释型1.3.9.1 编译…...
linux驱动常用函数
以下为一些常见用户态函数在内核中的替代,包括头文件和函数声明:1、动态申请内存:linux/vmalloc.hvoid *vmalloc(unsigned long size);void vfree(const void *addr);2、字符串操作:linux/string.hvoid * memset(void *,int,__ker…...
Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask
文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图,并配置数据对象(不需要选择任意节点) 2. 编码与测试 /*** 部署流程*/ Test…...
C语言实现五子棋(n子棋)
五子棋的历史背景: 五子棋起源于中国,是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。五子棋容易上手,…...
OpenStack云平台搭建(2) | 安装Keystone
目录 1、登录数据库配置 2、数据库导入Keystone表 3、配置http服务 4、创建域、用户 5、创建脚本 Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务访问规则和服务令牌功能的组件。下面我们进行Keystone的安装部署 1…...
基于javaFX的固定资产管理系统
1. 总体设计 本系统分为登录模块、资产管理模块、资产登记模块和信息展示模块共四个模块。 登录模块的主要功能是:管理员通过登录模块登录本系统; 资产管理模块的主要功能有:修改、删除系统中的固定资产; 在资产登记模块中&#…...
板子登录和挂载问题记录
ubuntu登录板子问题 ssh登录ssh 10.1.3.15,显示No route to host 则尝试在板子上ping 本机ip 试一下 挂载 本地机器vim /etc/export编辑此内容并保存 /exports_0209/tda4_build *(rw,no_root_squash,nohide,insecure,no_subtree_check,async)1.挂载nfs方法 mou…...
二、Linux文件 - Open函数讲解实战
目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 2.3.1O_RDWR和O_CREAT 2.3.2O_APPEND的用法 1.Open函数讲解 高频使用的Linux系统调用:open write read close Linux自带的工具…...
源码分析Spring解决循环依赖的过程
循环依赖是之前很爱问的一个面试题,最近不咋问了,但是梳理Spring解决循环依赖的源码,会让我们对Spring创建bean的流程有一个清晰的认识,有必要搞一搞。开始搞之前,先参考了这个老哥写的文章,对Spring处理循…...
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集已使用.NETFramework 2.0,3.0或3.5创建了.NET程序集,但是当尝试在构造函数节点中加载这些程序集时,却收到LabVIEW消息显示: 所选文件不是.NET程序集,所属类型库或自动化可执行文件。所以想确认是否可以在…...
Fluent Python 笔记 第 2 章 序列构成的数组
2.1 内置类型序列概览 容器序列(能存放不同类型的数据):(作者分的类) list、tuple 和 collections.deque扁平序列(只能容纳一种类型): str、byes、bytearray、memoryview 和 array.array可变:…...
句子扩充法
人,物,时,地,事 什么人和什么物在什么时间什么地点发生了什么事。 思维导图:以人为中心,人具有客观能动性。 例如:秋燕南飞。 扩展为: 盘旋在洞庭湖上方的大雁渐渐消失了。“它们都…...
Java并发编程概述
在学习并发编程之前,我们需要稍微回顾以下线程相关知识:线程基本概念程序:静态的代码,存储在硬盘中进程:运行中的程序,被加载在内存中,是操作系统分配内存的基本单位线程:是cpu执行的…...
Java常见数据结构的排序与遍历(包括数组,List,Map)
数组遍历与排序 数组定义 //定义 int a[] new int[5]int[] a new int[5];//带初始值定义 int b[] {1,2,3,4,5};赋值 //定义时赋值 int b[] {1,2,3,4,5};//引用赋值 a[6] 1 a[9] 9 //未赋值为空取值 //通过下表取值,从0开始 b[1] 1 b[2] 2遍历 Test p…...
数据结构|绪论
🔥Go for it!🔥 📝个人主页:按键难防 📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 📖系列专栏:数据结构与算法 ὒ…...
内网渗透(十二)之内网信息收集-内网端口扫描和发现
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...
wordpress会员制订阅/广告网站策划方案
三种事件绑定方法总结1、多种事件绑定方式汇总2、源代码1、多种事件绑定方式汇总 组件对象的绑定 通过 command 属性绑定(适合简单不需获取 event 对象)Button(window, text "login", command login)通过 bind 方法绑定(适合需…...
盐山网站建设/品牌营销网站建设
T2 题解: x与y相交说明a[x] < b[y]且a[y] < b[x] x在y左边说明b[x] < a[y] 每条线段x还应满足a[x] < b[x] 这相当于一个拓扑排序问题,小的数相当于安排在前面的任务 输出的第i个数就是第i个任务,那么a[1]尽可能小说明任务1要…...
长沙网络营销首选智投未来/aso安卓优化公司
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 1.数据结构起源 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 2.基本概念和术语 数据数据元素数据项数据对象 3.逻辑结构和物…...
温州做网站就来温州易富网络/弹窗广告最多的网站
父窗体Form1 子窗体Form2 Form1中有一个datagridview控件和一添加按钮,Form2中有一个Text控件和一个保存按钮 要求点击Form1窗体上的添加按钮,弹出Form2,再text里面输入内容,点击保存自动关闭Form2,刷新Form1中datagri…...
大连普兰店网站建设/企业网站建站模板
wiki 地址:http://wiki.apache.org/solr/FrontPage, 里面有各个参数详细的介绍。 一.基本查询 q 查询的关键字,此参数最为重要,例如,qid:1,默认为q*:*, fl 指定返回哪些字段,用逗号…...
五莲网站建设公司/山东免费网络推广工具
2019独角兽企业重金招聘Python工程师标准>>> 1、在index.php添加调试的配置为true,否则配置修改后不能立即生效 define (APP_DEBUG, true ); 2、通用的配置文件放在 Application/Common/Conf下面 3、修改config.php,配置数据库类型,否则报错:…...