NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

网易大数据体系之时序数据技术

  • 2019-05-13
  • 本文字数:2977 字

    阅读完需:约 10 分钟

网易大数据体系之时序数据技术

本次分享内容


  • 时序数据平台主要业务场景

  • 时序数据平台体系架构

  • 时序数据平台核心技术

PART01 时序数据平台主要业务场景


上图为数据的整体架构,大部分公司都是差不多的:


  • 原始数据:MySQL、服务端的 Log、APP-Data、Sensor,大家知道现在穿戴设备很多,比如手表等,这样都会产生很多数据,这些数据都称为时序数据,随着时间的变化不断产生数据。

  • 数据采集层:sqoop、DataStream、SDK、Gataway

  • 数据加工层:数据存在 kafka 里,再经过一些流计算处理(Flink、Sparkstreaming)

  • 数据存储分析层

  • 离线存储分析平台:技术栈包括最底层的 HDFS、Kudu、GP 等数据存储,在这之上要做很多的计算,包括 Hive、Spark、Impala 等,他的应用场景包括数仓报表、机器学习、模型训练等;

  • 在线存储计算平台:应用的业务场景包括,交易订单,优惠券,用户画像等,这里主要应用的是 HBase;

  • 时间序列存储计算平台:应用场景包括,业务设备监控,实时广告平台,物联网应用,相关的技术包括 OpenTSDB、Druid、InfluxDB 等。


所以会根据不同的业务使用不同的平台来处理相关的数据,对于我们来说最大的工作是在数据存储端。



时序数据主要包括时间列、维度列和指标列,这 3 列缺一不可(特别是时间列)。


工业互联网时代,会源源不断产生各种各样的时序数据,时序数据平台有以下几种典型场景


  1. 系统监控

  2. 物理机、云主机、容器:CPU、内存、IO 等

  3. 组件服务:数据库集群、Kafka 集群、HBase 集群

  4. 任务监控

  5. 查看指定 hadoop 任务耗用内存、CPU、IO 利用率等

  6. 查看集群消耗资源 TopN 任务、节点等

  7. 统计集群任务执行耗时

  8. 应用性能监控

  9. 应用调用次数,错误占比,页面加载延迟统计、地域统计分析

  10. 慢加载追踪,慢 SQL

  11. 异常会话追踪

  12. 链路监控

  13. 调用链全息排查

  14. 全局调用拓扑

  15. 链路依赖项分析梳理

  16. 业务监控统计

  17. a. 电商

  18. 业务大盘:查看单量,金额,发货等业务指标

  19. 异常大盘:查看超卖,库存校准耗时,商品回调耗时,各种类型下单错误等异常指标

  20. b. 广告

  21. 广告曝光点击消耗实时统计

  22. 流量地域分配


以基础系统监控服务为例,举例描述两个应用场景


  1. 物理机基础硬件指标监控



  1. HBase-RegionServe 指标监控



直观地看,以上数据的横坐标都是时间戳,即设备随着时间不断吐数据。


时序数据应用场景的核心特征:


  1. 时间区间查询,最近时间区的数据的查询频率远大于历史数据

  2. 多维条件查询,即多维字段随机组合查询



  1. 支持 TTL 机制,数据可以自动过期

  2. 支持高压缩率,数据压缩比要达到 10 以上

  3. 支持高效聚合

  4. 支持集群可扩展,服务高可用,数据高可靠

PART02 时序数据平台架构体系

时序序列平台以监控类系统体系架构为例,如下图所示:



将多数据来源的数据(如 Agent 采集器,打点日志、流式数据,IoT Hub 等),通过 Kalfa 工具(分布式消息队列系统)进行流式处理,汇集到网易时序数据平台上。

PART03 时序数据平台核心技术

在上述架构体系中,数据库作为其核心环节。考虑到 DDB(分布式 MySQL)实时写入性能不足,HBase/ES 等开源 NoSQL 平台多维查询以及聚合计算等功能不够;针对海量时序数据这类应用场景,因此需要专门的时序数据库。


