58 HBase 平台实践和应用:时序数据库篇

栏目: 数据库 · 发布时间: 5年前

OpenTSDB 是一个分布式、可伸缩的时序数据库,支持高达每秒百万级的写入能力,支持毫秒级精度的数据存储,不需要降精度也可以永久保存数据。其优越的写性能和存储能力,得益于其底层依赖的 HBase HBase 采用 LSM 树结构存储引擎加上分布式的架构,提供了优越的写入能力,底层依赖的完全水平扩展的 HDFS 提供了优越的存储能力

58 OpenTSDB 目前主要用于数据平台监控系统中相关性能指标的存储查询, 58 智能监控系统中回归模型和分类模型原始明细数据存储查询,以及风铃监控预警系统数据的存储查询等。

OpenTSDB 架构:

58 HBase 平台实践和应用:时序数据库篇

OpenTSDB 主要由以下几部分组成:

(1) Collector :负责从服务器上收集并通过 telnet http 协议发送数据给 TSD 实例;

(2) TSD 实例: TSD 是无状态的服务,负责接收 Collector 发送过来的数据,并对外提供数据查询服务,可以部署多个读写实例;

(3) HBase 集群: TSD 收到监控数据后,通过 AsyncHbase 将数据写入到 HBase AsyncHbase 是完全异步、非阻塞、线程安全的 HBase 客户端,使用更少的线程、锁以及内存,可以提供更高的吞吐量,特别对于大量的写操作。

一、数据模型和存储优化

1、 数据模型

OpenTSDB 采用按指标建模的方式,一个 datapoint 包含以下几个部分:

(1) metrics :指标名称,例如 sys.cpu.user

(2) timestamp :秒级或毫秒级的 Unix 时间戳,代表该时间点的具体时间;

(3) tags :一个或多个标签,也就是描述主体的不同的维度。 Tag TagKey TagValue 组成, TagKey 就是维度, TagValue 就是该维度的值;

(4) 、该指标的值,目前只支持数值类型的值。

2、存储优化

OpenTSDB HBase 深度依赖,并且根据 HBase 底层存储结构的特性,做了很多巧妙的优化。

(1) 、缩短 rowkey 的长度。 OpenTSDB 使用一个字典表 tsdb-uid ,将 metrics tag 映射成 3 位整数的 uid ,存储指标数据时按 uid 存储,节省了大量存储空间,同时提高了查询效率。 tsdb-uid 表结构如下图所示:

58 HBase 平台实践和应用:时序数据库篇

(2) 、减少 keyvalue 的数量。 OpenTSDB 实际存储数据的表为 tsdb 表, 对于一小时内相同 metrics tags datapoint ,在 tsdb 表中 OpenTSDB 会合并成一行数据,并且更进一步,将所有列的数据会合并成一列,通过合并数据行和列减少了大量冗余 key 的存储,节省大量存储空间。 tsdb 表结构如下图所示:

58 HBase 平台实践和应用:时序数据库篇

(3) 、并发写优化。为了避免热点问题, OpenTSDB 支持在建数据存储表时,设置分桶, 当某一个 metrics 下数据点很多时,可以将写压力分散到多个桶中,避免了写热点的产生。

二、案例分享

1 、数据平台监控系统

监控系统架构:

58 HBase 平台实践和应用:时序数据库篇 数据平台监控系统监控的相关组件包括: Hadoop HBase Kafka Flume Zookeeper 等。由于 TSD 实例是无状态的,我们部署了多个读写实例,对外通过域名进行数据读写分离,保证服务的高可用。采集的监控数据最终通过 TSD 实例存储到 HBase 集群,并基于 HBase RSGroup 机制进行物理隔离。由于 OpenTSDB 的可视化能力较弱,并且没有报警功能,我们选择了 Grafana 作为监控系统的可视化和报警模块, Grafana 支持多种数据源, OpenTSDB 是支持的其中一个数据源,而且可视化效果非常好。

在我们的实际使用中, TSD 单实例写 QPS 最高到达了 10 + ,存储到 HBase 的监控数据量半年预估达到 10T+ ,而支撑这一能力的后端 HBase 集群只用了 5 个节点,从而可以看出 OpenTSDB 强大的写性能。

Grafana RegionServer 活跃 handler 线程数的可视化截图:

58 HBase 平台实践和应用:时序数据库篇

2 58 智能监控系统

58 智能监控系统架构:

58 HBase 平台实践和应用:时序数据库篇

58 智能监控系统中, OpenTSDB 主要用于存储网络出口和业务的进出流量、集群和域名的访问量、宏观业务数据等的原始数据,并使用回归模型按天预测流量变化趋势,使用分类模型对实时流量做异常检测。

以下是流量预测效果图:

58 HBase 平台实践和应用:时序数据库篇

三、遇到的问题

58 智能监控系统和 风铃监控预警系统 使用 OpenTSDB ,我们遇到了一个相同的问题:

某个 metrics 在同一时间段内写入了大量的 datapoint ,而且 datapoint 属于不同的标签组合,标签基数达到百万级,结果在查询这一时段该 metrics 数据时,响应非常缓慢,甚至将 HBase RegionServer 所有 handler 线程阻塞,导致 TSD 实例最终不可用,严重影响了用户体验,但是发现查询其它时段该 metrics 的数据是没有问题的。

问题分析:

