01 選型背景
我公司致力于儲能業務的開發,包括對龐大而復雜的儲能裝置進行設計、制造和管理。
在生產安全的重任下,我們需要實時監測電池的每一次充放電過程、電流、電壓等值,以保障電池安全,而每一個變化的數據就是一個帶有時間戳的時序數據。
大型儲能裝置十分復雜,伴隨著業務的擴展,我們的設備和測點數量不斷激增,數據采集的頻率也在不斷提高。
面對海量的時序數據,傳統的處理方案顯得力不從心,成本高昂且效率低下。因此,我們需要一款高性能的時序數據庫,實現數據的高效處理和實時分析。
經過深入的調研之后,我們在 InfluxDB 和 IoTDB 之間選擇了 IoTDB 作為儲能業務線的時序數據庫。
IoTDB 1.0 版本后支持了分布式部署,其數據分區存儲的高可擴展性,以及多副本存儲實現了無單點故障的高可用性,都深深吸引了我們。
而且,IoTDB 搭配了多種一致性協議,能夠適配不同的場景,這種易于橫向擴展的系統架構,完美匹配了我們業務的發展趨勢。
02 部署架構
考慮到將 IoTDB 部署在物理服務器上,通過公網進行業務應用交互可能會帶來數據延遲和運維成本問題,并且需要從頭規劃計算、存儲以及監控系統,整個過程耗時漫長,不利于項目推進。
最終,我們決定直接在業務應用的 K8S 環境上部署 IoTDB,實現云上集成應用。這樣不僅可以提高運維的一致性,也充分利用了云環境的彈性。
部署 IoTDB 后的業務架構是這樣的:在儲能設備端,電池簇持續實時上報增量時序數據,并每隔 5 秒上報一次超過 10 萬指標的全量時序數據。
這些數據通過站端轉發服務器,使用 MQTT 協議傳輸至云端,經過 EMQX 的數據轉換后,存儲至阿里云環境中部署的 IoTDB 數據庫,并進一步進行數據的查詢、計算與分析。

IoTDB 新穎的分布式架構和高可用模式,為我們提供了強有力的數據存儲保障,因此目前我們采用了 3C3D 的高性能分布式架構。
對于整體存儲空間,IoTDB 支持使用公有云的 SSD 云盤隨時擴容,DataNode 節點容量也可以通過 scale StatefulSet 工作負載進行擴容,為我們的業務架構提供了非常高的靈活性。
為滿足實時監控處理需求,我們利用了 IoTDB 內置的 Prometheus Exporter,快速接入監控,實時了解集群狀態,為性能優化指明方向。
在數據備份方面,我們采用了 Velero 對 IoTDB 相關負載進行備份,數據可以直接備份到 OSS 上,也可以通過 crontab 定時備份,并使用 velero hook annotation 在備份前進行強制 flush 刷盤,以保障備份過程中的數據完整性。
值得一提的是,在部署落地的過程中,IoTDB 的用戶文檔描述清晰,運維簡便,上手成本低,大大方便了我們運維人員的部署工作。
并且,我們深深感受到 IoTDB 背后有一群熱愛研發的程序員,他們的運維支持穩定可靠、響應積極快速,我們生產中遇到的問題能夠在很短時間內獲得很多實質性的幫助,因此我們對于 IoTDB 產品和團隊是非常信任的。

我們的 IoTDB 集群配置如下:

使用的 IoTDB 數據備份腳本如下:
03 應用效果
以下舉例兩個 IoTDB 在我們的儲能業務中的實際應用場景:
業務場景一:在某大型儲能業務中,IoTDB 共監測 150 個設備,10000 測點,1 秒采集一次上報的時序數據。其集群寫入性能穩定實現千萬級吞吐,并發 10 個聚合查詢場景,平均耗時都在 1 秒之內,各項監控指標表現優異,完全滿足我們的業務需求。
在該場景,我們使用 IoT-Benchmark 進行壓測的結果如下:
集群設置:

性能表現:


業務場景二:在某大型儲能業務中,IoTDB 共監測 150 個設備,1 分鐘采集一次,連續上報 3 個月的時序數據,覆蓋測點數近 150 億個。IoTDB 的千萬級寫入性能完全滿足場景需要。在核心聚合查詢場景中,SQL 結果均在 1 秒內返回,而對于如此數量的模型數據,關系型數據庫是不可能完成查詢的。
聚合查詢場景舉例如下:

04 未來展望
部署 IoTDB 后,我們不但可以很自豪地和客戶說:“我們使用的是國產時序數據庫。”而且這款國產時序數據庫還能夠真正高效地管理海量時序數據,有效提升數據的處理和實時分析能力,為公司儲能業務的電池安全監控提供有力保障。
未來,我們希望抽象出一套 operator 來滿足各種不同架構的 IoTDB 部署,同時實現 K8S 環境的一鍵部署。我們也希望與 IoTDB 團隊繼續保持緊密合作,適配更大規模的數據體量,通過對更多時序數據的有效管理,進一步賦能我們儲能業務的發展。





京公網安備 11011402013531號