现有市场上较成熟的时序数据库主要包括 Druid、OpenTSDB、InfluxDB 等。网易结合以上各类时序数据库的优缺点,自主研发分布式时序数据库平台,支持高性能写入和读取,支持多维条件查询,支持聚合计算,且运行开销较小,可私有化、分布式部署。



该时序数据库的分布式集群结构与 hadoop,Hbase,Kudu 等架构非常相似:多台服务器用来存储数据,并通过 Raft 保证数据的一致性。数据的分布式计算是在分布式节点(node)上完成的,每个 node 上的数据存储计算系统称之为 shard server。在 Shard Server 的底层数据存储中,原始数据存一份,再按照索引的方式再存一份。



网易时序数据平台的数据存储方式是这样的


  1. DataBase 中建立若干 StorePolicy(类似 MySQL 数据库中的表结构),其作用为:


(1) 指定数据过期时间;


(2) 指定数据副本数量;


(3) 指定分片时间间隔。


  1. 每个 StorePolicy 中,按照指定的时间间隔建立若干 ShardGroup。将最新写入的数据(称之为热数据)存到对应的 ShardGroup 中,再通过哈希分片的方式将该 ShardGroup 分片成若干个 Shard,这些 Shard 会分布至整个集群。



以上图为例,同一时间段不同 shard 分布到不同的节点上。例如:左侧大方框中包含的 6 条记录,代表该时间段的记录分布在 6 个 shard 里;右侧小方框中的 5 和 6,代表该 shard 共有 2 个副本,分别分布在集群中的 5 号节点和 6 号节点。


由此可以看出,同一时间段的多个 shard 是分布在多个节点上。这样做的好处是:查找指定时间段的数据时,只需要在相应节点中查到对应的 shard 里的数据即可,避免了全局遍历的情况。


3. 数据在 shard 中的存储方式:


(1) 时间线列式存储


具体来说,SeriesKey 相当于原始数据(DataSource),具有不同维度;存储的时候,所有的时间存到一起,所有的 value 单独存在一起,这种存储方法叫做列式存储。列式存储有两大好处:


  • 每一列数据类型相同,因此压缩率非常高;

  • 方便对列做聚合计算。



什么是列式存储


传统的关系型数据库如 Oracle、MySQL、SQL SERVER 等,都采用的是行式存储法(Row-based),在基于行式存储的数据库中,数据是按照行数据为基础逻辑存储单元进行存储的,每行中的数据在存储介质中以连续存储形式存在。


不同于行式存储,列式存储以列为基础单元,每列的数据在存储介质中以连续存储的形式存在。


针对海量分布式数据背景的 OLAP(on-line analysis processing),列式存储可在内存中高效组装各列数据并形成关系集,可避免全表扫描,显著减少 IO 消耗。


(2) 倒排索引


支持 sql 语句进行条件筛选;在条件筛选的过程中,使用倒排索引方法,实现快速定位,可“直达用户需求”。


  • 正排索引:key-value 中,通过 key 去寻找 value;

  • 倒排索引:通过 value(或包含 value)去寻找对应的 key。


正排索引需要首先对全局进行扫描遍历,进而从中做筛选;而倒排索引可以仅抽取符合条件的 value 值,节省大量的资源。


(3) shard 自动扩容


数据库作为分布式系统,需要考虑系统的扩容(即增加节点)。


增加节点后,为保证数据存储的均衡,将不再更新的数据(即历史数据)作为 cold shard,平均分布到集群的所有节点(包括新增加的节点)中,而实时更新的数据(即 hot shard,随时间不断写入)不做任何处理。


(4) 多级存储优化


考虑到时序数据的一个特点:热数据查询概率远大于冷数据。针对这一特性,做了如下两个优化:


A. 考虑到数据文件可能存在多级索引,针对冷数据,只加载一级索引即 root 索引;针对热数据,会加载所有索引。


