官术网_书友最值得收藏!

序言

5年前,我做出了一個艱難的決定:將我投入兩年多心血開發(fā)的時序大數據平臺TDengine的核心代碼開源。出乎意料的是,TDengine開源后迅速吸引了開發(fā)者的廣泛關注,并在GitHub網站全球趨勢排行榜上多次榮登榜首。至今,TDengine在GitHub網站上已積累近2.3萬顆星,Fork超過4800次,安裝實例超過53萬個,覆蓋60多個國家和地區(qū)。

這些數字讓我這個擁有40多年碼齡的開發(fā)者感到無比激動,因為人們標的每一顆星和每一次使用,都證明了研發(fā)團隊不分晝夜開發(fā)的代碼為人們帶來了實實在在的價值。龐大的用戶群體,是對開發(fā)者工作的最高獎賞。在TDengine開源5周年之際,我借此機會回顧了Dengine的發(fā)展歷程,希望與廣大開發(fā)者共享這一旅程。

選擇時序大數據這個細分領域

2016年3月,科技界迎來了一件具有深遠影響的事情:谷歌的AlphaGo與世界頂尖棋手李世石進行了一場對決,并以4∶1的比分獲勝。AlphaGo的勝利迅速點燃了全球對人工智能(Artif icial Intelligence,AI)的熱情。那么,AI如何實際應用于日常生活呢?自動駕駛是其重要的應用領域之一。實現自動駕駛的關鍵在于對汽車采集的各類數據進行實時處理和決策制定。這些數據具有一個顯著特點:它們都帶有時間戳,并且采集頻率極高。因此,我認為自動駕駛將引發(fā)數據量的爆炸式增長。

回顧2016年,我們可以看到各種交通工具,如自行車、汽車等,已經或正準備聯網,共享出行日益流行。這些交通工具持續(xù)采集數據,而它們采集的數據具有明顯的時序特征??梢哉f,隨著出行行業(yè)步入移動互聯網和AI時代,數據量正在經歷指數級增長。

另外,技術創(chuàng)新和政府推動使得光伏、風力等新能源逐漸流行,電網的供電設備數量呈指數級增長。然而,這些新能源通常無法提供穩(wěn)定且可預測的發(fā)電量,這對電網調度構成了重大的技術挑戰(zhàn)。應對這一挑戰(zhàn)的關鍵在于實時采集發(fā)電、輸電、配電、用電各環(huán)節(jié)的數據,隨后進行實時計算和決策,而這些數據無疑都是時序數據。

同時,傳統的用電單位現在可以自行安裝光伏等新能源設備。當用電單位的自產電力超出自身需求時,可以將剩余電力出售給電網。這使得用電單位同時具備了發(fā)電能力,催生出電力實時交易系統。整個電網轉變?yōu)橐粋€分布式能源系統,依賴實時采集的數據來支撐其運營。

2016年,我退出了一家創(chuàng)業(yè)公司,這讓我有了空閑時間來分析行業(yè)的重大變化。我觀察到,無論是出行行業(yè)還是更廣義的運輸行業(yè),以及分布式能源系統,都將產生海量的時序數據。這些數據的規(guī)模超出了傳統數據庫或大數據平臺的高效處理能力,迫切需要專用的時序數據處理工具。

自2016年9月起,我開始深入研究時序數據處理技術。不久后,我接觸到InfluxDB、OpenTSDB、Prometheus等時序數據庫軟件。經過研究,我發(fā)現這些工具在處理效率、水平擴展性或易用性方面仍有不足。憑借之前兩次創(chuàng)業(yè)的經驗以及直覺,我堅信這個細分市場潛力巨大,機會尚存,且非常適合我投身其中。

因此,2016年10月,我全身心投入到時序數據庫的研究之中。同年12月17日,在溪山天使投資年會上,我編寫了TDengine的第一行代碼,這標志著我的第三次創(chuàng)業(yè)之旅正式開啟。

技術創(chuàng)新是產品的根本

時序數據庫作為一種基礎軟件,要從產品眾多的市場中脫穎而出,關鍵在于技術創(chuàng)新。通過分析電力、汽車等行業(yè)場景,我注意到時序數據具有明顯的特征。例如,每臺傳感器或設備生成的數據都是結構化的,形成連續(xù)的數據流,類似于攝像頭捕獲的圖像流。這些數據通常不需要更新或刪除操作,僅需要在數據過期時進行清理。用戶更關注的是時序數據變化的趨勢,而非某一特定時間點的數值等細節(jié)。如果我們能夠充分利用這些特征,就能夠開發(fā)出極為高效的時序數據處理引擎。

