時序列數據庫武鬥大會之 TSDB 名錄 Part 1

【編者按】
劉斌,OneAPM後端研發工程師,擁有10多年編程經驗,參與過大型金融、通訊以及Android手機操做系的開發,熟悉Linux及後臺開發技術。曾參與翻譯過《第一本Docker書》、《GitHub入門與實踐》、《Web應用安全權威指南》、《WEB+DB PRESS》、《Software Design》等書籍,也是Docker入門與實踐課程主講人。本文所闡述的「時間序列數據庫」,系筆者所負責產品 Cloud Insight 對性能指標進行聚合、分組、過濾過程當中的梳理和總結。html

經過上一章《時序列數據庫武鬥大會之什麼是TSDB》的介紹,相信你們已經知道了什麼是時序列數據庫,以及對它能幹什麼,具備什麼特色。mysql

那麼在這一篇文章中,咱們將介紹一下目前都有哪些 TSDB,以及它們各自的特色,並基於我的觀點,給出必定的(喜愛)評判。web

因爲我的能力所限,有些地方調查可能不到位,再加上必定的我的主觀因素,跟其餘人的結論可能不同,不過這應該也正常。沒有調查過就沒有發言權,只有真正的深度用戶的發言,才具備說服務力,你權當這裏就是我拋磚了。算法

雖然也有人用 ElasticSearch 或者 MongoDB 來存儲時序列數據,做爲更適合分類爲 NOSQL 的這兩個數據庫軟件,咱們這裏就不對它們作介紹了。sql

DB-Engines 中時序列數據庫排名

咱們先來看一下DB-Engines中關於時序列數據庫的排名,這是當前(2016年2月的)排名狀況:數據庫

下面,咱們就按照這個排名的順序,簡單介紹一下這些時序列數據庫中的一些。下面要介紹的 TSDB 以開源的爲主,若是是商業或者 SaaS 服務,也簡單介紹一下其特色,讓你們能對其餘領域的事物也有所瞭解。編程

這裏有一個例外,就是 Pinot 並不在這個排名裏,可是我也把它列在了這裏。後端

1. InfluxDB

InfluxDB 由 Golang 語言編寫,也是由 Golang 編寫的軟件中比較著名的一個,在不少 Golang 的沙龍或者文章中可能都會把 InfluxDB 當標杆來介紹,這也間接幫助 InfluxDB 提升了知名度。安全

InfluxDB的主要特色包括下面這些:服務器

  • schemaless(無結構),能夠是任意數量的列

  • 可擴展(集羣)

  • 方便、強大的查詢語言

  • Native HTTP API

  • 集成了數據採集、存儲、可視化功能

  • 實時數據 Downsampling

  • 高效存儲,使用高壓縮比算法,支持retention polices

InfluxDB 是 TSDB 中爲數很少的進行了用戶和角色方面實現的,提供了 Cluster Admin、Database Admin 和 Database User 三種角色。

InfluxDB 的數據採集系統也支持多種協議和插件: - 行文本 - UDP - Graphite - CollectD - OpenTSDB

不過 InfluxDB 每次變更都較大,尤爲是在存儲和集羣方面,追求平平安過日子,不想瞎折騰的能夠考慮下。

注意:因爲InfluxDB開發太活躍了,極可能你在網上搜到的資料都是老的,會害到你,因此你須要以官方文檔爲主。

一句話總結:欣欣向榮、值得一試。

2. RRDtool

RRDtool 全稱爲 Round Robin Database Tool,也就是用於操做 RRD 的工具,簡單明瞭的軟件名。

什麼是 RRD 呢?簡單來講它就是一個循環使用的固定大小的數據庫文件(其實也不太像典型的數據庫)。

大致來講,RRDtool 提供的主要工具以下:

  • 建立RRD(rrdtool create)

  • 更新RRD(rrdtool update)

  • 畫圖(rrdtool graph)

這其中,畫圖功能是最複雜也是最強大的,甚至支持下面這些圖形,這是其餘 TSDB 中少見的:

  • 指標比較,對兩個指標值進行計算,描畫出知足條件的區域

  • 移動平均線

  • 和歷史數據進行對比

  • 基於最小二乘法的線性預測

  • 曲線預測

  • 總之,它的畫圖功能太豐富了。

