Facebook开源时间序列内存数据库Beringei,追求极致压缩率——如果是int根据大多数时间序列中的值与相邻数据点相比并没有显著的变化,只要使用XOR将当前值与先前值进行比较,然后存储发生变化的比特。最终,该算法将整个数据集至少压缩了90%

简介:

转自:http://www.infoq.com/cn/news/2017/02/Facebook-Beringei

2017年2月3日,Facebook宣布将开源他们的高性能时序数据存储引擎Beringer。Beringei是用来解决其内部监控数据存储和查询需求的数据库,其特点是读写速度快,属于内存数据库的一种。本文将会详细介绍Beringei的来龙去脉以及它的设计思路、应用场景和特点。

Beringei的诞生背景

运维大规模的分布式服务,通常需要对内部系统的运行状况和性能指标进行实时并精确的监控,以便在第一时间发现、诊断、处理出现的问题。

Facebook使用时间序列数据库(TSDB)跟踪和存储系统度量指标,比如说产品的统计信息(每分钟发送多少消息)、服务的统计信息(命中缓存层与MySQL层的查询速率),以及系统的统计信息(CPU、内存和网络的使用情况)等等,基于这些数据运维人员就可以看到基础设施上的实时负载情况,并指定策略决定如何分配资源。

Facebook的每个系统、服务每秒需要向存储引擎写入成百上千个数据指标,而负责进行数据分析的工程师可以实时查询这些数据。

2013年初,随着公司和系统的不断发展,Facebook的存储引擎监控团队发现HBase使用的TSDB无法灵活扩展,导致未来可能无法处理高并发的读取负载。如果是分析少量数据,平均读取延迟可以接受,但是试图实时处理大量数据的需求无法满足,用户体验很差。大批量数据查询时间可能需要数秒钟,这对于可能需要发出数百个或数千个查询来执行分析的自动化工具来说是不可接受的。几千个时间序列的查询请求要花几十秒的时间来执行,针对稀疏数据集执行的查询可能会超时,这是因为HBase数据存储经过调整后,策略改为优先处理写入操作。

由于查询性能太差,监控系统无法实时处理大规模分析。Facebook团队在评估和否决了几款基于磁盘的解决方案和现有的内存缓存解决方案后,存储引擎开发团队将注意力转移到自行编写内存TSDB方案,以支持Facebook的运行状况和性能监控系统。团队在VLDB2015大会上发表了一篇名为《Gorilla:一种快速、可扩展的内存时间序列数据库》的文章,Beringei正是基于这项工作成果的进一步发展。

Beringei的设计思路

Beringei基于BSD协议,它不同于其他的内存系统(比如Memcached),Beringei通过优化,支持存储专门用于运行状况和性能监控的时间序列数据。设计Beringei的初衷是为了更高的写入速率和更低的读取延迟,同时尽可能高效地使用内存来存储时间序列数据。Facebook团队创建了一种系统,该系统可以存储最近24小时内在Facebook生成的所有性能和监控数据,以便Facebook在生产环境中遇到问题后,可以极快地探究并调试系统和服务。

数据压缩对于帮助降低存储开销必不可少。Facebook考虑了现有的压缩方案,仅适用于整数数据的方法、使用近似技术的方法,以及需要对整个数据集进行操作的方法都被Facebook否决了。

Beringei使用一种无损耗数据流压缩算法,压缩时间序列里面的数据点,不进行跨时间序列的额外压缩。每个数据点是一对64位值,表示当时计数器的时间戳和值。时间戳和值使用前一个值的信息单独压缩。时间戳压缩使用delta-of-dalta编码方式,通过采用规则的时间序列在较少的内存内存储时间戳。

Facebook团队分析了存储的性能监控系统中的数据后发现,大多数时间序列中的值与相邻数据点相比并没有显著的变化。此外,许多数据源只存储整数(尽管系统支持浮点值)。

知道这一点后,只要使用XOR将当前值与先前值进行比较,然后存储发生变化的比特。最终,该算法将整个数据集至少压缩了90%。

使用场景及特点

Facebook团队预计Beringei主要有两种使用场合:

  1. 创建一个简单的共享服务和客户端,后者可以存储和处理时间序列查询请求。

  2. Beringei可以用作一个嵌入库,处理高效存储时间序列数据的底层细节。以这种方式使用Beringei类似RocksDB,Beringei有望成为支持其他性能监控解决方案的高性能存储系统。

Beringei作为库的使用具有下列特点:

  1. 支持速度非常快的内存存储,并由硬盘保证数据持久性。存储引擎的查询总是在内存张处理,提供了极高的查询性能,除非需要到磁盘查询,否则一般不进行磁盘操作,所以可以在停机时间极短、数据没有丢失的情况下重启或迁移进程。

  2. 极其高效的数据流压缩算法。采用的数据流压缩算法能够将实际的时间序列数据压缩90%以上。Beringei使用的delta of delta压缩算法也很高效,单个机器每秒就能够压缩150多万个数据点。