鑒于每臺傳感器或設備都產生獨立的數據流,我堅信最理想的建模方式是“一個數據采集點一張表”。例如,如果有1000萬塊智能電表,就需要建立1000萬張表。這種方式將數據寫入簡化為直接的數據追加操作,并采用列式存儲。由于同一傳感器的數據變化通常較為緩慢,這可以顯著提高數據壓縮率。此外,將一個數據采集點的數據集中存儲,不僅能優(yōu)化預計算效率,還能在讀取單個采集點的數據時實現極高的讀取性能。

然而,這種數據模型也帶來了挑戰(zhàn):表的數量可能非常龐大,這使得表的管理以及表間的聚合變得復雜。為了解決這個問題,我提出了“超級表”的概念。對于同類設備,可以創(chuàng)建一張超級表作為模板,為每臺具體設備應用這張超級表,并附加各種標簽。標簽數據與時序數據分別存儲,將數據分析中的維度數據與事實數據的概念完全應用到時序數據處理中,從而高效地解決表數量過多的問題。

TDengine通過獨特的“一個數據采集點一張表”和“超級表”的設計策略,在讀寫和壓縮性能上顯著超越了市場上流行的InfluxDB和TimescaleDB等。根據全球公認的時序數據標準測試集,無論是僅CPU還是物聯網場景,TDengine都表現出顯著的優(yōu)勢(更多詳細測試報告,請訪問TDengine官方網站)。

在性能上超越競爭對手,我認為這還不夠,還應在產品功能上進行創(chuàng)新。在深入研究時序數據的應用場景后,我意識到需要將緩存、數據訂閱、流計算等功能整合進來,與時序數據庫結合,形成一個全棧的時序大數據平臺。這樣的整合可以大幅降低系統架構的復雜性和運維成本。我們選擇將產品命名為TDengine,而非簡單的DB,這是有其根本原因的。TDengine代表的是Time-Series Data Engine,即時序數據引擎。由于我們充分利用了時序數據的特征,這些功能在性能上超越通用的Redis、Kafka、Spark等軟件,同時資源消耗更少,進一步降低了運營成本。

軟件的易用性也極為關鍵。自編寫第1行代碼之初,我就決定采用SQL作為標準查詢語言,而不是像InfluxDB、Prometheus、OpenTSDB等軟件那樣,使用它們自己定義的查詢語言。在安裝部署方面也追求極致的便捷性,確保從下載、安裝到啟動,整個過程能在60s內完成。示例代碼都是即拷即用的。所有這些努力,旨在降低用戶的學習成本。

開源就是要把核心代碼開源

在數據庫這類基礎軟件領域,用戶的遷移成本極高。沒有充分的理由,很難說服開發(fā)者轉向新的數據庫系統。因此,自創(chuàng)業(yè)之初,我們就深入思考并得出結論:開源是關鍵。盡管我自己和團隊都缺乏開源經驗,但我們在發(fā)布第一個正式版本并簽約3個重要客戶后,從2019年3月開始,便全力以赴地準備開源工作。

2019年7月12日,在全球架構師峰會深圳站上,我正式宣布TDengine單機版開源。由于我們的產品精準定位于物聯網、工業(yè)互聯網數據平臺的核心需求,加之核心代碼的開源,以及其卓越的性能和用戶體驗,我們的產品迅速走紅。GitHub網站上的星數和Fork次數持續(xù)攀升,連續(xù)多日在全球趨勢排行榜上占據首位,TDengine官方網站的訪問量也急劇增加。開源3個月后,GitHub網站上的星數已突破1萬。這一切成績遠超我們的預期。我們6人的小團隊竟然點燃了整個市場的熱情。

在決定開源時,我堅信必須將最核心的代碼開源,因為只有真正為用戶提供價值,將自己的技術創(chuàng)新和優(yōu)勢完全展示出來,才能贏得開發(fā)者的青睞。然而,由于擔心開源可能不會成功,我們最初并沒有將一個核心功能——集群功能開源。但在單機版開源后,我們看到市場的熱烈反響,以及大量用戶對集群功能的迫切需求,這促使我們決定將集群版也開源。經過充分準備,2020年8月,我們正式發(fā)布集群版的開源代碼。事實證明,這一決策同樣正確。集群版開源后,再次受到開發(fā)者社區(qū)的熱烈歡迎,GitHub網站上的星數持續(xù)上升,實例的安裝數量迅速增長至每天超過200,每日克隆代碼的人數超過1000。

認識到云原生技術是未來發(fā)展的關鍵,我們積極開發(fā)了云原生版,并在2021年8月將其開源,同樣贏得了眾多開發(fā)者的喜愛。

TDengine產品仍在不斷演進之中,未來我們計劃開源更多模塊。我們對開源的承諾始終如一,那就是將用戶最喜愛的、最核心的功能開源。

