DBdb

RedisTimeSeries实时时序数据库预研

2022-03-01  本文已影响0人  淡淡的小番茄

背景

时序数据库开源实现有比较多的选择,比如:InfluxDB、OpenTSDB等。我们项目中没有使用这些时序数据库,我们基于ClickHouse来实现时序数据的分析及洞察。目前遇到的比较棘手的问题就是,时序数据的入库实时性无法保证,一般来说会有2-5秒的延迟。这也是由ClickHouse的架构决定的,其不支持频繁的写入,其底层的存储结构类似LSM树的机制,都是采用批量顺序写的方式来实现高吞吐的特性。很多业务场景,这样的延迟是不被允许的。比如:工业场景,设备反控制之类的需求对实时性要求非常高。

为何选择RedisTimeSeries

RedisTimeSeries是由 Redis Labs 开发的 Redis 模块,用于增强使用 Redis 管理时间序列数据的体验。我们选择RedisTimeSeries作为实时数据库主要有如下两点的考虑:

1、RedisTimeSeries是基于Redis实现的。Redis是非常成熟稳定的NOSQL数据库,它具有丰富的数据结构、超高的读写TPS、稳定的持久化机制、集群模式支持横向扩展等特性。

2、目前实时数据库开源没有更好的选择。像PI这些商业软件是非常昂贵的。国内也有很多基于内存来实现实时数据库的,也都是收费的。

RedisTimeSeries的安装

github地址如下:https://github.com/RedisTimeSeries/RedisTimeSeries

我采用的源码安装的方式,按照官方的文档执行如下的命令:

git clone --branch v1.6.8 --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git

cd RedisTimeSeries

make setup

RedisTimeSeries依赖的github工程比较多,如果你没有使用VPN,上面的方式是安装不成功的。为了能正常的编译通过,你需要使用VPN并配置好你的github代理,可执行如下的命令设置代理。

git config --global https.proxy http://yourhost:yourport

git config --global https.proxy https://yourhost:yourport

我们操作系统版本为centos7.4,安装完成后,会在binlinux-x64-release下生成redistimeseries.so文件。

然后在安装好的redis中加载这个模块,我是通过配置redis.confg来实现的,如下:

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules

# it will abort. It is possible to use multiple loadmodule directives.

#

loadmodule /data/rts/redis-6.2.6/redistimeseries.so DUPLICATE_POLICY LAST

可以通过module list查看Redistimeseries模块是否已经安装成功:

127.0.0.1:6379> module list

1) 1) "name"

  2) "timeseries"

  3) "ver"

  4) (integer) 10608

这样Redistimeseries模块就安装完成了。支持的功能基本能覆盖我们日常的业务需求:

1、查询最新的测点

TS.GET  key

2、查询最新的N个测点

TS.RANGE key fromTimestamp toTimestamp

3、对时间范围指标进行聚合

支持的常用的聚合函数,包括: avg、sum、min、max、range、count、first、last等。

性能压测

性能压测可以分为两部分,第一部分写入,第二部分读。可以采用RedisTimeseries官方提供的压测工具redistimeseries-ooo-benchmark。这个工具的功能还是比较多的,支持乱序数据场景的测试。压测命令参考:

#1000万测点,100线程,一个批次10000测点,乱序率0

./redistimeseries-ooo-benchmark --host "xxx:6379" --debug-level 0 --pipeline 10000 --ts-maximum 100 --compressed=false --ooo-percentage=0 -samples-per-ts 100000

对于读场景,可以直接使用Redis的压测工具:redis-benchmark

#1000万测点,100线程,获取最新10个 测点

./src/redis-benchmark -h xxx -p 6379 -c 100 -n 1000000 -P 10 TS.RANGE temperature:2:32 1645682470062 1645682470071

我们测试的时候,直接部署的Redis单机版本,机器配置:8C16G。性能测试结果如下:

总体性能还是可以的,完全满足目前的业务需求。

上一篇下一篇

猜你喜欢

热点阅读