虽然将Beringei直接嵌入到另一个TSDB里面也是一种方案,但是Facebook更加推荐采用一体化实现方案,这种一体化实现让用户可以扩建可扩展的分片服务。

  1. 参考分片服务实现。Beringei项目同时包括时间序列存储数据库和相关的客户端实现。

  2. 可视化集成。Beringei提供一种HTTP服务实现,能够直接与Grafana集成起来,并且易于横向扩展。

Beringei需要部署在Ubuntu 16.10(其余系统未做测试),较为严重的问题是外部代码依赖较多,导致部署环境不太容易,需要依赖fbthrift、folly、wangle、proxygen、gtest、gflags。

Beringei在Facebook的应用

Beringei目前是Facebook的监控基础设施的一部分,它可以支持针对监控系统提供的实时响应机制。Beringei收到请求后,立即可以提供查询服务,数据写入Beringei与可供使用之间的延迟大约是300微秒,Facebook的p95服务器响应读取请求的时间大约是65微秒。相比Facebook原本基于磁盘的旧引擎设计方案,Beringei的内存系统在读取性能方面和写入性能方面都高出几个数量级。此外,Beringei支持与Facebook的自动检测系统配合使用,该系统观察数百万个时间序列,以便检测异常、发出警报。

Beringei目前存储多达100亿个唯一的时间序列,每分钟可处理1800万次查询,为Facebook的大部分性能和运行状况监控任务提供支持,同时让工程师和分析员能够借助准确的实时数据,快速做出决策。

Gorilla:Beringei的原型系统

Gorilla是一种快速、可扩展的内存时间序列数据库,是开源的Beringei的原型系统。

另外,阿里云数据库高级专家叶翔借着源代码和论文,对Beringei原理进行了解读,同时也介绍了它在Facebook的应用情况,读者可以参考了解。














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6392756.html,如需转载请自行联系原作者


相关文章
|
5月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
7月前
|
关系型数据库 MySQL 数据库
MyEMS开源系统安装之数据库
本文详细讲解MyEMS的安装步骤,重点介绍数据库架构与脚本部署。MyEMS支持MySQL 8.0、MariaDB 10.5及SingleStore 7.0等数据库服务器。通过命令行或客户端工具执行SQL脚本完成安装,包括多个数据库(如myems_billing_db、myems_energy_db等)。此外,提供解决常见问题的方法,如“用户拒绝访问”、“COLLATE设置”和“MAX_ALLOWED_PACKET错误”。注意,不建议在生产环境中将数据库安装于Docker容器内。
220 1
|
7月前
|
存储 缓存 监控
上网行为监控系统剖析:基于 Java LinkedHashMap 算法的时间序列追踪机制探究
数字化办公蓬勃发展的背景下,上网行为监控系统已成为企业维护信息安全、提升工作效能的关键手段。该系统需实时记录并深入分析员工的网络访问行为,如何高效存储和管理这些处于动态变化中的数据,便成为亟待解决的核心问题。Java 语言中的LinkedHashMap数据结构,凭借其独有的有序性特征以及可灵活配置的淘汰策略,为上网行为监控系统提供了一种兼顾性能与功能需求的数据管理方案。本文将对LinkedHashMap在上网行为监控系统中的应用原理、实现路径及其应用价值展开深入探究。
191 3
|
8月前
|
人工智能 运维 关系型数据库
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的XGBoost时间序列预测算法matlab仿真
本程序基于Matlab 2024b实现,结合粒子群优化(PSO)与XGBoost算法,用于时间序列预测。通过PSO优化XGBoost超参数,提升预测精度。程序包含完整注释与操作视频,运行后生成预测效果图及性能评估指标RMSE。
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
8月前
|
SQL 人工智能 数据可视化
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
1757 67
|
6月前
|
机器学习/深度学习 算法
基于遗传优化ELM网络的时间序列预测算法matlab仿真
本项目实现了一种基于遗传算法优化的极限学习机(GA-ELM)网络时间序列预测方法。通过对比传统ELM与GA-ELM,验证了参数优化对非线性时间序列预测精度的提升效果。核心程序利用MATLAB 2022A完成,采用遗传算法全局搜索最优权重与偏置,结合ELM快速训练特性,显著提高模型稳定性与准确性。实验结果展示了GA-ELM在复杂数据中的优越表现,误差明显降低。此方法适用于金融、气象等领域的时间序列预测任务。
|
6月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
7月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
411 4

热门文章

最新文章