商業(yè)化成功是開源持續(xù)成功的保障

企業(yè)的生存和發(fā)展需要盈利作為支撐。我們不能僅依賴研發(fā)團隊的熱情,而不考慮經濟回報地持續(xù)推進開源項目。因此,在開源項目取得成功的同時,我們正積極探索實現商業(yè)成功的途徑。經過一系列的市場調研,我們決定遵循開源軟件的常見模式,推出付費的企業(yè)版。

TDengine的核心代碼,包括集群版和云原生版,已經全面開源。那么,企業(yè)版與之相比有何獨特之處呢?我們決定將企業(yè)特別關注的功能,如數據備份、容災、權限控制、安全、多級存儲及各種數據源的無縫接入等輔助功能,全部集成到企業(yè)版中。即便沒有這些輔助功能,TDengine作為一個時序數據庫,在功能和性能上也已經十分完備,并且與其他開源時序數據庫相比,其優(yōu)勢依然顯著。然而,這些輔助功能對企業(yè)的日常運營至關重要。

TDengine廣泛應用于物聯網、工業(yè)互聯網等場景,這些場景涉及多種數據源,例如MQTT、OPC-UA、OPC-DA等。在工業(yè)場景中,也存在許多傳統的實時數據庫,如AVEVA PI System、Wonderware等。TDengine企業(yè)版包含一個專門的組件,通過簡單配置,無須編寫任何代碼,即可通過該組件實時讀取這些數據源的數據并保存到TDengine中。鑒于不同數據源在命名規(guī)則、測量單位、時區(qū)等方面存在差異,TDengine企業(yè)版還具備數據轉換、過濾和清洗的功能,確保入庫數據的質量。這大大簡化了系統部署的復雜性。

在企業(yè)級應用中,數據庫的備份與恢復、異地容災、實時同步等功能至關重要。缺少這些功能,數據安全將無法得到保障,企業(yè)也不敢輕易投入運營。因此,TDengine企業(yè)版提供了這些關鍵功能。此外,隨著邊緣計算的興起,眾多企業(yè)期望將邊緣側的數據匯集至云端。為此,TDengine企業(yè)版還提供了邊云協同功能,僅須簡單配置,即可實現邊緣側數據向私有云或公有云實時同步。

在企業(yè)級應用中,確保數據訪問安全同樣至關重要。因此,TDengine企業(yè)版提供了數據傳輸加密、數據庫存儲加密,并設置了數據庫訪問權限、IP白名單和操作審計等功能。此外,TDengine還支持視圖功能,并對視圖實施了精細的權限控制,允許數據訪問控制精確到具體的表、列和時間段等。通過SQL定義的數據訂閱能夠指定可訪問的表、列和時間段,甚至可以對原始數據執(zhí)行加工或聚合操作,并結合權限進行控制。這一切都是為了最大程度地保證數據訪問的安全性。

在數據量呈指數級增長的當下,存儲成本始終是企業(yè)運營中必須考量的因素。因此,TDengine企業(yè)版引入了多級存儲機制,根據數據的訪問頻率,即冷熱程度進行分層存儲。最常訪問的熱數據存儲在內存中,較熱的數據則存放于固定硬盤上。對于訪問頻率較低的冷數據,存儲在普通的機械硬盤上,而最不常訪問的冷數據則可以存儲在S3等更經濟的存儲服務上,從而最大程度地降低存儲成本。

除了提供企業(yè)版以外,自2023年3月起,TDengine還推出了全托管云服務,并已在阿里云、AWS、Azure、GCP四大云平臺上部署。對于中小企業(yè)來說,云服務是實現快速部署、享受高標準專業(yè)服務的同時,有效控制和降低運營成本的優(yōu)選方案。我們深信,開源軟件的發(fā)展前景與云服務緊密相連。通過開源模式,我們能夠快速建立市場品牌和開發(fā)者社區(qū),進而促使大量用戶轉化為云服務的使用者。

將數據價值最大化

TDengine的核心是一個時序數據庫,它致力于高效地采集、清洗、加工和存儲時序數據,并通過SQL提供強大的數據查詢、分析以及實時數據分發(fā)服務。無論應用場景如何,用戶采集并存儲數據的根本目的是挖掘其內在價值,如實現運營的實時監(jiān)控、異常檢測及時報警、未來趨勢預測,以及設備預測性維護等。因此,TDengine的核心目標是助力用戶最大化數據的價值。