一句話總結:老牌經典、藝多不壓身。

3. Graphite

Graphite 由 Orbitz, LLC 的 Chris Davis 創立於 2006 年,它主要有兩個功能:

  • 存儲數值型時序列數據

  • 根據請求對數據進行可視化(畫圖)

相應的,它的特色爲:

  • 分佈式時序列數據存儲,容易擴展

  • 功能強大的畫圖Web API,提供了大量的函數和輸出方式

  • Graphite自己不帶數據採集功能,可是你能夠選擇不少第三方插件,好比適用於* collectd、Ganglia或Sensu的插件等。同時,Graphite也支持Plaintext、Pickle和AMQP這些數據輸入方式。

Graphite主要由三個模塊組成:

  • whisper:建立、更新RRD文件

  • carbon:以守護進程的形式運行,接收數據寫入請求

    • carbon-cache:數據存儲

    • carbon-relay:分區和複製,位於carbon-cache以前,相似carbon-cache的負載均衡

    • carbon-aggregator:數據集計,用於減輕carbon-cache的負載

  • graphite-web:用於讀取、展現數據的Web應用

whisper 使用了相似 RRDtool 的 RRD 文件格式,它也不像 C/S 結構的軟件同樣,沒有服務進程,只是做爲 Python library 使用,提供對數據的 create/update/fetch 操做。

若是你對它的性能比較在乎,這裏有一份老的數據可供參考。

Google、Etsy、GitHub、豆瓣、Instagram、Evernote 和 Uber 等不少知名公司都是 Graphite 的用戶。有此背景,其可信度又加一層,並且網上的資料也至關的多,值得評估一下。

一句話總結:羣衆基礎好、能夠參考。

4. OpenTSDB

OpenTSDB 是一個分佈式、可伸縮的時間序列數據庫。它支持豪秒級數據採集全部 metrics,支持永久存儲(不須要 downsampling),和 InfluxDB 相似,它也是無模式,以 tag 來實現維度的概念。

好比,這就是它的一個metric例子:

mysql.bytes_received 1287333217 66666666 schema=foo host=db1

OpenTSDB 的節點稱爲 TSD(Time Series Daemon (TSD)),它沒有主、從之分,消除了單點隱患,很是容易擴展。它主要以HBase做爲存儲系統,如今也增長了對 Cassandra 和 Bigtable(非雲端)。

OpenTSDB 以數據存儲和查詢爲主,附帶了一個簡單地圖形界面(依賴Gnuplot),共開發、調試使用。

一句話總結:好用,咱們的產品Cloud Insight 也在用這項技術來實現對性能指標進行聚合、分組、過濾。

5.KDB+

全部 TSDB 中,估計就數這個最酷了,我說的是域名,只有兩個字母,猥瑣地想一下,域名就值不少錢 :-)。

kdb+是一個面向列的時序列數據庫,以及專門爲其設計的查詢語言q(和他們的域名同樣簡短)。Kdb+ 混合使用了流、內存和實時分析,速度很快,支持分析 10 億級別的記錄以及快速訪問TB級別的歷史數據。

不過這是一個商業產品,可是也提供了免費版本(貌似還限制在32位)。

6.KairosDB

KairosDB 是一個 OpenTSDB 的 fork,不過是基於 Cassandra 存儲的。因爲 Cassandra 的行比 HBase 寬,因此 KairosDB 的 Cassandra 的默認行大小爲 3 星期,而 OpenTSDB 的 HBase 則爲 1 小時。

KairosDB 支持經過 Telnet、Rest、Graphite 等協議寫入數據,你也能夠經過編寫插件本身實現數據寫入。

KairosDB 也提供了基於 Web API 的查詢接口,支持數據聚合、持過濾和分組等功能。

同時 KairosDB 提供了一個供開發用的 Web UI,圖形繪製引擎使用了 Flot。

和 OpenTSDB 相似,KairosDB 也提供了插件機制,你可使用插件完成以下工做:

  • 添加數據點(data point)監聽器

  • 添加新的數據存儲服務

  • 添加新的協議處理程序

  • 添加自定義系統監視服務

7.Druid

