249建站之家:腾讯开源高性能通用频率控制组件 libwxfreq

libwxfreq 是腾讯 2018 年开源的首个项目,这是一个采用多级 hash 作为底层存储模型的高性能通用频率控制组件。


授权协议:BSD

开发语言:C/C++

操作系统:跨平台

开发厂商:腾讯


通过简洁的几个接口,既可以单机使用,也可以配合其他网络框架,轻松搭建一个通用的频率控制服务。


组件特性


libwxfreq 具有以下特性:


高度可配置:统计维度可配置、统计时长可配置、频率规则可配置

支持任意 key 类型

底层存储模型无锁化设计


配置文件


格式


appid的元信息,指明apppid的统计时长。默认第一个统计时长是60s,第二个统计时

时长是3600s, 第三个是86400s。可以手动修改任何一个统计时长为[0, 86400]


[appid]


5 = 30, 60, 90 // appid为5的统计时长分别是30s 60s 90s

25 = 10, 60 // appid为25的统计时长分别是10s 60s 86400s


频率规则, 用于说明某个appid的阈值, 拦截等级等

[match_rule_name] // 规则名字,用户指明中了哪条规则

match_appid = 5 // 匹配的appid

block_level = 1 // 拦截等级, 大于0

rule_type = user // 规则对应的key类型

item = min_interval >= 4 // 具体的阈值表达式, 支持大于和等于




安装


修改makefile文件中的HEADERINSTALLDIR和LIBINSTALLDIR变量

make install


单元测试


以测试文件为目标make. 例如: make demo


API 接口


设置规则配置文件


void SetRuleConfFile(const char *filename);


注册一个新的统计维度。type_name 指明类型名称, zero_init标志初始化时是否需要 初始化为0, key 是共享内存key,item_cnt 表示共享内存大小,最大能统计的item个 数。


int RegisterNewShmStat(const char* type_name, bool zero_init, key_t key, unsigned int item_cnt);


系统初始化:


bool InitFreq();


上报一次频率到系统中。type_name 是统计类型,说明key的含义。 key是主体标识, appid 是业务标识, cnt 表示本次需要累加的次数。


推荐

  • QQ空间

  • 新浪微博

  • 人人网

  • 豆瓣

取消