bvar是brpc的几个组件之一,bvar模块相对独立,可以单独编译和应用。
Bvar 有两个基本成员,名字和统计值(key和value)。Bvar使用thread local存储,这使得写没有竞争,读的时候进行合并多个线程的数据,需要同步竞争保证。
bvar大体分为这几个组成要素:
这些类的基类是Variable,他主要提供全局key map注册自定义的bvar,并且加入了列举,查询等功能。
varibale的expose方法注册自己到全局VarMap,同时设置key。我们可以方便的通过Brpc提供的一个服务器dump进程遍历查看VarMap。expose的使用方法如下:
bvar::LatencyRecorder _latency_recorder;
bvar::Adder<int64_t> _error_count;
_latency_recorder.expose("rpc_press");
_error_count.expose("rpc_press_error_count");
另外bvar提供了另一种构造方法。这种构造方法默认进行了expose注册操作。
比如这种,就不需要在显式调用c->expose
bvar::Adder<int> c("demo");
bvar还提供一个方便的类叫Window。想象以下场景
Adder是累加的,任何时候拿到的是累計值。如果需要统计一段时间內的数据,这个就需要windows的帮助。还有如果需要计算Variabl每秒的平均值,那么就需要使用bvar::PerSecond<>。写法如下:
bvar::Adder<int> demo("demo");
bvar::Window<bvar::Adder<int>> demo_window("adderWindow", &demo, 3);
bvar::PerSecond<bvar::Adder<int>> demo_persecond("adderPersecond", &demo, 1);
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。