写点什么

探索与发现,揭秘百度万亿时序数据存储架构

  • 2019-09-09
  • 本文字数:2231 字

    阅读完需:约 7 分钟

探索与发现,揭秘百度万亿时序数据存储架构

万亿架构设计

在百度监控系统 TSDB 的常态工作负载下,单机每秒处理 20 多万数据点,集群每秒处理数万次查询,每天有几万亿的数据点在 TSDB 中穿梭,这样强悍的性能除了得益于 HBase 本身的性能优势外,架构层面的针对性设计同样功不可没。


面对已是万亿级别却仍持续增长的数据规模,我们设计了读/写分离且无状态的“弹性”架构;为了在高负载下仍保证低延迟的写入和查询,我们将数据进行分层,分别存入 Redis、HBase 和 Hadoop;为了不间断地为业务提供可靠的服务,我们设计了具备分钟级自愈能力的异地冗余架构;为了节约存储成本,我们引入并改进了 Facebook 的时序数据压缩算法。


TSDB 的整体架构如图 1 所示。



图 1 TSDB 整体架构

可扩展

我们希望通过简单地增加节点就使系统的处理能力线性提升,如果节点之间完全对等、互不影响,那么对整个集群而言,增加节点没有额外的资源消耗,就可以使处理能力随着节点数线性增长。


根据时序数据写多读少的特点,我们将读、写操作分离,设计了无状态的查询模块 Query-engine 和写模块 Saver,使得 Query-engine 或 Saver 的每个实例完全对等,并在上游应用轮询或者一致性哈希进行负载均衡。


实例的部署是基于百度内部的容器方案 Matrix,一则可以合理地分配资源,二则由于写入和查询隔离开来、互不干扰,其各自的性能均得到充分发挥。基于 Matrix 的虚拟化方案也使 TSDB 能够在分钟级完成任意数量的实例扩容。

高性能

在上一篇文章中介绍的“水平分表”的策略(图 2)中,存在 HBase 里的数据被按时间划分到了不同的 Slice,老的 Slice 访问压力相对较小,减轻了系统处理这部分数据的负载,然而最新的一个 Slice 仍然会保持很高的热度,相对集中的负载仍然给 HBase 集群带来不小的压力。因此,我们利用内存缓存了部分热点数据(查询量相对更多的数据),以空间换取更低的查询响应时间,同时分流 HBase 的查询压力。



图 2 按时间水平分表


缓存能力由百度运维部 DBA 团队的 BDRP 平台提供。但由于数据量太大,缓存一小时的数据需要较多的内存资源,我们在性能和成本之间做了权衡,选择只将核心指标数据写入缓存。


在大批量查询历史数据的场景中,查询的频率不高,对数据时效性的要求也较低,其目标数据通常是冷数据,因此我们把这部分数据从 Saver 的流量中复制出来,定期地灌入独立的 Hadoop 集群,将此类查询压力从 HBase 分流出去。


经过 Hadoop 和 Redis 的查询分流,HBase 仍然存储全量的数据,但其只承接常规的趋势图查询请求以及从缓存穿透的请求。

低成本

为了降低数据的存储成本,我们引入了 Facebook 在论文《Gorilla: A Fast, Scalable, In-Memory Time Series Database》中介绍的一种时序数据压缩算法(见图 3),它能够达到 10 倍的压缩比,我们将其进行改造后应用到了缓存中。



图 3 Facebook Gorilla 中的压缩算法示意图


Gorilla 中的压缩算法较容易理解,其核心思想是增量压缩,不仅针对数据点取值进行压缩,且对时间戳应用了一种 Delta-of-Delta 压缩方法。经过压缩的数据点,其存储空间占用可以“bit”计,算法对于周期稳定、取值变化幅度较小的数据的压缩效果尤其好。


然而,这种增量压缩的算法中,后一个数据点的压缩结果依赖前一个数据点的压缩结果,这要求在集群中为每个时间序列维护压缩的状态,论文未对其分布式实现做详细的介绍,我们将数据压缩成 Byte 流,以 Key-Value 的方式存储在 Redis 中。此外,论文中的算法仅支持浮点型数值,而我们改造后的算法还支持整数型和统计型数值(即上文提到的 StatisticsValue,每一个具有 max、min、sum、count 四个统计值)。


数据压缩的整体方案在实际使用中为我们节省了 80% 的存储空间,额外的 CPU 消耗不超过 10%。

高可用

冗余是高可用的一大法宝,我们使用了简单有效的异地互备的方案,即冗余出一整套集群和数据来实现高可用。写入时,客户端将数据双写到两个集群,查询时通过动态路由表或百度名字服务(Baidu Naming Service, BNS)访问到其中一个集群(图 4),在此基础上我们具备故障自愈机制,可以实现分钟级的单机房故障自愈。



图 4 异地互备

总结

