時序數據庫(NTSDB)在網易的實踐

網易時序數據庫(NTSDB)作爲一款高性能分佈式時序數據庫,核心功能是爲時序數據業務提供三高服務:讀寫服務高可用、數據高可靠以及讀寫高性能(高吞吐量的時序數據寫入、高壓縮率存儲以及高效聚合分析查詢)。除此之外,NTSDB 還擁有非常便捷的擴容縮容能力,完善的用戶權限體系,業務友好的 free schema 特性等。

什麼是時序數據業務?

哪些業務是時序數據業務呢?簡單的說,如果你的數據記錄中有一個字段是時間字段,而且大多數查詢都需要基於時間區間進行過濾查詢分析(也就是你只關心某個時間段的查詢統計結果),這個業務基本就可以認定爲時序數據業務了。典型的時序數據業務有類監控業務、業務指標統計分析業務以及物聯網設備數據分析業務等。

比如監控類業務,監控服務器主機的 CPU 資源使用情況,採集器每次採集服務器的 CPU 使用率進行存儲都必須帶有時間字段,用以表徵給定時間點的 CPU 使用率,用戶查詢也是基於時間字段查詢最近一小時或者最近三小時的 CPU 使用率曲線,或者做一些統計分析,比如分析對比最近一小時多臺服務器的 CPU 平均使用率,看哪個 CPU 的平均使用率最高。這類監控業務除了服務器硬件監控,還有各種業務指標監控,開源系統集羣監控等等。

哪些業務不是時序數據業務呢?比如交易訂單數據、商品庫存數據,用戶信息(標籤)數據,歌單信息數據等等,這些數據本身並不需要時間字段,用戶也不會根據時間區間去執行過濾查詢。

NTSDB 爲什麼適合時序數據業務?

1. 網易時序數據庫系統架構

NTSDB 系統主要由 3 個部分構成:NTSDB 客戶端、Master 節點以及 ShardServer 節點。如下圖所示:

NTSDB 客戶端:包括 Shell 命令行客戶端、Java SDK、Python SDK 等,不同客戶端滿足不同業務需求。

Master 節點:負責管理集羣元數據信息,處理集羣節點故障恢復,執行負載均衡等管理操作。Master 採用 Raft 三副本機制保證服務高可用、元數據高可靠,避免單點故障。

ShardServer 節點:計算存儲引擎 ShardServer 負責用戶的讀寫請求。ShardServer 由 SQL 引擎層、執行計劃層、分佈式聚合層、倒排索引引擎以及時序存儲引擎等多個模塊組成。其中 SQL 引擎負責將用戶輸入的 SQL 語句解析爲系統可執行語句;執行計劃層負責執行計劃的制定,主要根據用戶輸入的時間範圍選擇對應的數據分片作爲實際數據源;分佈式聚合層負責將各個分片讀取到的原始數據進行聚合計算;倒排索引引擎負責根據用戶輸入的維度條件進行索引檢索,加快多維條件過濾查詢;時序存儲引擎負責存儲實際的時序數據,這些時序數據會按照時間順序按照列式進行存儲,每個數據列會根據數據類型進行相應的數據壓縮,減少存儲空間。

2. 網易時序數據庫核心功能

(1)讀寫高性能

(2)簡單易用

(3)分佈式集羣能力

由此可見,網易時序數據庫針對時序數據定製了時序存儲引擎,並增加了倒排索引功能、SQL 引擎功能以及分佈式集羣管理功能,是一款針對性極強的存儲解決方案。

NTSDB 應用場景

1. 大規模集羣監控平臺

系統監控業務是時序數據業務最典型的代表,可以說 NTSDB 就是爲監控而生。監控需求是所有在線服務系統的剛需,NTSDB 系統可以爲監控業務提供最友好的存儲技術保障。對於監控場景,NTSDB 提供兩種接入方式:

目前 telegraf 採集器原生支持 30 多種系統的指標採集,包括 MySQL、SQL Server、MongoDB、Nginx、Tomcat、Elastic Search、RabbitMQ、 ceph、docker、kubernetes、redis、varnish 以及 zookeeper 等。

(NTSDB 在大規模集羣監控平臺的應用)

2. 業務指標統計分析平臺

另一個典型的時序數據業務是應用指標統計分析平臺,比如廣告營銷分析平臺、性能測試分析平臺、CDN 流量分析平臺等等。廣告營銷分析平臺會對指定廣告主、廣告位上的廣告曝光量、點擊量等各種指標基於時間區間進行多維度分析統計,根據統計結果指導優化廣告投放策略。性能測試分析平臺會對指定 URL 的 TPS、訪問成功率、訪問延遲等指標基於時間區間進行多維度統計分析,形成性能測試報告。

(使用 NTSDB 之後的典型解決方案)

業務方通過日誌的形式將業務指標以 json 的方式發送到 Kafka 系統,NTSDB 會從 Kafka 系統將對應 topic 的 json 數據拉取下來並進行存儲。前端再使用 Grafana 作爲可視化分析工具,或者業務直接調用 JDBC 進行數據分析。

業務方也可以通過 NTSDB 提供的 JDBC 將採集的數據直接寫入 NTSDB 系統。前端再使用 Grafana 作爲可視化分析工具,或者業務直接調用 JDBC 讀取數據進行數據分析。

3. 物聯網平臺

物聯網設備(智能掃地機器人、智能音響、工廠數字機牀設備等)數據可以通過網關將數據發送到 IoT Hub(接入管理設備,接收設備上報的數據存儲在本地隊列),再通過流計算引擎將數據實時寫入 NTSDB,在 NTSDB 之上可以進行監控報警、數據分析等,基本系統架構如下:

(NTSDB 在物聯網的應用)

寫在最後

現有市場上較成熟的時序數據庫主要包括 Druid、InfluxDB 等。網易結合各類時序數據庫的優缺點,自主研發了 NTSDB,支持高性能寫入和讀取,支持多維條件查詢,支持聚合計算,且運行開銷較小,可私有化、分佈式部署。

目前網易有數 BI 已支持 Druid、InfluxDB 數據源,對 NTSDB 數據源的支持也即將上線,如果你有時序業務相關的需求,或者你對時序數據庫技術細節感興趣,歡迎來撩~

讀了這篇文章,希望可以幫助大家理解這麼幾個非常重要的問題(對個人的技術提升、業務的方案選型非常有幫助):

  1. 什麼是時序數據業務?負責的業務有沒有時序數據業務?

  2. 如果你當前的業務是時序數據業務,目前的存儲方案是否存在痛點?

  3. 網易時序數據庫(NTSDB)技術架構是什麼?功能優勢在哪裏?是否可以更好地滿足當前的業務需求?

作者簡介

子和,網易大數據開發工程師,長期從事分佈式 KV 數據庫、分佈式時序數據庫以及大數據底層組件等相關工作。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_5SGPeDodC1kMYJC5sazdA