欢迎投稿

今日深度:

基于改造后的REDIS的实时监控架构,改造后redis

基于改造后的REDIS的实时监控架构,改造后redis


  • 摘要

要做到秒级的数据采集,最重要的就是要快,同时在采集数据时,尽可能少的暂用业务进程的资源。同时,我们可以把任何统计指标建模成一个计数器。

这里使用了一种方法,利用REDIS的高性能以及对计数器的支持,能帮助实现秒级监控数据采集。


  • 源码

GITHUB:https://github.com/gilbertwang1981/redis_3.2.5_plus.git


  • 架构

单个Redis实例对计数器的处理能力,能达到每秒10W以上。同时,整体架构支持Redis水平扩展,在客户端对指标做适当的分片。



对REDIS的源代码做了一定的改造,增加了一个自定义的命令,新增的命令格式如下:

PEG counter_name counter_delta


我们也可以使用系统命令INCR(只需要设置Redis的环境变量来切换)。通过在REDIS服务端通过开关控制,复用INCR接口,而不需要重新实现一个新的命令,这样可以复用现有的REDIS client。


比如:

[root@gilbertwang-visam src]# ./redis-cli -h IP

ip:6379> peg umc_counter_0 35

OK

ip:6379> peg umc_counter_1 12

OK


  • 流程


  • 秒级数据采集数据结构

REDIS内部数据结构如下,用于秒级数据统计:



  • Q&A
    • 如何将统计数据从Redis中暴露给应用程序?

开发人员可以通过编写动态链接库,来自定义数据的处理,该库是在Redis运行期间,定时收集收集统计数据的时候,动态加载动态链接库,并且调用用户自定义回调函数,达到和外部系统通信的目的。

    • 如何编写自定义统计处理动态库?

      •  自定义回调函数,创建c文件,ts_plugin.c

int ts_plugin_next(char * counter_name , int second ,
        int counter_value , int eof , int bof) {

        printf("%s %d %d %d %d\n" , counter_name , second , counter_value , eof , bof);

        return 0;

}

      • 编译成动态库

gcc -fPIC -shared ts_plugin.c -o libts_plugin.so

      • 在redis启动脚本中增加环境变量

export TS_PLUGIN_PATH=/root/libts_plugin.so

      • 启动Redis动态加载插件。



  • 性能对比

通过复用REDIS的标准命令INCR,进行性能压测对比,环境相同(虚拟机),一个是原始的INCR命令,一个是改造后的INCR统计命令,1秒钟处理的请求数6W+,性能无损。



www.htsjk.Com true http://www.htsjk.com/redis/36258.html NewsArticle 基于改造后的REDIS的实时监控架构,改造后redis 摘要 要做到秒级的数据采集,最重要的就是要快,同时在采集数据时,尽可能少的暂用业务进程的资源。同时,我们可以把任何统计指标...
相关文章
    暂无相关文章
评论暂时关闭