TDengine的查詢計算引擎本身已具備強大的數據分析功能,支持標準SQL、嵌套查詢、用戶自定義函數,以及眾多專為時序數據設計的擴展函數。為了助力用戶最大程度地挖掘數據價值,TDengine通過標準的JDBC和ODBC接口,實現了與多種BI、AI及可視化工具的無縫集成,如Power BI、Tableau、Grafana等。用戶可以根據自己的偏好選擇最合適的工具來分析和處理存儲在TDengine中的數據。

實時數據分析的重要性日益凸顯。TDengine內置實時流計算功能,支持多樣化的窗口觸發(fā)機制,如時間窗口、狀態(tài)窗口、會話窗口、事件窗口、計數窗口等。為了幫助用戶最大程度地執(zhí)行各類實時計算,TDengine還提供靈活且安全的實時數據訂閱功能。一旦訂閱的數據發(fā)生更新,第三方工具將即刻收到通知,從而能夠對數據進行及時處理。

為了簡化各類應用的開發(fā)流程,TDengine提供了支持C/C++、Java、Python、Rust、Go、Node.js等多種主流編程語言的連接器,并為各種功能提供了即拷即用的示例代碼。

隨著人類社會步入AI時代,新的算法和模型層出不窮,數據分析和處理工具也在不斷更新。面對這一趨勢,沒有單一廠商能夠提供全部所需工具。TDengine致力于通過其開放接口,確保與這些新興工具和平臺的無縫集成,助力用戶充分挖掘數據的潛在價值。

寫在最后

自我寫下TDengine的第1行代碼以來,已經過去了7年。當年49歲的我,現在已經56歲。盡管開發(fā)之路充滿挑戰(zhàn),但令人鼓舞的是,TDengine的日均安裝量持續(xù)增長,產品正被越來越多的用戶接受并喜愛。TDengine的商業(yè)化進程也進展順利,我們已擁有200多個付費客戶,他們來自電力、新能源、汽車、石油、化工、礦山、智能制造等多個行業(yè)。我們的客戶群體不僅遍布中國,而且已經擴展到全球各地。

為了幫助廣大用戶快速掌握并有效使用TDengine,我們團隊決定編寫這本《時序大數據平臺TDengine核心原理與實戰(zhàn)》。在本書的編寫過程中,有十余名研發(fā)團隊成員參與。在編輯的指導下,我們努力確保內容的全面性和準確性。書中不僅介紹了TDengine的數據模型、數據寫入、數據查詢、數據訂閱、流計算等一系列核心功能,還包括運營和維護TDengine所必需的知識。

作為開源承諾的一部分,我們對TDengine的內核設計進行了詳盡的闡述,從分布式架構到存儲、查詢計算、流計算、數據訂閱等。研發(fā)愛好者可以通過這些章節(jié)與我們發(fā)布在GitHub網站上的源代碼對照學習,深入理解TDengine的設計和工程實現。此外,我們還精選了一些典型的應用場景并對其進行了深入介紹。

繼2016年AlphaGo的突破之后,2023年ChatGPT再次將AI推向了嶄新的高度。AI的飛速發(fā)展使人們更加意識到數據的價值,數據基礎設施的重要性隨之日益凸顯,且數據量將持續(xù)呈指數級增長。由于這些增長的數據大多來自機器、設備和傳感器采集的時序數據,因此我們堅信時序數據處理這一細分市場必將不斷擴大。當傳統數據庫和大數據處理工具在性能、水平擴展性和運維成本方面越來越難以滿足需求時,TDengine將迎來其發(fā)展的黃金時期。

我深感慶幸自己在2016年做出的決定,選擇研發(fā)一款既有迫切市場需求和技術壁壘,又須長期投入且具有巨大發(fā)展?jié)摿Φ漠a品。我同樣慶幸我們選擇將核心代碼開源。現在,我們所能做的是繼續(xù)在開源的道路上奮力前行,力爭使TDengine成為時序大數據平臺的業(yè)界標準。堅持做難而正確的事情,這是我一生中永不后悔的選擇。

Leave a dent in the world!(為世界留痕!)

陶建輝

濤思數據TDengine創(chuàng)始人

2024年7月12日,寫于TDengine開源5周年之際

主站蜘蛛池模板: 沧州市| 江陵县| 新昌县| 祁阳县| 富川| 静安区| 通海县| 左权县| 商水县| 施甸县| 五华县| 威信县| 曲沃县| 宁乡县| 改则县| 天长市| 兴山县| 津市市| 图木舒克市| 昭平县| 离岛区| 阿拉尔市| 漯河市| 沧源| 阳春市| 冀州市| 汤阴县| 石渠县| 新绛县| 巫溪县| 丰都县| 繁峙县| 湘潭市| 大化| 兴仁县| 扬中市| 手机| 宁陵县| 缙云县| 通江县| 阿荣旗|