時序數據庫(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)讀寫高性能
-
高吞吐量寫入保證:LSM 技術保證高吞吐量寫入性能。單機每秒可寫入 30w + 個點。
-
高效查詢掃描保證:時序存儲引擎針對時序數據定製文件格式,極大提升時序數據的查找掃描效率。10 億數據集中查找數據 50ms 以內返回。
-
高效聚合分析保證:時間分片、列式存儲、分佈式聚合等功能,極大提升數據聚合能力。億條數據秒級聚合。
-
多維條件查詢保證:倒排索引功能保證高效多維條件查詢性能。
(2)簡單易用
-
提供類 SQL 語法查詢
-
Free Schema 特性保證用戶可隨意增加刪除表字段
-
TTL 功能自動過期久遠數據
-
數據可方便地執行更新
(3)分佈式集羣能力
-
多副本技術保證數據高可靠、服務高可用。避免服務單點
-
擴容只需簡單增加節點即可
由此可見,網易時序數據庫針對時序數據定製了時序存儲引擎,並增加了倒排索引功能、SQL 引擎功能以及分佈式集羣管理功能,是一款針對性極強的存儲解決方案。
NTSDB 應用場景
1. 大規模集羣監控平臺
系統監控業務是時序數據業務最典型的代表,可以說 NTSDB 就是爲監控而生。監控需求是所有在線服務系統的剛需,NTSDB 系統可以爲監控業務提供最友好的存儲技術保障。對於監控場景,NTSDB 提供兩種接入方式:
-
使用 telegraf 作爲指標採集器部署在目標集羣,將集羣指標採集到之後寫入 NTSDB;
-
業務系統通過 JDBC 直接將指標數據寫入 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 數據源的支持也即將上線,如果你有時序業務相關的需求,或者你對時序數據庫技術細節感興趣,歡迎來撩~
讀了這篇文章,希望可以幫助大家理解這麼幾個非常重要的問題(對個人的技術提升、業務的方案選型非常有幫助):
-
什麼是時序數據業務?負責的業務有沒有時序數據業務?
-
如果你當前的業務是時序數據業務,目前的存儲方案是否存在痛點?
-
網易時序數據庫(NTSDB)技術架構是什麼?功能優勢在哪裏?是否可以更好地滿足當前的業務需求?
作者簡介
子和,網易大數據開發工程師,長期從事分佈式 KV 數據庫、分佈式時序數據庫以及大數據底層組件等相關工作。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/_5SGPeDodC1kMYJC5sazdA