brpc学习:bvar

article/2025/8/29 19:45:38

一.介绍

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

brpc集成了bvar,http接口下的/vars可查看所有曝光的bvar,/vars/VARNAME可查阅某个bvar,在brpc中的使用方法请查看vars。

brpc大量使用了bvar提供统计数值,当你需要在多线程环境中计数并展现时,应该第一时间想到bvar。

但bvar不能代替所有的计数器,它的本质是把写时的竞争转移到了读:读得合并所有写过的线程中的数据,而不可避免地变慢了。当你读写都很频繁或得基于最新值做一些逻辑判断时,你不应该用bvar。

常用的bvar有:

• bvar::Adder : 计数器,默认0,varname << N相当于varname += N。
• bvar::Maxer : 求最大值,默认std::numeric_limits::min(),varname << N相当于varname = max(varname, N)。
• bvar::Miner : 求最小值,默认std::numeric_limits::max(),varname << N相当于varname = min(varname, N)。
• bvar::IntRecorder : 求自使用以来的平均值。注意这里的定语不是“一段时间内”。一般要通过Window衍生出时间窗口内的平均值。
• bvar::Window : 获得某个bvar在一段时间内的累加值。Window衍生于已存在的bvar,会自动更新。
• bvar::PerSecond : 获得某个bvar在一段时间内平均每秒的累加值。PerSecond也是会自动更新的衍生变量。
• bvar::LatencyRecorder : 专用于记录延时和qps的变量。输入延时,平均延时/最大延时/qps/总次数 都有了。
• bvar::Status:记录和显示一个值,拥有额外的set_value函数。
• bvar::PassiveStatus:按需显示值。在一些场合中,我们无法setvalue或不知道以何种频率setvalue,更适合的方式也许是当需要显示时才打印。用户传入打印回调函数实现这个目的。

二. bvar的导出

最常见的导出需求是通过HTTP接口查询和写入本地文件。前者在brpc中通过内置的http服务提供(即通过/vars/xxx访问),后者则已实现在bvar中,默认不打开。

1. bvar_dump方式

可以通过flag打开:
在这里插入图片描述
当bvar_dump_file不为空时,程序会启动一个后台导出线程以bvar_dump_interval指定的间隔更新bvar_dump_file,其中包含了被bvar_dump_include匹配且不被bvar_dump_exclude匹配的所有bvar。

注意:bvar程序必须要在持续运行中,才会记录下bvar,一闪而过的简单程序,不会记录下bvar值。

三.通过bvar_dump方式导出示例代码

#include <bvar/bvar.h>
#include <gflags/gflags.h>
#include <glog/logging.h>
#include <iostream>using namespace std;int main(int argc, char* argv[]) {google::ParseCommandLineFlags(&argc, &argv, true);bvar::Adder<int> g_read_error;g_read_error << 10 << 20;g_read_error.expose("add_reader");bvar::Status<int> foo_count2;foo_count2.expose("foo_count2");for(int i=0; i<2000; ++i) {foo_count2.set_value(i);int a;cin >> a;if(a == 0){break;}}return 0;
}

编译:

cc_binary(name = 'bvar',srcs = 'bvar.cpp',deps = ['#brpc','#gflags','#glog']
)

flag文件bvar.gflags:

-bvar_dump=true
-bvar_dump_interval=1

运行后,在当前目录会生成monitor文件夹,进入后会产生两个文件:

bvar.bvar.data
bvar.bvar.system.data

带system的bvar记录了系统监控值,第一个文件里记录了add_reader和foo_count2值:

bvar_add_reader : 30
bvar_bthread_key_count : 0
bvar_bthread_keytable_count : 0
bvar_bthread_keytable_memory : 0
bvar_bthread_stack_count : 0
bvar_bvar_dump_interval : 1
bvar_bvar_sampler_collector_usage : 0.000225182
bvar_foo_count2 : 4

默认bvar_dump_interval是10s,即每10s更新一次文件,可以设置短一点,看出效果,每执行一次循环,bvar_foo_count2值就加1。

四.http获取bvar示例代码