B. 因此针对集群服务器配置方面,每个集群 12 块盘,只需要 1 块 ssd 用来存储 hot shard 即可,其余均使用普通 hhd 即可,最大程度降低硬件成本。


  • cluster 是整个集群,包含 n 个 node;

  • node 通常掌控独立的资源,包括 cpu 等;一台机器可以多个 node。

  • shard 一般是从数据角度来说。例如,1000 条数据按 id 分,存 10 份,就是 10 个 shard。

  • shards 分散在多个 node 上。


最后通过以上手段,来实现刚刚所说的时序数据应用场景的核心特征:时间区间查询,多维条件查询,支持 TTL 机制,支持高压缩率,支持高效聚合,支持集群可扩展,服务高可用,数据高可靠

作者介绍:


范欣欣,网易大数据技术专家,专注于 HBase、TSDB 等大数据系统的开发运维,主导网易工业互联网平台建设。


本文来自 范欣欣 在 DataFun 社区的演讲,由 DataFun 编辑整理。


2019-05-13 08:007819

评论 1 条评论

发布
用户头像
想问一下,架构中的实时计算平台主要是做什么使用?在你们的场景中,有没有多个metric需要计算的这种要需求,虽然时序数据能满足很多的查询请求,但是有一些比较复杂的查询你们是怎么做的?
2019-05-13 16:32
回复
没有更多了
发现更多内容

分布式系统中的CAP、ACID、BASE概念

编程 分布式

Flink处理函数-6-4

小知识点

scala 大数据 flink

架构师训练营第四周作业

Shunyi

极客大学架构师训练营

ARTS Week13

丽子

架构师训练营第一周总结

薛凯

LeetCode题解:22. 括号生成,递归先生成再过滤,JavaScript,详细注释

Lee Chen

大前端 LeetCode

SpringBoot整合Jpa项目(含Jpa 原生sql语句介绍)

小Q

Java 架构 微服务 springboot jpa

[周末荐片]Undercover Billionaire

亚伦碎语

生活

来点不一样的: 精选200个Java技术面试真题,详解应聘Java程序员常见考点,在Github上标星89.6K

996小迁

编程 程序员 架构 面试

十三、深入Python字典和集合

刘润森

Python

第四周学习代码系统架构总结

三板斧

spring-boot-route(十七)使用aop记录操作日志

Java旅途

Spring Boot aop

第四周作业

icydolphin

极客大学架构师训练营

架构师训练营第四周课后练习

薛凯

架构师训练营第四周总结

薛凯

COSCon'20 & Apache Roadshow 来了,数据技术专场欢迎您

代立冬

如何设计一个牛逼的API接口

Java旅途

Spring Boot API

架构师训练营第三周课后练习

薛凯

京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?

京东科技开发者

区块链 供应链

5张表的sql整懵阿里p7:你们能看明白自己写的啥吗?

小Q

MySQL 数据库 学习 调优 mycat

从格力直播看品牌商的渠道变革

boshi

数字化转型 品牌 直播带货 优化业务

架构师训练营第三周总结

薛凯

2020.10.05-2020.10.11 学习总结

icydolphin

极客大学架构师训练营

第四周 系统架构作业

蓝黑

极客大学架构师训练营

Java 中的反射是什么

Rayjun

Java 反射

阿里云服务器搭建

时间是一个人最好的证明

阿里云 服务器 域名

Go 语言内存管理三部曲(二)解密栈内存管理

网管

堆栈 内存管理 内存布局 Go 语言

轻量级业务中台开发框架,以DDD思想为基础,融合中台核心要素,赋能中台建设

高鹏

中台 业务中台 DDD 框架 中台架构

学习笔记丨数据结构与算法之贪心算法

Liuchengz.

贪心算法

有符号类型引发的奇怪现象

jiangling500

架构师训练营第一周课后练习

薛凯

网易大数据体系之时序数据技术_数据库_DataFunTalk_InfoQ精选文章