OpenTSDB 数据存储表 tsdb rowkey 结构: metrics+timestamp+tags ,第一个是 metrics ,第二个是时间戳,第三个是 tags tags 可能包含了多个标签名称和标签值,而这些标签之间是没有特定顺序的,比如 tags 可能取值为: {tk3=tv3,tk1=tv1,tk2=tv2,…} ,如下图中 tsdb rowkey 部分。在进行查询时,查询条件包括该 metrics ,查询时间范围包括了有查询问题的时间段,查询标签取值为 {tk2=tv2} ,如下图查询条件部分。在查询的时候由于无法知道数据写入时 rowkey 中标签之间的顺序,导致所有的 OpenTSDB 查询都只能进行前缀查询 +filter ,前缀查询字段包括 metrics timestamp ,而标签匹配只能通过 HBase filter 机制在 RegionServer 内存中进行过滤,如下图红色虚线部分。

58 HBase 平台实践和应用:时序数据库篇

而由于该查询时间段内 metrics 写入了大量标签的数据,标签量基数达到百万级, datapoint 更是达到上亿,根据 metrics+ts 的前缀过滤后,需要在 RegionServer 内存中 filter 的标签数据量达到百万级,进行百万级的数据量 filter 自然会导致查询响应变慢了。

问题解决:

(1) 、建 tsdb 表时设置预分桶存储,提升并发查询性能,但是由于已经在生产环境中,无法重建该表,该方案舍弃。

(2) 、删除多余数据。经过和业务沟通,多余入库的这部分数据暂时不需要统计分析,可以删除。考虑到在线删除数据肯定会对线上业务造成干扰,并且考虑到 Hbase LSM 存储结构特性,最终采取在测试 HBase 集群删除数据然后合并到在线集群的方式解决了该问题。

以下是整个删除数据的操作流程,包括 4 个步骤:

58 HBase 平台实践和应用:时序数据库篇

①、在测试集群创建和在线集群相同表结构(包括分区信息)的 tsdb 表,修改 hbase 集群配置保证不要触发 minor compact major compact 。使用跨集群拷贝工具 distcp 将在线集群 tsdb 表的 hfile 文件拷贝到测试集群,最后将 hfile 通过 bulkload 工具加载到测试 tsdb 表中。

②、在测试环境部署一个 tsdb 实例,并开启 tsd.http.query.allow_delete=true ,允许 tsdb 实例支持查询的同时删除对应记录,最后根据要删除的数据列表,执行查询删除操作。

③、通过 distcp 拷贝测试环境 tsdb 表的 hfile hbase 在线集群,并执行 bulkload 操作导入正式的 tsdb 表。

④、对在线集群 tsdb 表执行 major compact ,删除问题数据,最终查询性能恢复正常。

更多思考:

如果后续还需要对这种删除的数据进行分析,其实我们可以转变思路,数据存储的时候将 tag 变成 metrics 来存储,这样就不用担心查询性能问题了。

四、总结

本文从 OpenTSDB 的整体架构,存储模型,存储优化,在 58 的使用情况和使用过程中遇到的问题等多个方面进行了详细描述。展望未来,我们希望 OpenTSDB 在数据安全,多租户方面得到进一步的优化和完善,这样可以将 OpenTSDB 打造成一个统一的平台,简化现有的部署流程,用户也可以更放心和更容易接入使用。

58HBase平台实践和应用系列文章回顾:

58HBase平台实践和应用—平台建设篇

58HBase平台实践和应用—OLAP篇

最后,58集团数据平台部长期招聘大数据研发工程师。

58数据平台部是58集团唯一的大数据架构部门,负责包括海量数据采集接入,万亿级消息引擎、离线/实时计算引擎,海量存储引擎以及多维分析平台等的建设和优化。支持了58集团大部分的业务线,日接入流量达 200 T ,总存储过百 P ,日 30 的计算,随着大数据应用广泛增长,技术挑战极大。

招聘职位:   

1、存储方向:主要负责 HDFS/Hbase 等相关系统架构研发优化   

2、计算方向:负责 Spark/Flink 等相关架构研发优化   

3、 OLAP 方向:负责 Druid/Kylin/ES 等系统的架构研发优化   

4、消息中间件:负责 Kafka/Flume 等平台的架构研发优化   

5、资源管理:负责 YARN/K8s 等资源管理平台架构研发优化 

招聘要求:

1、熟悉 Java/Scala/C++ (任意一种即可),熟练掌握数据结构算法 

2、对 HDFS/Hbase/Spark/Flink/Druid/Kafka/FLume/YARN 等任一 组件有源 优化经验优先

3、有大规模分布式系统实践经验优先

工作地点:北京市朝阳区酒仙桥北路甲10号院101号楼  

联系方式: yuyi03@58.com

58 HBase 平台实践和应用:时序数据库篇


以上所述就是小编给大家介绍的《58 HBase 平台实践和应用:时序数据库篇》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript权威指南

JavaScript权威指南

弗拉纳根 / 东南大学出版社 / 2007-6 / 99.00元

《JavaScript权威指南(影印版)(第5版)》已经经过全面地修订和扩展,涵盖了构建当今Web2.0应用程序所需的JavaScript技术。《JavaScript权威指南(影印版)(第5版)》不仅是一本实例驱动的程序员指南,同时也是一本可以摆在桌边随时查阅的参考手册,它以全新的章节阐述了有效使用Javascript脚本所需要知道的一切,包括: 脚本化的HTTP和Ajax;XML处理;使用......一起来看看 《JavaScript权威指南》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具