HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

  • 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:007946

评论 1 条评论

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

在线JSON转HTML工具

入门小站

工具

实用机器学习笔记二十九:NLP 中的微调

打工人!

机器学习 学习笔记 nlp 机器学习算法 3月月更

Top Trending Libraries of 2021,PaddleOCR再开源8大前沿顶会论文模型!

百度大脑

开学季 | 飞桨AI Studio课程学习,小白也可以成为一名优秀的算法工程师

百度大脑

Java 中的静态字段和静态方法

踏雪痕

Java 3月程序媛福利 3月月更

《软件开发的201个原则》思考:3.开发效率和质量密不可分

非晓为骁

程序员 个人成长 软件工程 软件开发原则 开发质量

重新开始学习测试驱动开发

escray

学习笔记 测试驱动开发

人工智能1秒检测一辆车,TA助力广本新车质量排名第一

百度大脑

架构实战营模块九-毕业设计-电商秒杀系统

Jude

架构实战营

CorelDRAW2022下载及新增功能讲解

茶色酒

cdr2022

又一重量级国赛来啦,保研可加分 | 中国软件杯飞桨遥感赛道正式启动

百度大脑

06 - vulhub - Apache HTTPD 多后缀解析漏洞,2021年Python大厂面试分享

程序媛可鸥

Python 程序员 面试

2022美赛单变量深度学习LSTM 时间序列分析预测,作为Python开发者

程序媛可鸥

Python 程序员 面试

Linux之alias命令

入门小站

Linux

"三高"Mysql - Mysql的基础结构了解

懒时小窝

MySQL 数据库

软件入门之《编程指南》-学习路径和经验随谈

hongfei

个人成长 编程好习惯 经验总结

Axios 教程:Vue + Axios 安装及实战 - 手把手教你搭建加密币实时价格看板

蒋川

Vue Node axios

17个新手常见错误,送给初学Python的你!,憋个大招

程序媛可鸥

Python 程序员 面试

区块链正在塑造医疗保健生态系统!

CECBC

在线CSS3压缩美化格式化

入门小站

工具

golang里的一些奇奇怪怪的东西

不登山的小鲁

golang Go 语言

Redis集群架构剖析(2):槽位

非晓为骁

redis集群 slots 分布式,

28,2021最新Python面试笔试题目分享

程序媛可鸥

Python 程序员 面试

10个Python set 常用操作函数!,oppoPython面试题

程序媛可鸥

Python 程序员 面试

北京大学董豪老师解密人工智能开发工具的过去与未来

OpenI启智社区

人工智能 开发工具 启智社区 北京大学

Flutter 开发一个常用的登录界面

岛上码农

ios 移动端开发 3月月更 flutter开发 安卓开发

调查:区块链游戏玩家将玩NFT游戏视为一份潜在的全职工作

CECBC

全球央行积极推进CBDC 俄罗斯制裁或成催化剂?

CECBC

#yyds内容盘点# 一文带你搞懂Python中变量与常量,Python开发框架

程序媛可鸥

Python 程序员 面试

深度关注 | 元宇宙如何改写人类社会生活

CECBC

架构实战营 毕业设计项目

樰巳-堕~Horry

架构实战营 「架构实战营」

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