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%。

使用场景及特点

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

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

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

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

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

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

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

可视化集成。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的原型系统。作为监控系统,它重点赶住数据集合分析,并且认为对于发现、诊断正在发生的问题时,最近的数据点的价值要大于旧的数据点,传统的ACID不是核心内容。Gorilla主要针对高可用的读写做了优化,故障发生时,允许丢失少量写数据。Gorilla将数据保存至多个数据中心,但不保证数据一致性。

为了改善效率,时间戳压缩算法使用了delta-of-delta编码算法,数据值采用XOR进行压缩,存储容量压缩了近10倍。Gorilla将数据放置于内存中,与基于HBase的传统数据库存储时间序列数据方式相比,查询延时缩短了73倍,吞吐量提高了14倍。

2015年数据,Gorilla支持80台集群规模,提供了富客户端解决方案,需要客户端配合完成机房容灾、异常恢复。

Gorilla实际上是一套混合存储解决方案:

In-Memory解决快速写入,提供近期快速读取

In-SSD提供星期级别的监控数据读取

In-SATA提供历史数据永久归档

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

本文转自d1net(转载)

时间: 2024-09-20 10:12:50

Facebook开源内存数据库Beringei,追求极致压缩率的相关文章

深度解读Facebook刚开源的beringei时序数据库

Facebook最近开源了beringei时序数据库.beringei是用来解决其内部监控数据存储和查询需求的数据库,其特点是读写速度快,属于内存数据库. beringei是如何做到的呢,其压缩算法上有哪些独到之处? 阿里云数据库高级专家叶翔借着源代码和论文,对beringei原理进行了解读,同时也介绍了它在Facebook的应用情况. 扩展阅读: 1.阿里云专家带您探寻MongoDB技术内幕 2.云数据MongoDB官网

Facebook开源新的压缩算法,性能超zlib

近日,Facebook开源了新的压缩算法Zstandard 1.0.据Facebook工程师Yann Collet和Chip Turner介绍,该算法是少数能够在性能和效率方面超过zlib的压缩算法之一,而后者当前是"占统治地位的标准".Facebook Zstandard利用了Collet之前所做的工作.Collet是LZ4的作者,他在2015年发布了其新算法的第一个版本. Facebook的基准测试显示,在任意压缩率和压缩带宽组合下,Zstandard的性能都要高于zlib. 特别

使用Facebook开源代码FBShimmering封装进度显示的ShimmeCircleView

使用Facebook开源代码FBShimmering封装进度显示的ShimmeCircleView 效果图: 静态图: 源码: ShimmeCircleView.h 与 ShimmeCircleView.m // // ShimmeCircleView.h // YouXianMingClock // // Created by YouXianMing on 14-10-13. // Copyright (c) 2014年 YouXianMing. All rights reserved. //

PhalApi-Xhprof -- Facebook开源的轻量级PHP性能分析工具

PhalApi-Xhprof -- Facebook开源的轻量级PHP性能分析工具 前言 Facebook开源的轻量级PHP性能分析工具,非常爽希望大家喜欢 附上: 官网地址:http://www.phalapi.net/ 开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release 开源中国拓展Git地址:http://git.oschina.net/dogstar/PhalApi-Library 1. 安装 首先需要安装配置Xhp

揭秘OSS实战优化、UDF追求极致之路

2017在线技术峰会,阿里云对象存储服务技术专家杨铭来为大家揭秘存储技术实战优化红包体验.本文主要从红包场景中设计到的存储开始谈起,着重介绍阿里云对象存储OSS的技术架构,以及架构如何支撑红包活动的,最后从存储扩展看看OSS上的计算生态. 直播视频 以下是精彩内容整理:   红包场景中的存储 2017年支付宝红包有两个有趣的玩法,AR实景红包和"扫一扫"扫福字.AR实景红包可以利用手机拍的照片,将红包藏在某个地点,将红包地点和线索图发给好友,好友可以根据线索图找红包:扫福字可以利用手机

追求极致体验人士的必备手机 三星N7100大降价

极致体验时尚必备 三星N7100大降价 类型:原创 作者:展恒亮 时间:2014-05-01 06:00:00 (手机中国 济南行情)近日三星N7100在济南智能手机诚信专卖特价为2420元,三星N7100运行速度更快,是追求极致体验人士的必备手机. 图为:三星N7100 三星N7100整体为简洁时尚且纤薄的直板触控设计,机身手感比较厚实.在其正面配备了一块5.5英寸的电容触摸屏,1280x720像素的分辨率带来了清晰细腻的显示效果,多点触控表现也不错.在其背后的一枚摄像头为800万像素,成像实

Facebook开源项目:我们为什么要用Fresco框架?

(Facebook开源项目)Fresco:一个新的Android图像处理类库  在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题.图片太大,而设备太小.一个像素点就占据了4个字节数据(分别代表R G B和alpha).如果在一个480*800尺寸的手机屏幕上,一张单独的全屏图片就会占据1.5MB的内存空间.通常手机的内存都非常小,而这些内存被多种多样的app划分占用.在一些设备上,Facebook app虽然只有16MB,

Facebook 开源深度学习框架 Torchnet

Facebook开源深度学习框架Torchnet,加快A.I研究步伐 今天,在新发布的一篇学术报告中,Facebook 详细介绍了新的人工智能开源软件 Torchnet,用于简化深度学习. 深度学习是当下一种时髦的学习方式,涉及到培训人工神经网络处理大量的数据,如图片,然后让神经网络做出新数据的预测.与其建立一个全新的深度学习框架, Facebook 选择的是在 Torch 上编译一个开源库,Facebook 先前也曾致力于此. "这 使得它很容易实现完全隐藏 I/O(输入 / 输出)成本功能,

Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍

今年5月,Facebook AI研究院(FAIR)发表了他们的研究成果fairseq,在fairseq中,他们使用了一种新型的卷积神经网络来做语言翻译,比循环神经网络的速度快了9倍,而且准确性也是现有模型中最高的.此外,他们在GitHub公布了fair序列建模工具包的源代码和训练好的系统,其他的研究者可以在此基础上建立自己的关于翻译.文本总结和其他任务的模型. 详情可参见快9倍!Facebook开源机器学习翻译项目fairseq一文. 日前,Facebook AI研究团队又在GitHub上开源了