除了花開疫散,我最希望的是開源的TDengine能媲美SQLite

雖然新冠狀病毒的疫情沒有結束,濤思數據團隊都居家遠程辦公,還是按期在2月10日線上發佈了TDengine ARM 32位與64位版,而且100%開源,只是把原計劃的線下發布活動取消了。大家現在就可以到GitHub下載所有源碼進行編譯、運行和測試了。雖然TDengine早開源了,但僅支持X86,這次ARM版的發佈,了卻了我的一個心願,就是利用TDengine體量小、性能高、資源佔用少的優勢,爲邊緣計算、嵌入式系統提供一高效、高速、簡單易用的時序數據處理系統,來解決流行的SQLite在物聯網、工業互聯網場景下的諸多不足。

SQLite這款產品在我心目中是神一樣的存在,是我3年前創立濤思數據時樹的一個學習標杆。從創始人Richard Hipp 2000年開始開發起,SQLite現已經有數千億份拷貝在各種設備裏運行,包括大家熟悉的Android、Apple手機、Firefox、Chrome、Safari瀏覽器,衆多的嵌入式盒子,包括物聯網網關等都裝有SQLite。它是全球裝機量最大的數據庫,遠遠超過大家熟悉的MySQL、Oracle數據庫。爲何SQLite如此流行?一句話,產品做到了極致。看看這些亮點:沒有服務器,僅僅一個C語言庫,整個數據庫存放於單一跨平臺的文件,支持ACID,零配置,而且體量可以僅爲600KB。關鍵是,SQLite還是開源免費的。在資源緊張的各種嵌入式設備裏,不用它纔怪呢。

做的這麼好的產品,我們還有機會嗎?幸運的是,我們有。因爲隨着物聯網的興起,各種大大小小的設備都在採集數據,而這些採集的數據具有鮮明的特點,比如帶有時間戳、結構化、沒有更新、數據源唯一等。而且這些數據的應用上,特點也很明顯,比如數據往往只保留一定的時長、需要做降採樣、插值、實時計算、聚合等操作,關心的是一段時間的趨勢而不是某一特點時間的值等等。隨着雲平臺的普及,這些設備往往還需要將原始或加工後的數據同步到雲端。目前在嵌入式的各種盒子裏,大家都是採用SQLite來處理。而SQLite是標準的關係型數據庫,基本的存儲、查詢都沒有問題,但採集量偏大之後,性能成爲瓶頸,而且還得自己開發很多功能,比如定期刪除數據、實現數據的斷點續傳、實現降採樣、聚合計算等等。對於開發者來講,用SQLite來處理這些採集的數據,只是一個權宜之計,不是最佳方案。這就是機會,而且是巨大的機會,因爲越來越多的設備在聯網,在採集數據。

三年前,我在研究物聯網數據處理這個市場的時候,就仔細琢磨了雲端和邊緣側的需求。雲端是大數據平臺,需要高併發、高吞吐率、高可靠,而單一嵌入式設備裏,資源少,數據量小。但從功能來看,兩者需求又是幾乎一致的,都要有存儲、查詢、分析、計算、訂閱的功能。因此從讓開發者簡單易用的角度出發,我決定將雲端與邊緣側用同一套代碼、同樣的API接口實現,只是集羣與單機版的區別,以解決雲端的大數據量與高可靠問題。

三年前我的設計草

首先,我認爲要學習SQLite的無依賴、體量小的優點。因此TDengine的開發決定採用C語言,沒有使用任何第三方的庫,一切都是自己開發,包括定時器、RPC等模塊等。雖然C語言開發有一系列頭疼問題,如內存泄露、無效指針、多線程同步等,但我很慶幸當時的決定,因爲TDengine  ARM版的安裝包不到1.3MB,而且內存的需求不到1MB,遠遠小於InfluxDB、OpenTSDB等其他時序數據。在資源緊張的嵌入式系統,TDengine一下成了時序數據庫的理想選擇。