当然也可以通过brpc内置的http服务获取bvar。
如果你的程序只使用了brpc的client或根本没有使用brpc,但你也想使用brpc的内置服务,只要在程序中启动一个空的server就行了,这种server称为dummy server。

只要在程序运行目录建立dummy_server.port文件,填入一个端口号(比如8888),程序会马上在这个端口上启动一个dummy server。在浏览器中访问它的内置服务,便可看到同进程内的所有bvar。

示例代码:

#include <bvar/bvar.h>
#include <iostream>
#include <brpc/server.h>using namespace std;int main(int argc, char* argv[]) {brpc::StartDummyServerAt(8080);bvar::Status<int> foo_count2;foo_count2.expose("foo_count2");for(int i=0; i<2000; ++i) {foo_count2.set_value(i);int a;cin >> a;if(a == 0){break;}}return 0;
}

编译文件与上面一样,运行后,就可以像brpc那样,通过访问http接口就可以访问所有的bvar了。
如访问foo_count2这个bvar,就通过下面的url访问:
http://192.168.12.32:8080/vars/foo_count2


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

相关文章

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

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

brpc源码学习(五)-IOBuf

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

BRPC学习

一 源码地址&#xff1a;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用到的一个线程库&#xff0c;也是brpc的核心之一&#xff0c;默认情况下&#xff0c;包括用户代码在内的绝大部分代码都是运行在bthread里的&#xff0c;bthread也是brpc实现高性能的基…

Springboot集成Brpc

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

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

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

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

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

brpc初步学习

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

brpc介绍、编译与使用

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

NB-IOT与物联网

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

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

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

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

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

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

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

NB-IoT的优势是什么?

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

MN316_OPEN(NBIOT)物联网模块环境搭建

因为项目的需要,这里要使用NBIOT,踩了一些坑,这里总结一下! 编译 官方给的SDK如下: 按照说明,在该目录下直接运行如下指令:".\build.bat dlvs_h0 demo"即可成功编译,但是我编译的时候不成功,报错如下: 最后发现是因为我的目录太深的原因造成的,把"MN316_Op…

stm32毕业设计 NBIOT远程通信系统

文章目录 1 简介2 NBIOT 简介2.1 NBIOT 的特点2.2 NBIOT 的优点2.3 NBIOT能做什么 NBIOT 模块使用4 实现效果5 STM32 驱动NBIOT模块6 最后 1 简介 Hi&#xff0c;大家好&#xff0c;NBIOT是近几年不比较火的远程通信模块&#xff0c;是物联网的重要技术&#xff0c;今天学长向…

NB-IoT技术实战开发 ----- NB-IoT介绍

一.1------初识NB-IoT 1、NB-IoT介绍2、 物联网技术发展2.1有线物联网2.2 无线网络网 3、为什么需要NB-IOT4、NB-IOT优势5、NB-IOT解决方案亮点和价值5.1 广覆盖5.2 低功耗5.3低成本5.4 大连接 6、NB-IOT的应用1.智能抄表2.智能停车3.宠物跟踪4.else 1、NB-IoT介绍 NB-----Na…

【物联网】LoRa vs NBIoT

LoRa &#xff08;Long Range&#xff09; VS NB-IoT&#xff08;Narrow Band Internet of Things&#xff09; LoRa和NB&#xff0d;IoT是什么 通常物联网设备分为三类&#xff1a; 无需移动性&#xff0c;大数据量&#xff0c;需较宽频段&#xff1b;移动性强&#xff0…

物联网协议之NBIOT

什么是NBIOT 在物联网行业目前常用的网络通信技术主要有以下这些&#xff1a; nbiot属于一种LTE网络&#xff0c;LTE网络是目前主流的通信网络&#xff0c;覆盖完整、技术成熟&#xff0c;未来大量物联网设备都需要在LTE网络中实现通讯功能。Cat.X这个值是用来衡量用户终端设…

浅谈NBIOT

一、什么是NBIOT&#xff1f; 1、概念 窄带物联网&#xff08;Narrow Band Internet of Things, NB-IoT&#xff09;&#xff0c;NB-IoT构建于蜂窝网络&#xff0c;只消耗大约180KHz的带宽&#xff0c;使用License频段&#xff0c;可采取带内、保护带或独立载波等三种部署方式…