Druid 是一個快速、近實時的海量數據 OLAP 系統,而且是開源的。Druid 誕生於 Metamarkets,後來一些核心人員創立了 IMPLY 公司,進行 Druid 相關的產品開發。

Druid 會按時間來進行分區(segment),而且是面向列存儲的。它的主要特性以下:

  • 支持嵌套數據的列式存儲

  • 層級查詢

  • 二級索引

  • 實時數據攝取

  • 分佈式容錯架構

根據去年末 druid.io 的白皮書,如今生產環境下最大的集羣規模以下:

  • 3M EVENTS / SECOND SUSTAINED (200B+ EVENTS/DAY)

  • 10 – 100K EVENTS / SECOND / CORE

  • 500TB OF SEGMENTS (>50 TRILLION RAW EVENTS)

  • 5000 CORES (>400 NODES, >100TB RAM)

  • QUERY LATENCY (500MS AVERAGE)

  • 90% < 1S 95% < 2S 99% < 10S

  • 3+ trillion events/month

  • 3M+ events/sec through Druid’s real-time ingestion

  • 100+ PB of raw data

  • 50+ trillion events

Druid 企業用戶比較多,好比 OneAPM、Netflix 和 Paypal 等。具體能夠參考 http://druid.io/druid-powered.html

Druid 架構比較複雜,所以對部署和運維也有必定的負擔,好比須要的機器多、機器配置要高(尤爲是內存)。

一句話總結:好用,咱們在用。

8.Prometheus

Prometheus 是一個開源的服務監控系統和時序列數據庫,由社交音樂平臺 SoundCloud 在2012年開發,最近也變得很流行,最新版本爲 0.17.0rc2。

Prometheus 從各類輸入源採集 metric,進行計算後顯示結果,或者根據指定條件出發報警。

和其餘監控系統相比,Prometheus 的特色包括:

  • 多維數據模型(時序列數據由metric名和一組key/value組成)

  • 靈活的查詢語言

  • 不依賴分佈式存儲,單臺服務器便可工做

  • 經過基於HTTP的pull方式採集是序列數據

  • 能夠經過中間網關進行時序列數據推送

  • 多種可視化和儀表盤支持

因爲 Prometheus 採用了相似 OpenTSDB 和 InfluxDB 的 key/value 維度機制,因此若是你對任一種 TSDB 有了解的話,學習起來會簡單些。

一句話總結:貌似比較火,何不試一試?

9.Pinot

Pinot 是一個開源的實時、分佈式 OLAP 數據存儲方案。它來自 Linkedin,雖然 Linkedin 最近估價表現不好,可是他們建立的各類軟件、中間件實在太多了。這一點咱們作軟件的都應該向 Linkedin 表示感謝。

Pinot 就像是一個 Druid 的 copy,不過二者的靈感都來源於SenseiDB(Sensei 在日語裏爲老師的意思,寫成漢字爲「先生」)。

Pinot 也像 Druid 同樣,能加載 offline 數據(Hadoop 文件)和實時數據(Kafka)。Pinot 從設計上就面向水平擴展。

Pinot 主要特色:

  • 面向列

  • 插拔式索引引擎:排序索引、位圖索引和反向索引

  • 根據查詢語句和segment信息對查詢/執行計劃進行優化

  • 從 Kafka 實時數據攝取(ingestion)

  • 從 Hadoop 進行批量攝取

  • 相似 SQL 的查詢語言,支持聚合、過濾、分組、排序和惟一處理。

  • 支持多值字段

  • 水平擴展和容錯

Pinot 的特色和 Druid 很像,二者可互爲參考。

一句話總結:背靠大樹好乘涼。

小結

這裏咱們爲你們介紹了幾種常見 TSDB,如不出意外,你可能會在這裏選擇某一種來使用。

儘管如此,咱們仍是會爲你們介紹更多一些的項目,讓你們能更多的瞭解一些不一樣的 TSDB 及其特色,也能幫助讀者深刻了解 TSDB 的各類場景,開闊思路。

在下一篇文章中,咱們將會爲各位再介紹幾種時序列數據庫。

這是本系列文章的其餘部分:

本文轉自 OneAPM 官方博客

相關文章
相關標籤/搜索