採集的時序數據的處理往往不只是一個簡單的存儲和查詢,還需要做加工,最常用的是降採樣,需要將採集的原始數據按照固定的時間間隔在時間軸上做聚合。在資源豐富的服務器,可以採用Spark、Flink等流式計算等工具來實現。在資源緊張的嵌入式系統,安裝一個Spark只是一種奢望。SQLite解決了數據存儲問題,但沒有提供緩存功能,因此如果一個嵌入式系統要對採集數據做實時緩存,就需要採用Redis這類工具,不然就需要自己開發。考慮到這些因素,我從一開始設計,就決定要打造一個全棧的時序數據處理工具,不僅只是一個時序數據庫,還提供緩存、流式計算、消息隊列、訂閱等系列功能,最大程度地減少對系統資源的消耗,最大程度地減少系統設計和維護的複雜度。很慶幸,自己又做了一正確的決策,讓TDengine在資源緊張的嵌入式系統裏能脫穎而出。

在物聯網發展起來之前,每個嵌入式盒子都是孤立的,還沒有云端的概念。但現在,由於通訊成本大幅降低,各種採集的數據要匯聚到雲端做進一步分析處理,爲業務的運營、預警、優化等提供決策依據。因此邊雲協同(邊緣計算-雲端)概念應運而生,邊緣側需要源源不斷的將採集包括加工後的的數據發往雲端。但因爲網絡的穩定性、數據權限等問題,邊雲協同的實現不是一簡單的事情。2017年底,我認爲要通過數據訂閱的方式來解決這個問題,讓雲端可以訂閱邊緣側的原始數據、或是符合指定過濾條件的數據。因此TDengine的第一個版本就帶有訂閱功能。在研究邊雲協同的研發同學試試我說的訂閱功能,看是否能大幅減少你的開發成本。

SQLite是超級成功的軟件,但開發團隊很小,其官網公佈的開發者僅僅三個人。創始人Richard Hipp是1984年從美國喬治理工本科畢業的,2000年時開始啓動SQLite的開發,已經20年,難得的是他現在仍然是整個項目的架構師和負責人,貢獻了大部分代碼。因此從組建濤思數據團隊的第一天起,我就牢牢的記住一個原則,底層工具的成功不依賴於團隊的規模,而是要有一支能全心身投入的精幹隊伍,並且創始人自己要參與設計與編碼工作。因此,時至今日,即使在獲得GGV紀源資本、紅杉中國的投資後,TDengine研發團隊的成員還不到10人。我想,隨着業務的開展,也許我們會組建不小的外圍應用開發和技術支持隊伍,但是TDengine這個核心工具本身,研發人員一定會控制在10人以內。而且希望20年之後,我雖然已過70,還能參與TDengine的研發,還能debug代碼。

TDengine不是要代替SQLite,只是要在時序數據處理的這個細分市場裏提供一更強大的工具。TDengine是否能像SQLite這樣成功,在數億臺設備上使用,取決於TDengine能否一直保持性能高、體量小、功能全、資源佔用少的特色,取決於我自己還有整個團隊能否十年如一日的堅持和專注。更重要的是,我們必須開源,100%的開源,而且將開源進行到底。如果不開源,我想象不出任何途徑能讓TDengine獲得SQLite這樣的成功,讓全球數千萬開發者受益。如果你能去GitHub下載我們的源碼,測試體驗,就是對我們開源最大的支持,就能讓我們離目標更近一步。如果你使用過程中遇到任何問題,歡迎通過GitHub遞交給我們,哪怕在疫情期間,也都能得到我和團隊的及時回覆和反饋。隔離病毒,不隔離開源的熱情!

一個程序員,如果一輩子能夠開發出一款媲美SQLite的軟件,讓全球開發者受益,那一件最自豪、最幸福的事情。受上帝的垂青,50歲的我,在一個早被IT行業淘汰的年齡,找到了一個這樣的機會,而且很幸運,組建了一個精幹的團隊,還獲得了不小的風險投資。現在版本已經發布,剩下的是要細細地磨,持續地磨,不斷優化,解決各種實際應用中遇到的問題,而且除X86、ARM之外,適配更多的系統。願TDengine能像SQLite一樣流行,在數百億的設備裏安裝上。

希望TDengine ARM版的發佈能夠減輕一下技術人和創業者在疫情和寒冬中的焦慮,能夠溫暖你、振奮你。人類抵擋了一次又一次的疫情,新冠病毒也將很快被人類征服。疫情會過去,寒冬會過去,春天會來,蝴蝶也會來,讓我們一起靜待春暖花開!

陶建輝

2020年2月23日於北京望京家中

點擊閱讀原文,體驗TDengine最新版本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章