基于改造后的REDIS的实时监控架构
来源:互联网 发布:怎么样做淘宝模板 编辑:程序博客网 时间:2024/05/14 04:37
- 摘要
要做到秒级的数据采集,最重要的就是要快,同时在采集数据时,尽可能少的暂用业务进程的资源。同时,我们可以把任何统计指标建模成一个计数器。
这里使用了一种方法,利用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+,性能无损。
- 基于改造后的REDIS的实时监控架构
- 基于HyperPacer的websocket实时监控
- 基于RabbitMQ实现的实时日志监控
- 基于微服务架构的门户平台改造的研究
- 基于motion的视频压缩的实时监控系统
- js 实时监控数值加减后的运算
- 基于Web的B/S结构实时监控系统
- 基于实时定位技术的分布式照明监控系统
- 基于DCT系数的实时监控中运动目标检测
- 基于mini2440的WEB远程视频实时监控系统
- 基于Storm的Nginx log实时监控系统
- 基于Storm的Nginx log实时监控系统
- 基于W5500的实时远程温湿度监控系统
- 基于Storm的Nginx log实时监控系统
- 基于Storm的Nginx log实时监控系统
- 基于python实时监控cpu的小工具
- 基于视频压缩的实时监控系统-A1:产品设计与规划
- 基于视频压缩的实时监控系统-A0:目录
- emit和plain
- golang 类型检测方法
- XStream对所有xml节点转换时增加CDATA标记
- storm写入es失败问题
- nginx 后端服务器配置端口 request.getserverPort
- 基于改造后的REDIS的实时监控架构
- Hibernate学习入门教程1
- Yii2开发指南
- Java的锁
- 生成uImage
- Android6.0 打开自启动管理页面(华为、小米)
- Android Studio使用Lint进行代码检查
- 如何在保证当前Actiivty不被Finish的情况下返回上级界面
- 安卓开发中的安全要点(安卓官方Security Tips)