近年来,TSDB 在智慧城市、物联网和车联网等等领域都有着十分广泛的应用,更是成为监控场景的标配基础服务。在《百度大规模时序数据存储》系列的四篇文章中,我们为读者介绍了大规模 TSDB 从模型到功能再到架构的设计实践,但从实际的需求出发,我们认为 TSDB 的架构设计思路和功能侧重点并不局限于文中所述。


技术上,在大规模的时序数据存储系统中,我们选择了 HBase 作为底层存储,但并不代表 HBase 在任何场景下都是最合适的选择。在应用上,TSDB 也会与分布式计算、数据挖掘、异常检测甚至 AI 技术进行深度结合,将会面临更加复杂和富有挑战的场景。


我们设想将 TSDB 抽象成各种功能组件,能够根据不同场景的特点,灵活地搭配各个功能组件,以满足不同的需求。例如在数据量级较小的时候可以基于 MySQL 进行单机存储;或者作为缓存层直接基于内存存储;或者利用 Elasticsearch 的强大检索能力做多维度聚合分析等等。


目前我们已经进行了一些组件化的工作,并在这些工作的基础上实现了对 Cassandra 的支持,后续还将丰富框架和组件,引入新的功能,并逐步实现对 Elasticsearch、MySQL 等存储系统的支持。


作者介绍:


运小尧,百度高级研发工程师,负责百度运维大数据存储平台的设计和研发,致力于追求大规模存储系统的高性能和高可用。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/VM6tH06e-sA55DWQjeKEOA


2019-09-09 23:031401

评论 1 条评论

发布
用户头像
redis作为时序时间库的缓存,用的是RedisTimeSeries 吗?用于支持时间范围查找
2021-09-24 13:48
回复
没有更多了
发现更多内容

IDC&用友联合发布《建设数字中国升级数智底座-企业数智化底座白皮书》

用友BIP

白皮书 数智底座

什么是低代码开发,为什么要使用低代码,选择低代码要注意什么?

优秀

低代码 低代码开发

制造企业的高质量增长,藏在供应链的“精打细算”之中

工赋开发者社区

人工智能促进知识的公平获取

澳鹏Appen

人工智能 翻译 nlp 数据标注 小语种

直播预告 | 博睿学院:深入解析nacos基础原理

博睿数据

云原生 nacos 智能运维 博睿数据 博睿学院

接口测试|Fiddler设置过滤

霍格沃兹测试开发学社

接口测试|Postman发送带参数的Get请求

霍格沃兹测试开发学社

接口测试|Postman设置断言

霍格沃兹测试开发学社

和鲸 × 于峻川丨以遥感领域为例,浅谈 AI for Science 科研范式改革

ModelWhale

人工智能 算力 遥感 AI for Science 协同科研

软件测试/测试开发丨Python自动化测试学习笔记

测试人

Python 程序员 软件测试 自动化测试

为什么说 ICMP 协议是网络最强辅助?

互联网工科生

ICMP

接口测试|Fiddler设置断点

霍格沃兹测试开发学社

提高API开发效率:详解OpenAPI接口规范最佳实践

Apifox

程序员 接口 API OpenAPI

App自动化测试|adb版本过低的报错提示

霍格沃兹测试开发学社

接口测试|Postman持久化保存

霍格沃兹测试开发学社

基于Surprise协同过滤实现短视频推荐

北桥苏

推荐系统 协同过滤 Surprise

支持目标打卡,活力三环让运动更有趣

HarmonyOS SDK

大型企业数智化的中国力量:用友BIP助力国产替代

用友BIP

国产替代

用友BIP全球司库连续中标三大银行总行合作项目,共同推动企业数智转型

用友BIP

银行 全球司库

CSS样式中颜色与颜色值的应用

高端章鱼哥

CSS 代码 HEX rgb

ChatGPT+低代码,好用到飞起?

树上有只程序猿

企业进行大数据分析时,需要关注哪些能力来选择合适的解决方案呢

巷子

生成式AI加入低代码,或将再次颠覆开发行业

树上有只程序猿

接口测试|postman发送POST请求

霍格沃兹测试开发学社

Electron末日来了?又一应用将其抛弃!WhatsApp强制推行原生应用:速度更快、内存占用更少

工赋开发者社区

接口测试|postman模拟请求头&界面的响应信息

霍格沃兹测试开发学社

企业全面预算管理的四大“拦路虎”

用友BIP

全面预算

最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

洛神灬殇

Java Linux 性能优化 JVM GC

技术领先、结合AI,数智平台成为企业数字化转型的基石

用友BIP

数智平台

接口测试|Charles的界面介绍

霍格沃兹测试开发学社

接口测试|postman的介绍和安装

霍格沃兹测试开发学社

探索与发现,揭秘百度万亿时序数据存储架构_文化 & 方法_运小尧_InfoQ精选文章