博客/工程

第一印象

2015年1月7日 5分钟

当我们开始开发雨池平台时,我们已经开始尝试时间序列数据库的许多解决方案,包括MongoDB、OpenTSDB、Graphite甚至MySQL。bob彩票中奖计划

更通用的数据库解决方案,如MongoDB和MySQLbob彩票中奖计划,很快就被排除在可行的选项之外。尽管它们都是很棒的工具,但它们并不适合于我们特别感兴趣的大规模时间序列数据的狭窄用例。

OpenTSDB显示了很多希望,但我们发现保持Hadoop集群运行的复杂性不值得这样的回报。在过去的生活中,我们对HBase有一些经验,并将其视为平台的负担。

石墨是一个非常有趣的项目,近年来很受欢迎。我们真正喜欢它的是它所支持的计算和转换的丰富性。然而,Graphite的默认后端(Whisper和Carbon)在很多方面都是它的致命弱点。

在与糟糕的安装文档和漏洞百出的代码作斗争之后,我们终于让Graphite开始运行了。根据我们所做的研究,我们并没有抱太大的希望。实际上,它的性能很低,而且难以扩展。

这时我们发现了InfluxDB,这是一个新的开源时间序列数据库,Grafana现在支持它。在最近的一次纽约之行中,我有幸与InfluxDB的首席执行官Paul Dix共进午餐。

对我们来说,InfluxDB有几个吸引人的关键因素。

  1. 安装和设置非常简单。InfluxDB是用Go编写的,是一个没有依赖关系的二进制文件。在安装.deb包之后,您将看到一个干净而简单的UI,可以开始添加用户和数据库。

  2. 它支持Carbon明文协议。这允许简单的互操作性。

  3. 它似乎表现得很好

说某件事表现得很好是一种不成熟的说法,所以让我们来看看一些显示我们所看到的数字。请记住,这些只是特别的数字;随着我们的发展,我们将分享更详细和全面的基准。

硬件

一个单一的InfluxDB服务器,具有:

CPU: 2 * Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz(共16核,32线程)内存:32GB硬盘:2 * 240GB SSD, raid d1

该体系结构

为了产生负载,我们使用了雨罐软件的工作原型,该软件使用远程节点的全球网络来收集网络性能数据。然后,这些数据从这些节点通过核心应用程序进行流处理,然后使用TCP连接池将其写入到InfluxDB。

数据使用Carbon明文协议提交给InfluxDB,该协议由InfluxDB Graphite输入插件提供。应用程序在与InfluxDB不同的服务器上运行,以免影响此测试的结果。

为了增加负载,我们只需不断向远程节点添加额外的检查,直到InfluxDB崩溃,或者测试节点的容量耗尽为止。让我们非常惊讶的是,InfluxDB并不是瓶颈;我们以每秒50,000个指标的速度耗尽了测试能力,而InfluxDB只能在一台服务器上运行。

我们注意到的最令人印象深刻的性能指标是磁盘IOPS根本不是一个限制因素。当将如此多的指标写入磁盘时,我们期望看到相对较高的IOPS,因为这是我们以前在其他解决方案中看到的瓶颈。bob彩票中奖计划但是,当每秒写入50,000个度量时,服务器发出的IOPS不到250

# iostat -x -m 60 -p dm-0 avg-cpu: %user %nice %system %iowait %steal %idle 9.29 0.00 0.95 0.23 0.00 89.53 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util dm-0 0.00 0.00 4.82 241.85 0.03 27.71 230.37 4.80 19.47 0.72 19.85 0.30 7.51

正如您从iostat输出中看到的,承载InfluxDB的服务器处理负载时没有出现问题。(应该注意的是,我们只向InfluxDB写入数据;该节点也不响应任何查询)

虽然这个项目只有大约一年的历史,但保罗和他的团队已经为存储时间序列数据提供了一种很有前途的新选择。不幸的是,对于我们的用例来说,有一个重要的问题是清单系列很慢,目前还没有简单的解决办法。我们期望在单个名称空间中有数十万(最终是数百万)个系列名称,并且在这方面需要更好的性能。

未来

最近,InfluxDB获得了800万美元的a轮融资,这应该会让他们的发展速度大大加快。他们实际上是在从零开始重写数据库,在接下来的几个月里会推出一个稳定的版本。我们希望这将是一个可靠的发布。

另一个有趣的选择是Cassandra,尤其是KairosDB。Cassandra是一个成熟而稳定的产品,KairosDB看起来很有前途。在Grafana中已经有了一些支持它的初始工作。我还没多少机会摆弄它呢。

在我们构建平台的过程中,我们将尝试使用更多的数据库(使用InfluxDB、KairoSDB和其他数据库),并将分享我们的主观经验以及更详细的性能数据。

看看开源时间序列空间是如何演变的将会很有趣。我们才刚刚开始触及皮毛。